# ───────────────────────────────────────────────────────────────────────────── # Next.js CMS — blue/green # ───────────────────────────────────────────────────────────────────────────── x-cms: &cms image: epicnext-cms:${CMS_RELEASE:-local} build: context: . dockerfile: Dockerfile args: NEXT_DEPLOYMENT_ID: ${CMS_RELEASE:-unknown} network: host network_mode: host stop_grace_period: 15s restart: unless-stopped env_file: - .env volumes: - ./public/nitro-assets:/app/public/nitro-assets - ./public/swf:/app/public/swf - ./storage:/app/storage - /var/www/Gamedata:/var/www/Gamedata # ── Resource limits ── mem_limit: 6g memswap_limit: 7g cpus: 2.0 pids_limit: 512 healthcheck: test: ["CMD", "node", "-e", "fetch('http://127.0.0.1:'+(process.env.PORT||'3002')+'/api/health').then(r=>{process.exit(r.ok?0:1)}).catch(()=>process.exit(1))"] interval: 15s timeout: 5s retries: 3 start_period: 40s services: cms: <<: *cms container_name: epicnext-cms environment: - HOSTNAME=0.0.0.0 - PORT=3002 cms-green: <<: *cms container_name: epicnext-cms-green profiles: ["green"] environment: - HOSTNAME=0.0.0.0 - PORT=3003 byparr: image: ghcr.io/thephaseless/byparr:latest container_name: byparr network_mode: host restart: unless-stopped environment: - LOG_LEVEL=INFO pids_limit: 256 healthcheck: test: ["CMD", "curl", "http://localhost:8191/health"] interval: 30s timeout: 10s retries: 3 start_period: 30s