services: horizon-app: build: context: . dockerfile: Dockerfile container_name: horizon-app ports: - "3000:3000" environment: - NODE_ENV=production - DATABASE_URL=postgresql://horizon_user:${DB_PASSWORD}@horizon-db:5432/horizon - NEXTAUTH_URL=${NEXTAUTH_URL} - NEXTAUTH_SECRET=${NEXTAUTH_SECRET} - AZURE_AD_CLIENT_ID=${AZURE_AD_CLIENT_ID} - AZURE_AD_CLIENT_SECRET=${AZURE_AD_CLIENT_SECRET} - AZURE_AD_TENANT_ID=${AZURE_AD_TENANT_ID} - AFW_SERVER=${AFW_SERVER} - AFW_DATABASE=${AFW_DATABASE} - AFW_USER=${AFW_USER} - AFW_PASSWORD=${AFW_PASSWORD} - CRON_SECRET=${CRON_SECRET} - METRICS_SECRET=${METRICS_SECRET} - GRAPH_CLIENT_ID=${GRAPH_CLIENT_ID} - GRAPH_CLIENT_SECRET=${GRAPH_CLIENT_SECRET} - GRAPH_TENANT_ID=${GRAPH_TENANT_ID} depends_on: horizon-db: condition: service_healthy restart: unless-stopped networks: - horizon-internal - pangolin horizon-db: image: postgres:17 container_name: horizon-db environment: - POSTGRES_DB=horizon - POSTGRES_USER=horizon_user - POSTGRES_PASSWORD=${DB_PASSWORD} volumes: - horizon-pgdata:/var/lib/postgresql/data restart: unless-stopped networks: - horizon-internal healthcheck: test: ["CMD-SHELL", "pg_isready -U horizon_user -d horizon"] interval: 10s timeout: 5s retries: 5 volumes: horizon-pgdata: driver: local networks: horizon-internal: driver: bridge pangolin: external: true