Initial CHORUS project setup
🎭 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
This commit is contained in:
110
docker/docker-compose.yml
Normal file
110
docker/docker-compose.yml
Normal file
@@ -0,0 +1,110 @@
|
||||
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
|
||||
Reference in New Issue
Block a user