| # Production stack for croo.maaihub.com | |
| # | |
| # Fronted by a Cloudflare Tunnel (no inbound ports exposed on the host). | |
| # The tunnel routes croo.maaihub.com -> frontend:80, and nginx proxies the | |
| # /health and /jobs API surface to the api container on the internal network. | |
| # | |
| # Requires TUNNEL_TOKEN in the environment (or .env). Bring up with: | |
| # docker compose -f docker-compose.prod.yml up -d --build | |
| services: | |
| api: | |
| build: ./api | |
| expose: | |
| - '8000' | |
| volumes: | |
| - ./runs:/app/runs | |
| env_file: .env | |
| restart: unless-stopped | |
| healthcheck: | |
| test: ['CMD', 'curl', '-f', 'http://localhost:8000/health'] | |
| interval: 30s | |
| timeout: 10s | |
| retries: 3 | |
| start_period: 15s | |
| cap-provider: | |
| build: ./cap-provider | |
| depends_on: | |
| api: | |
| condition: service_healthy | |
| env_file: .env | |
| restart: unless-stopped | |
| # Only starts a live CROO connection when real CROO_SDK_KEY is set. | |
| frontend: | |
| image: nginx:alpine | |
| depends_on: | |
| api: | |
| condition: service_healthy | |
| volumes: | |
| - ./frontend:/usr/share/nginx/html:ro | |
| - ./deploy/nginx.conf:/etc/nginx/conf.d/default.conf:ro | |
| expose: | |
| - '80' | |
| restart: unless-stopped | |
| cloudflared: | |
| image: cloudflare/cloudflared:latest | |
| command: tunnel --no-autoupdate run --token ${TUNNEL_TOKEN} | |
| depends_on: | |
| - frontend | |
| restart: unless-stopped | |