services: postgres: build: context: . dockerfile: Dockerfile.postgres environment: POSTGRES_USER: figaro POSTGRES_PASSWORD: figaro POSTGRES_DB: figaro volumes: - figaro_pgdata:/var/lib/postgresql/data - ./init.sql:/docker-entrypoint-initdb.d/init.sql:ro networks: - figaro-net healthcheck: test: ["CMD-SHELL", "pg_isready -U figaro"] interval: 5s timeout: 5s retries: 5 nats: image: nats:2.12.4-alpine3.22 command: -c /etc/nats/nats.conf volumes: - nats_data:/data - ./nats.conf:/etc/nats/nats.conf:ro networks: - figaro-net healthcheck: test: ["CMD-SHELL", "wget -qO- http://localhost:8222/healthz || exit 1"] interval: 5s timeout: 5s retries: 5 orchestrator: build: context: .. dockerfile: figaro/Dockerfile depends_on: postgres: condition: service_healthy guacd: condition: service_healthy nats: condition: service_healthy env_file: - ../.env environment: - FIGARO_HOST=0.0.0.0 - FIGARO_PORT=8000 - FIGARO_DATABASE_URL=postgresql+asyncpg://figaro:figaro@postgres/figaro - FIGARO_NATS_URL=nats://nats:4222 - FIGARO_NATS_WS_URL=ws://localhost:8443 - FIGARO_GUACD_HOST=guacd networks: - figaro-net healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8000/api/config"] interval: 5s timeout: 5s retries: 3 worker: build: context: .. dockerfile: docker/Dockerfile.worker-desktop depends_on: nats: condition: service_healthy orchestrator: condition: service_healthy env_file: - ../.env environment: - WORKER_NATS_URL=nats://nats:4222 volumes: - ~/.claude.json:/home/vscode/.claude.json:ro - ~/.claude/.credentials.json:/home/vscode/.claude/.credentials.json:ro networks: - figaro-net ipc: host shm_size: '1gb' security_opt: - seccomp:seccomp_profile.json deploy: replicas: 2 supervisor: build: context: .. dockerfile: docker/Dockerfile.supervisor depends_on: nats: condition: service_healthy orchestrator: condition: service_healthy environment: - SUPERVISOR_NATS_URL=nats://nats:4222 volumes: - ~/.claude.json:/home/vscode/.claude.json:ro - ~/.claude/.credentials.json:/home/supervisor/.claude/.credentials.json:ro networks: - figaro-net deploy: replicas: 2 guacd: build: context: . dockerfile: Dockerfile.guacd restart: unless-stopped networks: - figaro-net healthcheck: test: ["CMD-SHELL", "pidof guacd"] interval: 10s timeout: 5s retries: 3 gateway: build: context: .. dockerfile: figaro-gateway/Dockerfile depends_on: nats: condition: service_healthy orchestrator: condition: service_healthy env_file: - ../.env volumes: - ~/.claude/.credentials.json:/home/gateway/.claude/.credentials.json:ro # This is only required for Voice message transcription environment: - GATEWAY_NATS_URL=nats://nats:4222 networks: - figaro-net networks: figaro-net: driver: bridge volumes: figaro_pgdata: nats_data: