name: cefense-local services: db: image: postgres:17-alpine environment: POSTGRES_DB: cefense POSTGRES_USER: cefense POSTGRES_PASSWORD: cefense-local healthcheck: test: ["CMD-SHELL", "pg_isready -U cefense -d cefense"] interval: 2s timeout: 3s retries: 20 volumes: - cefense-postgres:/var/lib/postgresql/data networks: - cefense migrate: build: context: . dockerfile: apps/backend/Dockerfile.local command: ["bun", "run", "db:push"] environment: DATABASE_URL: postgres://cefense:cefense-local@db:5432/cefense depends_on: db: condition: service_healthy restart: "no" networks: - cefense backend: build: context: . dockerfile: apps/backend/Dockerfile.local environment: PORT: 3001 NODE_ENV: development FRONTEND_URL: http://localhost:8080 DATABASE_URL: postgres://cefense:cefense-local@db:5432/cefense LOCAL_DEV_AUTH_EMAIL: guest@cefense.local LOCAL_DEV_AUTH_FIRST_NAME: Guest LOCAL_DEV_AUTH_LAST_NAME: "" SCAN_RUNNER: inline SCAN_AUTOFIX: "false" depends_on: db: condition: service_healthy migrate: condition: service_completed_successfully healthcheck: test: [ "CMD", "bun", "-e", "const r=await fetch('http://127.0.0.1:3001/health');if(!r.ok)process.exit(1)", ] interval: 3s timeout: 3s retries: 30 networks: - cefense frontend: build: context: . dockerfile: apps/frontend/Dockerfile environment: PORT: 8080 BACKEND_URL: http://backend:3001 depends_on: backend: condition: service_healthy healthcheck: test: [ "CMD", "bun", "-e", "const r=await fetch('http://127.0.0.1:8080/');if(!r.ok)process.exit(1)", ] interval: 3s timeout: 3s retries: 20 ports: - "8080:8080" networks: - cefense volumes: cefense-postgres: networks: cefense: driver: bridge