UNPKG

claude-flow

Version:

Ruflo - Enterprise AI agent orchestration for Claude Code. Deploy 60+ specialized agents in coordinated swarms with self-learning, fault-tolerant consensus, vector memory, and MCP integration

160 lines (151 loc) 4.43 kB
# Docker Compose for Claude Flow V3 Headless Worker Pool # ADR-020: Headless Worker Integration Architecture - Phase 3 # # Usage: # docker-compose -f docker-compose.workers.yml up -d # docker-compose -f docker-compose.workers.yml scale worker-pool=5 # docker-compose -f docker-compose.workers.yml down # # Environment Variables (required): # ANTHROPIC_API_KEY - Your Anthropic API key # # Optional: # CLAUDE_FLOW_WORKERS - Comma-separated list of workers to enable # CLAUDE_FLOW_SANDBOX - Sandbox mode (strict, permissive, disabled) version: '3.8' services: # Worker Pool - Scalable headless worker containers worker-pool: image: ghcr.io/ruvnet/claude-flow-headless:latest build: context: . dockerfile: Dockerfile.headless deploy: replicas: 3 resources: limits: cpus: '2' memory: 4G reservations: cpus: '0.5' memory: 1G restart_policy: condition: on-failure delay: 5s max_attempts: 3 environment: - ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY} - CLAUDE_CODE_HEADLESS=true - CLAUDE_CODE_SANDBOX_MODE=${CLAUDE_FLOW_SANDBOX:-strict} - CLAUDE_FLOW_WORKERS=${CLAUDE_FLOW_WORKERS:-audit,optimize,testgaps} - REDIS_URL=redis://redis:6379 - NODE_ENV=production volumes: - workspace:/workspace:ro - claude-flow-state:/root/.claude-flow - worker-logs:/var/log/claude-flow command: npx claude-flow@v3alpha daemon start --foreground --headless networks: - claude-flow-network depends_on: redis: condition: service_healthy healthcheck: test: ["CMD", "node", "-e", "require('http').get('http://localhost:3000/health', (res) => process.exit(res.statusCode === 200 ? 0 : 1))"] interval: 30s timeout: 10s retries: 3 start_period: 30s # Queue Manager - Coordinates task distribution queue-manager: image: ghcr.io/ruvnet/claude-flow-headless:latest build: context: . dockerfile: Dockerfile.headless environment: - REDIS_URL=redis://redis:6379 - QUEUE_MODE=manager - MAX_WORKERS=${MAX_WORKERS:-10} - NODE_ENV=production volumes: - claude-flow-state:/root/.claude-flow - queue-logs:/var/log/queue-manager command: npx claude-flow@v3alpha queue manager --workers ${MAX_WORKERS:-10} networks: - claude-flow-network depends_on: redis: condition: service_healthy healthcheck: test: ["CMD", "node", "-e", "require('http').get('http://localhost:3001/health', (res) => process.exit(res.statusCode === 200 ? 0 : 1))"] interval: 30s timeout: 10s retries: 3 # Redis - Message queue and result storage redis: image: redis:7-alpine command: redis-server --appendonly yes --maxmemory 256mb --maxmemory-policy allkeys-lru volumes: - redis-data:/data networks: - claude-flow-network ports: - "6379:6379" healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 10s timeout: 5s retries: 5 # Metrics Dashboard (optional) - Prometheus metrics metrics: image: prom/prometheus:latest profiles: - monitoring volumes: - ./prometheus.yml:/etc/prometheus/prometheus.yml:ro - prometheus-data:/prometheus ports: - "9090:9090" networks: - claude-flow-network command: - '--config.file=/etc/prometheus/prometheus.yml' - '--storage.tsdb.path=/prometheus' - '--web.enable-lifecycle' # Grafana Dashboard (optional) grafana: image: grafana/grafana:latest profiles: - monitoring environment: - GF_SECURITY_ADMIN_PASSWORD=${GRAFANA_PASSWORD:-admin} - GF_USERS_ALLOW_SIGN_UP=false volumes: - grafana-data:/var/lib/grafana - ./grafana/dashboards:/etc/grafana/provisioning/dashboards:ro - ./grafana/datasources:/etc/grafana/provisioning/datasources:ro ports: - "3000:3000" networks: - claude-flow-network depends_on: - metrics networks: claude-flow-network: driver: bridge ipam: config: - subnet: 172.28.0.0/16 volumes: workspace: driver: local driver_opts: type: none o: bind device: ${WORKSPACE_PATH:-.} claude-flow-state: worker-logs: queue-logs: redis-data: prometheus-data: grafana-data: