services: worker: build: ./worker restart: unless-stopped env_file: - .env environment: # Health check port (exposed to host for docker healthcheck) - HEALTH_PORT=8765 # Web UI port - WEB_UI_PORT=8766 # Scheduler staleness threshold in seconds - HEALTHCHECK_SCHEDULER_STALE_S=300 ports: - "8766:8766" # Web UI networks: - supabase_default # Graceful shutdown timeout — Docker sends SIGTERM, container has this long to clean up. stop_grace_period: 15s # Docker healthcheck (uses the in-container aiohttp server) healthcheck: test: ["CMD", "python", "-c", "import httpx,os; r=httpx.get(f'http://localhost:{os.getenv(\"HEALTH_PORT\",\"8765\")}/health'); r.raise_for_status()"] interval: 15s timeout: 5s retries: 3 start_period: 10s networks: supabase_default: external: true