| # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| # OmniRoute β Docker Compose (Production Snapshot) | |
| # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| # | |
| # Isolated production instance running on port 20130. | |
| # Keeps the app running while you continue developing locally. | |
| # | |
| # Usage: | |
| # docker compose -f docker-compose.prod.yml up -d --build | |
| # docker compose -f docker-compose.prod.yml down | |
| # docker compose -f docker-compose.prod.yml logs -f | |
| # | |
| # Image flavors (two Dockerfile stages): | |
| # runner-base (default / omniroute:prod) | |
| # Lean image β no Playwright/Chromium. Suitable for all providers | |
| # except web-cookie ones (gemini-web, claude-web, claude-turnstile). | |
| # | |
| # runner-web (omniroute:prod-web) β opt-in, ~300 MB extra | |
| # Includes Playwright + Chromium system libs. Required for web-cookie | |
| # providers. To use this flavor, override the build target: | |
| # | |
| # omniroute-prod: | |
| # build: | |
| # context: . | |
| # target: runner-web | |
| # image: omniroute:prod-web | |
| # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| services: | |
| # ββ Redis (Rate Limiter Backend) ββββββββββββββββββββββββββββββββββ | |
| redis: | |
| image: redis:8.6.2-alpine | |
| container_name: omniroute-redis-prod | |
| restart: unless-stopped | |
| volumes: | |
| - redis-prod-data:/data | |
| command: redis-server --save 60 1 --loglevel warning | |
| healthcheck: | |
| test: ["CMD", "redis-cli", "ping"] | |
| interval: 10s | |
| timeout: 5s | |
| retries: 3 | |
| omniroute-prod: | |
| container_name: omniroute-prod | |
| depends_on: | |
| redis: | |
| condition: service_healthy | |
| build: | |
| context: . | |
| target: runner-cli | |
| image: omniroute:prod | |
| restart: unless-stopped | |
| stop_grace_period: 40s | |
| env_file: .env | |
| environment: | |
| - NODE_ENV=production | |
| - PORT=${PORT:-20128} | |
| - DASHBOARD_PORT=${DASHBOARD_PORT:-${PORT:-20128}} | |
| - API_PORT=${API_PORT:-20129} | |
| - API_HOST=${API_HOST:-0.0.0.0} | |
| - HOSTNAME=0.0.0.0 | |
| - DATA_DIR=/app/data | |
| ports: | |
| - "${PROD_DASHBOARD_PORT:-20130}:${DASHBOARD_PORT:-${PORT:-20128}}" | |
| - "${PROD_API_PORT:-20131}:${API_PORT:-20129}" | |
| volumes: | |
| - omniroute-prod-data:/app/data | |
| healthcheck: | |
| test: ["CMD", "node", "healthcheck.mjs"] | |
| interval: 30s | |
| timeout: 5s | |
| retries: 3 | |
| start_period: 15s | |
| volumes: | |
| omniroute-prod-data: | |
| name: omniroute-prod-data | |
| redis-prod-data: | |
| name: redis-prod-data | |