# Production-oriented stack. Set secrets via .env (see .env.example and docs/DEPLOYMENT.md). # Terminate TLS at your reverse proxy (nginx, Caddy, cloud load balancer). services: db: image: postgres:16-alpine@sha256:79950da386bda7fcc9d57aa9aa9be6c6d7407596a9b8f68014b09a778a9ab316 environment: POSTGRES_USER: vulcanbench POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:?set POSTGRES_PASSWORD} POSTGRES_DB: vulcanbench volumes: - pgdata:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U vulcanbench"] interval: 5s timeout: 5s retries: 5 restart: unless-stopped backend: build: context: . dockerfile: backend/Dockerfile depends_on: db: condition: service_healthy environment: DATABASE_URL: postgresql+psycopg://vulcanbench:${POSTGRES_PASSWORD}@db:5432/vulcanbench VULCANBENCH_API_TOKEN: ${VULCANBENCH_API_TOKEN:?set VULCANBENCH_API_TOKEN} VULCANBENCH_CORS_ORIGINS: ${VULCANBENCH_CORS_ORIGINS:-*} VULCANBENCH_RUNS_DIR: /data/runs VULCANBENCH_TASKS_ROOT: /app/tasks/v1 volumes: - runs:/data/runs ports: - "127.0.0.1:8000:8000" restart: unless-stopped dashboard: build: context: ./dashboard dockerfile: Dockerfile args: NEXT_PUBLIC_API_BASE: ${NEXT_PUBLIC_API_BASE:-http://localhost:8000} NEXT_PUBLIC_REPO: ${NEXT_PUBLIC_REPO:-morganlinton/VulcanBench} depends_on: - backend environment: NEXT_PUBLIC_API_BASE: ${NEXT_PUBLIC_API_BASE:-http://localhost:8000} NEXT_PUBLIC_REPO: ${NEXT_PUBLIC_REPO:-morganlinton/VulcanBench} ports: - "127.0.0.1:3000:3000" restart: unless-stopped volumes: pgdata: runs: