services: postgres: image: postgres:16-alpine environment: POSTGRES_DB: inboxintel POSTGRES_USER: inboxintel POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-inboxintel} volumes: - pgdata:/var/lib/postgresql/data ports: - "5432:5432" healthcheck: test: ["CMD-SHELL", "pg_isready -U inboxintel"] interval: 5s timeout: 5s retries: 10 api: build: context: . dockerfile: src/InboxIntel.Api/Dockerfile environment: ASPNETCORE_ENVIRONMENT: Production ASPNETCORE_URLS: http://+:8080 ConnectionStrings__Postgres: "Host=postgres;Port=5432;Database=inboxintel;Username=inboxintel;Password=${POSTGRES_PASSWORD:-inboxintel}" DataProtection__KeyPath: /keys GoogleOAuth__ClientId: ${GOOGLE_CLIENT_ID:-} GoogleOAuth__ClientSecret: ${GOOGLE_CLIENT_SECRET:-} Ai__Mode: ${AI_MODE:-Disabled} # Dev mode shows the dev banner and caps the initial sync. Set DEV_MODE=true # and MAX_MESSAGES=1000 in deploy/.env to exercise it in this Docker setup. App__DevMode: ${DEV_MODE:-false} GmailSync__MaxMessages: ${MAX_MESSAGES:-0} Cors__Origins__0: ${FRONTEND_ORIGIN:-http://localhost:8081} volumes: - keys:/keys depends_on: postgres: condition: service_healthy ports: - "8080:8080" frontend: build: context: ./frontend dockerfile: Dockerfile depends_on: - api ports: - "8081:80" # Optional reverse proxy. Enable with: docker compose --profile proxy up nginx: image: nginx:alpine profiles: ["proxy"] volumes: - ./nginx/nginx.conf:/etc/nginx/conf.d/default.conf:ro depends_on: - api - frontend ports: - "80:80" volumes: pgdata: keys: