services: postgres: image: postgres:16-alpine environment: POSTGRES_DB: flowguard POSTGRES_USER: flowguard_user POSTGRES_PASSWORD: flowguard_pass volumes: - pgdata:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U flowguard_user -d flowguard"] interval: 5s timeout: 3s retries: 20 redis: image: redis:7-alpine healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 5s timeout: 3s retries: 20 capture: build: ./capture-cpp profiles: ["capture"] volumes: - ./data:/app/data ml-service: build: context: . dockerfile: ml-service/Dockerfile ports: - "8000:8000" volumes: - ./data:/app/data depends_on: postgres: condition: service_healthy redis: condition: service_healthy environment: DATABASE_URL: "postgresql://flowguard_user:flowguard_pass@postgres:5432/flowguard?schema=public" POSTGRES_HOST: "postgres" POSTGRES_PORT: "5432" REDIS_HOST: "redis" REDIS_PORT: "6379" FLOWGUARD_FLOW_FILE: "/app/data/flows_output.jsonl" THREAT_INTEL_FILE: "/app/seed-data/threat_intel.csv" healthcheck: test: ["CMD", "curl", "--fail", "http://localhost:8000/health"] interval: 10s timeout: 3s retries: 20 dashboard: ports: - "3000:3000" depends_on: ml-service: condition: service_healthy build: context: ./dashboard args: NEXT_PUBLIC_API_URL: http://localhost:8000 volumes: pgdata: