# Canonical CCS docker-compose. Served at https://ccs.kaitran.ca/docker-compose.yaml. # Source of truth: kaitranntt/ccs:docker/compose.yaml # # Quick start: # curl -fsSL https://ccs.kaitran.ca/docker-compose.yaml -o compose.yaml # docker compose up -d # # Ports: # 3000 — CCS Dashboard # 8317 — CLIProxy API # # restart: unless-stopped ensures the container restarts automatically on # system reboot or crash, but honours a deliberate `docker compose stop`. services: ccs: # image uses Docker Compose env-var-with-default syntax so CI smoke tests can # override via CCS_IMAGE=ghcr.io/.../ccs: docker compose up -d while # end users get the documented :latest by default. The Cloudflare Worker that # serves this file at ccs.kaitran.ca validates that the default part starts # with the canonical ghcr.io/kaitranntt/ccs prefix. image: ${CCS_IMAGE:-ghcr.io/kaitranntt/ccs:latest} restart: unless-stopped ports: - "3000:3000" - "8317:8317" volumes: # /root/.ccs matches the HOME used inside the integrated image. # entrypoint-integrated.sh runs as root (supervisord user=root) and # explicitly mkdir -p /root/.ccs, so state always lands here. # Note: docker/entrypoint.sh (legacy dashboard image) uses a different # default — it does NOT apply to this integrated image. - ccs_home:/root/.ccs - ccs_logs:/var/log/ccs networks: - ccs-net healthcheck: # Probes both Dashboard (:3000) and CLIProxy (:8317) before reporting # healthy — a container with only one service running is not considered # ready. Uses a 4.5s internal timeout to stay well within the 5s Docker # timeout budget. test: - "CMD-SHELL" - > node -e " const http = require('http'); let pending = 2; let ok = true; const check = (port) => http.get('http://127.0.0.1:'+port+'/', r => { if (r.statusCode >= 400) ok = false; if (--pending === 0) process.exit(ok ? 0 : 1); }).on('error', () => { ok = false; if (--pending === 0) process.exit(1); }); check(3000); check(8317); setTimeout(() => process.exit(1), 4500); " interval: 30s timeout: 5s retries: 3 volumes: ccs_home: ccs_logs: networks: ccs-net: name: ccs-net