services: db: image: postgres:16-alpine environment: - POSTGRES_DB=${DB_NAME} - POSTGRES_USER=${DB_USER} - POSTGRES_PASSWORD=${DB_PASSWORD} ports: - "5432:5432" volumes: - postgres_data:/var/lib/postgresql/data - ./database/init.sql:/docker-entrypoint-initdb.d/init.sql healthcheck: test: ["CMD-SHELL", "pg_isready -U ${DB_USER}"] interval: 5s timeout: 5s retries: 5 restart: unless-stopped networks: - app-network backend: build: context: ./backend dockerfile: Dockerfile ports: - "3001:3001" environment: NODE_ENV: ${NODE_ENV:-development} PORT: "3001" FRONTEND_URL: ${FRONTEND_URL:-http://localhost} DATABASE_URL: postgresql://${DB_USER}:${DB_PASSWORD}@db:5432/${DB_NAME} GITHUB_CLIENT_ID: ${GITHUB_CLIENT_ID} GITHUB_CLIENT_SECRET: ${GITHUB_CLIENT_SECRET} TOKEN_ENCRYPTION_KEY: ${TOKEN_ENCRYPTION_KEY:?TOKEN_ENCRYPTION_KEY is required} LOG_LEVEL: ${LOG_LEVEL:-info} ALLOWED_SCAN_BASE_DIR: ${ALLOWED_SCAN_BASE_DIR:-/tmp} SESSION_COOKIE_NAME: ${SESSION_COOKIE_NAME:-autosecure_session} CSRF_COOKIE_NAME: ${CSRF_COOKIE_NAME:-autosecure_csrf} OAUTH_STATE_COOKIE_NAME: ${OAUTH_STATE_COOKIE_NAME:-autosecure_oauth_state} COOKIE_SAME_SITE: ${COOKIE_SAME_SITE:-lax} SESSION_TTL_HOURS: ${SESSION_TTL_HOURS:-168} OAUTH_STATE_TTL_MINUTES: ${OAUTH_STATE_TTL_MINUTES:-10} depends_on: db: condition: service_healthy restart: unless-stopped networks: - app-network frontend: build: context: . dockerfile: Dockerfile args: - VITE_API_URL=${VITE_API_URL} - VITE_GITHUB_CLIENT_ID=${VITE_GITHUB_CLIENT_ID} - VITE_GITHUB_REDIRECT_URI=${VITE_GITHUB_REDIRECT_URI} ports: - "80:8080" depends_on: - backend restart: unless-stopped networks: - app-network networks: app-network: driver: bridge volumes: postgres_data: