version: '3.8' services: # ─── PostgreSQL Database ────────────────────────────────────────────────── postgres: image: postgres:15-alpine container_name: autopilot-postgres environment: POSTGRES_DB: localagent_cloud POSTGRES_USER: ${DB_USER} POSTGRES_PASSWORD: ${DB_PASS} volumes: - postgres_data:/var/lib/postgresql/data restart: unless-stopped healthcheck: test: ["CMD-SHELL", "pg_isready -U ${DB_USER} -d localagent_cloud"] interval: 10s timeout: 5s retries: 5 networks: - autopilot-net # ─── AutoPilot Master (Cloud Coordinator Backend) ───────────────────────── master: build: context: ./master dockerfile: Dockerfile image: autopilot/master:latest container_name: autopilot-master ports: - "9090:9090" environment: - SPRING_PROFILES_ACTIVE=prod - DB_URL=${DB_URL} - DB_USER=${DB_USER} - DB_PASS=${DB_PASS} - JWT_SECRET=${JWT_SECRET} - AWS_REGION=${AWS_REGION} - AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID} - AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY} - S3_BUCKET_NAME=${S3_BUCKET_NAME} depends_on: postgres: condition: service_healthy restart: unless-stopped networks: - autopilot-net # ─── AutoPilot UI (React Frontend via Nginx) ─────────────────────────────── ui: build: context: ./ui dockerfile: Dockerfile image: autopilot/ui:latest container_name: autopilot-ui ports: - "80:80" - "443:443" depends_on: - master restart: unless-stopped networks: - autopilot-net # ─── AutoPilot Worker (Execution Engine) ────────────────────────────────── # NOTE: The worker needs access to a real browser (Chrome/Firefox). # For headless browser automation, run the worker on a separate machine # or a server with Xvfb installed. Uncomment if running on a capable host. # # worker: # build: # context: ./worker # dockerfile: Dockerfile # image: autopilot/worker:latest # container_name: autopilot-worker # environment: # - LOCALAGENT_CLOUD_URL=${LOCALAGENT_CLOUD_URL} # - LOCALAGENT_POLLING_ENABLED=${LOCALAGENT_POLLING_ENABLED} # depends_on: # - master # restart: unless-stopped # networks: # - autopilot-net networks: autopilot-net: driver: bridge volumes: postgres_data: