Docker Deployment

Run the SOFE Community Server as a Docker container. No Python required — just Docker.

Quick Start

# Clone the repo
git clone https://github.com/breakingthecloud/sofe.git
cd sofe

# Start with docker compose (mounts your AWS credentials)
docker compose up

# Test
curl http://localhost:8080/health
# → {"status":"ok","version":"0.2.0","edition":"community"}

Docker Run (manual)

# Option A: Mount AWS credentials (recommended)
docker run -p 8080:8080 \
  -v ~/.aws:/root/.aws:ro \
  ghcr.io/breakingthecloud/sofe-community

# Option B: Pass credentials as env vars
docker run -p 8080:8080 \
  -e AWS_ACCESS_KEY_ID=AKIA... \
  -e AWS_SECRET_ACCESS_KEY=xxx \
  -e AWS_DEFAULT_REGION=us-east-1 \
  ghcr.io/breakingthecloud/sofe-community

# Option C: Use a specific AWS profile
docker run -p 8080:8080 \
  -v ~/.aws:/root/.aws:ro \
  -e AWS_PROFILE=my-profile \
  ghcr.io/breakingthecloud/sofe-community

Build From Source

git clone https://github.com/breakingthecloud/sofe.git
cd sofe
docker build -t sofe-community .
docker run -p 8080:8080 -v ~/.aws:/root/.aws:ro sofe-community

Custom Policies

Mount your own policies directory:

docker run -p 8080:8080 \
  -v ~/.aws:/root/.aws:ro \
  -v ./my-policies:/app/policies:ro \
  ghcr.io/breakingthecloud/sofe-community

API Endpoints

GET/healthStatus check (no AWS needed)
POST/evaluateRun all policies against your AWS account
GET/policiesList available policies
GET/collectorsList registered collectors (18)
POST/validateValidate policy YAML syntax

Evaluate Example

curl -X POST http://localhost:8080/evaluate \
  -H "Content-Type: application/json" \
  -d '{"profile": "default"}'

# Response:
# {
#   "resources_scanned": 64,
#   "policies_evaluated": 20,
#   "findings_count": 48,
#   "findings": [...]
# }

Docker Compose (Production-like)

# docker-compose.yml
services:
  sofe:
    build: .
    ports:
      - "8080:8080"
    volumes:
      - ~/.aws:/root/.aws:ro
      # - ./my-policies:/app/policies:ro
    environment:
      - AWS_DEFAULT_REGION=us-east-1
    healthcheck:
      test: ["CMD", "python", "-c", "import urllib.request; urllib.request.urlopen('http://localhost:8080/health')"]
      interval: 30s
      timeout: 3s
    restart: unless-stopped

What's Included vs Pro

✅ Community (Docker)

  • • All 18 collectors
  • • All 20 policies
  • • Unlimited evaluations
  • • No auth required
  • • Custom policies supported

Pro (platform.sofe.dev)

  • • + Dashboard & history
  • • + Scheduled evaluations
  • • + Alerts (Slack/email)
  • • + Multi-account
  • • + Team collaboration