🎭 CHORUS - Container-First P2P Task Coordination System - Docker-first architecture designed from ground up - Environment variable-based configuration (no config files) - Structured logging to stdout/stderr for container runtimes - License validation required for operation - Clean separation from BZZZ legacy systemd approach Core features implemented: - Container-optimized logging system - Environment-based configuration management - License validation with KACHING integration - Basic HTTP API and health endpoints - Docker build and deployment configuration Ready for P2P protocol development and AI integration. 🤖 Generated with Claude Code
110 lines
3.0 KiB
YAML
110 lines
3.0 KiB
YAML
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 |