version: "3.9" services: chorus: build: context: .. dockerfile: docker/Dockerfile image: chorus:latest # REQUIRED: License configuration (CHORUS will not start without this) environment: # CRITICAL: License configuration - REQUIRED for operation - CHORUS_LICENSE_EMAIL=${CHORUS_LICENSE_EMAIL:?CHORUS_LICENSE_EMAIL is required} - CHORUS_LICENSE_KEY=${CHORUS_LICENSE_KEY:?CHORUS_LICENSE_KEY is required} - CHORUS_CLUSTER_ID=${CHORUS_CLUSTER_ID:-docker-cluster} # Agent configuration - CHORUS_AGENT_ID=${CHORUS_AGENT_ID:-} # Auto-generated if not provided - CHORUS_SPECIALIZATION=${CHORUS_SPECIALIZATION:-general_developer} - CHORUS_MAX_TASKS=${CHORUS_MAX_TASKS:-3} - CHORUS_CAPABILITIES=${CHORUS_CAPABILITIES:-general_development,task_coordination} # Network configuration - CHORUS_API_PORT=8080 - CHORUS_HEALTH_PORT=8081 - CHORUS_P2P_PORT=9000 - CHORUS_BIND_ADDRESS=0.0.0.0 # AI configuration - OLLAMA_ENDPOINT=${OLLAMA_ENDPOINT:-http://host.docker.internal:11434} - CHORUS_DEFAULT_MODEL=${CHORUS_DEFAULT_MODEL:-llama3.1:8b} # Logging configuration - LOG_LEVEL=${LOG_LEVEL:-info} - LOG_FORMAT=${LOG_FORMAT:-structured} # Persistent data storage volumes: - chorus_data:/app/data # Network ports ports: - "${CHORUS_API_PORT:-8080}:8080" # HTTP API - "${CHORUS_HEALTH_PORT:-8081}:8081" # Health checks - "${CHORUS_P2P_PORT:-9000}:9000" # P2P communication # Container resource limits deploy: mode: replicated replicas: ${CHORUS_REPLICAS:-1} update_config: parallelism: 1 delay: 10s failure_action: rollback order: start-first restart_policy: condition: on-failure delay: 5s max_attempts: 3 window: 120s resources: limits: cpus: "${CHORUS_CPU_LIMIT:-1.0}" memory: "${CHORUS_MEMORY_LIMIT:-1G}" reservations: cpus: "0.1" memory: 128M placement: preferences: - spread: node.id constraints: - node.role == worker # Network configuration networks: - chorus_net # Host resolution for external services extra_hosts: - "host.docker.internal:host-gateway" # Container logging configuration logging: driver: "json-file" options: max-size: "10m" max-file: "3" tag: "{{.ImageName}}/{{.Name}}/{{.ID}}" # Health check configuration healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8081/health"] interval: 30s timeout: 10s retries: 3 start_period: 10s # Persistent volumes volumes: chorus_data: driver: local # Networks for CHORUS communication networks: chorus_net: driver: overlay attachable: true ipam: config: - subnet: 10.201.0.0/24