Prepare for v2 development: Add MCP integration and future development planning
- Add FUTURE_DEVELOPMENT.md with comprehensive v2 protocol specification - Add MCP integration design and implementation foundation - Add infrastructure and deployment configurations - Update system architecture for v2 evolution 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
402
infrastructure/docker-compose.swarm.yml
Normal file
402
infrastructure/docker-compose.swarm.yml
Normal file
@@ -0,0 +1,402 @@
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
# BZZZ v2 Main Agent
|
||||
bzzz-agent:
|
||||
image: registry.home.deepblack.cloud/bzzz:v2.0.0
|
||||
networks:
|
||||
- tengig
|
||||
- bzzz-internal
|
||||
ports:
|
||||
- "9000-9100:9000-9100"
|
||||
volumes:
|
||||
- /rust/bzzz-v2/data:/app/data
|
||||
- /rust/bzzz-v2/config:/app/config:ro
|
||||
environment:
|
||||
- BZZZ_VERSION=2.0.0
|
||||
- BZZZ_PROTOCOL=bzzz://
|
||||
- DHT_BOOTSTRAP_NODES=walnut:9101,ironwood:9102,acacia:9103
|
||||
- CONTENT_STORE_PATH=/app/data/blobs
|
||||
- POSTGRES_HOST=postgres
|
||||
- REDIS_HOST=redis
|
||||
- LOG_LEVEL=info
|
||||
secrets:
|
||||
- postgres_password
|
||||
- openai_api_key
|
||||
configs:
|
||||
- source: bzzz_config
|
||||
target: /app/config/config.yaml
|
||||
deploy:
|
||||
replicas: 3
|
||||
placement:
|
||||
max_replicas_per_node: 1
|
||||
constraints:
|
||||
- node.labels.bzzz.role == agent
|
||||
resources:
|
||||
limits:
|
||||
memory: 4G
|
||||
cpus: '2.0'
|
||||
reservations:
|
||||
memory: 2G
|
||||
cpus: '1.0'
|
||||
restart_policy:
|
||||
condition: on-failure
|
||||
delay: 10s
|
||||
max_attempts: 3
|
||||
update_config:
|
||||
parallelism: 1
|
||||
delay: 30s
|
||||
failure_action: rollback
|
||||
order: stop-first
|
||||
labels:
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.routers.bzzz-agent.rule=Host(`bzzz.deepblack.cloud`)"
|
||||
- "traefik.http.services.bzzz-agent.loadbalancer.server.port=9000"
|
||||
- "traefik.http.routers.bzzz-agent.tls=true"
|
||||
- "traefik.http.routers.bzzz-agent.tls.certresolver=letsencrypt"
|
||||
|
||||
# MCP Server for external tool integration
|
||||
mcp-server:
|
||||
image: registry.home.deepblack.cloud/bzzz-mcp:v2.0.0
|
||||
networks:
|
||||
- tengig
|
||||
- bzzz-internal
|
||||
ports:
|
||||
- "3001:3001"
|
||||
environment:
|
||||
- MCP_VERSION=1.0.0
|
||||
- BZZZ_ENDPOINT=http://bzzz-agent:9000
|
||||
- MAX_CONNECTIONS=1000
|
||||
- TIMEOUT_SECONDS=30
|
||||
configs:
|
||||
- source: mcp_config
|
||||
target: /app/config/mcp.yaml
|
||||
deploy:
|
||||
replicas: 3
|
||||
placement:
|
||||
max_replicas_per_node: 1
|
||||
resources:
|
||||
limits:
|
||||
memory: 2G
|
||||
cpus: '1.0'
|
||||
reservations:
|
||||
memory: 512M
|
||||
cpus: '0.5'
|
||||
restart_policy:
|
||||
condition: on-failure
|
||||
delay: 5s
|
||||
labels:
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.routers.mcp-server.rule=Host(`mcp.deepblack.cloud`)"
|
||||
- "traefik.http.services.mcp-server.loadbalancer.server.port=3001"
|
||||
- "traefik.http.routers.mcp-server.tls=true"
|
||||
|
||||
# OpenAI Proxy with rate limiting and cost tracking
|
||||
openai-proxy:
|
||||
image: registry.home.deepblack.cloud/bzzz-openai-proxy:v2.0.0
|
||||
networks:
|
||||
- tengig
|
||||
- bzzz-internal
|
||||
ports:
|
||||
- "3002:3002"
|
||||
environment:
|
||||
- RATE_LIMIT_RPM=1000
|
||||
- RATE_LIMIT_TPM=100000
|
||||
- COST_TRACKING_ENABLED=true
|
||||
- REDIS_HOST=redis
|
||||
- POSTGRES_HOST=postgres
|
||||
- LOG_REQUESTS=true
|
||||
secrets:
|
||||
- openai_api_key
|
||||
- postgres_password
|
||||
configs:
|
||||
- source: proxy_config
|
||||
target: /app/config/proxy.yaml
|
||||
deploy:
|
||||
replicas: 2
|
||||
placement:
|
||||
max_replicas_per_node: 1
|
||||
resources:
|
||||
limits:
|
||||
memory: 2G
|
||||
cpus: '1.0'
|
||||
reservations:
|
||||
memory: 1G
|
||||
cpus: '0.5'
|
||||
restart_policy:
|
||||
condition: on-failure
|
||||
delay: 10s
|
||||
labels:
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.routers.openai-proxy.rule=Host(`openai.deepblack.cloud`)"
|
||||
- "traefik.http.services.openai-proxy.loadbalancer.server.port=3002"
|
||||
- "traefik.http.routers.openai-proxy.tls=true"
|
||||
|
||||
# Content Resolver for bzzz:// address resolution
|
||||
content-resolver:
|
||||
image: registry.home.deepblack.cloud/bzzz-resolver:v2.0.0
|
||||
networks:
|
||||
- bzzz-internal
|
||||
- tengig
|
||||
ports:
|
||||
- "3003:3003"
|
||||
volumes:
|
||||
- /rust/bzzz-v2/data/blobs:/app/blobs:ro
|
||||
environment:
|
||||
- BLAKE3_INDEX_PATH=/app/blobs/index
|
||||
- DHT_BOOTSTRAP_NODES=walnut:9101,ironwood:9102,acacia:9103
|
||||
- CACHE_SIZE_MB=512
|
||||
deploy:
|
||||
replicas: 3
|
||||
placement:
|
||||
max_replicas_per_node: 1
|
||||
resources:
|
||||
limits:
|
||||
memory: 1G
|
||||
cpus: '1.0'
|
||||
reservations:
|
||||
memory: 512M
|
||||
cpus: '0.5'
|
||||
restart_policy:
|
||||
condition: on-failure
|
||||
labels:
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.routers.content-resolver.rule=Host(`resolve.deepblack.cloud`)"
|
||||
|
||||
# DHT Bootstrap Nodes (one per physical node)
|
||||
dht-bootstrap-walnut:
|
||||
image: registry.home.deepblack.cloud/bzzz-dht:v2.0.0
|
||||
networks:
|
||||
- bzzz-internal
|
||||
ports:
|
||||
- "9101:9101"
|
||||
volumes:
|
||||
- /rust/bzzz-v2/data/dht/walnut:/app/data
|
||||
environment:
|
||||
- DHT_PORT=9101
|
||||
- NODE_NAME=walnut
|
||||
- PEER_STORE_PATH=/app/data/peers
|
||||
deploy:
|
||||
replicas: 1
|
||||
placement:
|
||||
constraints:
|
||||
- node.hostname == walnut
|
||||
resources:
|
||||
limits:
|
||||
memory: 1G
|
||||
cpus: '1.0'
|
||||
restart_policy:
|
||||
condition: on-failure
|
||||
|
||||
dht-bootstrap-ironwood:
|
||||
image: registry.home.deepblack.cloud/bzzz-dht:v2.0.0
|
||||
networks:
|
||||
- bzzz-internal
|
||||
ports:
|
||||
- "9102:9102"
|
||||
volumes:
|
||||
- /rust/bzzz-v2/data/dht/ironwood:/app/data
|
||||
environment:
|
||||
- DHT_PORT=9102
|
||||
- NODE_NAME=ironwood
|
||||
- PEER_STORE_PATH=/app/data/peers
|
||||
deploy:
|
||||
replicas: 1
|
||||
placement:
|
||||
constraints:
|
||||
- node.hostname == ironwood
|
||||
resources:
|
||||
limits:
|
||||
memory: 1G
|
||||
cpus: '1.0'
|
||||
restart_policy:
|
||||
condition: on-failure
|
||||
|
||||
dht-bootstrap-acacia:
|
||||
image: registry.home.deepblack.cloud/bzzz-dht:v2.0.0
|
||||
networks:
|
||||
- bzzz-internal
|
||||
ports:
|
||||
- "9103:9103"
|
||||
volumes:
|
||||
- /rust/bzzz-v2/data/dht/acacia:/app/data
|
||||
environment:
|
||||
- DHT_PORT=9103
|
||||
- NODE_NAME=acacia
|
||||
- PEER_STORE_PATH=/app/data/peers
|
||||
deploy:
|
||||
replicas: 1
|
||||
placement:
|
||||
constraints:
|
||||
- node.hostname == acacia
|
||||
resources:
|
||||
limits:
|
||||
memory: 1G
|
||||
cpus: '1.0'
|
||||
restart_policy:
|
||||
condition: on-failure
|
||||
|
||||
# PostgreSQL for metadata and conversation threading
|
||||
postgres:
|
||||
image: postgres:15-alpine
|
||||
networks:
|
||||
- bzzz-internal
|
||||
environment:
|
||||
- POSTGRES_DB=bzzz_v2
|
||||
- POSTGRES_USER=bzzz
|
||||
- POSTGRES_PASSWORD_FILE=/run/secrets/postgres_password
|
||||
- POSTGRES_INITDB_ARGS=--auth-host=scram-sha-256
|
||||
volumes:
|
||||
- /rust/bzzz-v2/data/postgres:/var/lib/postgresql/data
|
||||
- /rust/bzzz-v2/config/postgres/init:/docker-entrypoint-initdb.d:ro
|
||||
secrets:
|
||||
- postgres_password
|
||||
deploy:
|
||||
replicas: 1
|
||||
placement:
|
||||
constraints:
|
||||
- node.hostname == walnut
|
||||
resources:
|
||||
limits:
|
||||
memory: 4G
|
||||
cpus: '2.0'
|
||||
reservations:
|
||||
memory: 2G
|
||||
cpus: '1.0'
|
||||
restart_policy:
|
||||
condition: on-failure
|
||||
delay: 10s
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "pg_isready -U bzzz -d bzzz_v2"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
|
||||
# Redis for caching and DHT coordination
|
||||
redis:
|
||||
image: redis:7-alpine
|
||||
networks:
|
||||
- bzzz-internal
|
||||
volumes:
|
||||
- /rust/bzzz-v2/data/redis:/data
|
||||
configs:
|
||||
- source: redis_config
|
||||
target: /usr/local/etc/redis/redis.conf
|
||||
command: redis-server /usr/local/etc/redis/redis.conf
|
||||
deploy:
|
||||
replicas: 1
|
||||
placement:
|
||||
constraints:
|
||||
- node.hostname == ironwood
|
||||
resources:
|
||||
limits:
|
||||
memory: 2G
|
||||
cpus: '1.0'
|
||||
reservations:
|
||||
memory: 512M
|
||||
cpus: '0.5'
|
||||
restart_policy:
|
||||
condition: on-failure
|
||||
healthcheck:
|
||||
test: ["CMD", "redis-cli", "ping"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
|
||||
# Conversation Thread Manager
|
||||
conversation-manager:
|
||||
image: registry.home.deepblack.cloud/bzzz-conversation:v2.0.0
|
||||
networks:
|
||||
- bzzz-internal
|
||||
environment:
|
||||
- POSTGRES_HOST=postgres
|
||||
- REDIS_HOST=redis
|
||||
- LAMPORT_CLOCK_PRECISION=microsecond
|
||||
volumes:
|
||||
- /rust/bzzz-v2/data/conversations:/app/conversations
|
||||
secrets:
|
||||
- postgres_password
|
||||
deploy:
|
||||
replicas: 2
|
||||
placement:
|
||||
max_replicas_per_node: 1
|
||||
resources:
|
||||
limits:
|
||||
memory: 2G
|
||||
cpus: '1.0'
|
||||
restart_policy:
|
||||
condition: on-failure
|
||||
|
||||
# Content Store Manager
|
||||
content-store:
|
||||
image: registry.home.deepblack.cloud/bzzz-content-store:v2.0.0
|
||||
networks:
|
||||
- bzzz-internal
|
||||
volumes:
|
||||
- /rust/bzzz-v2/data/blobs:/app/blobs
|
||||
environment:
|
||||
- BLAKE3_SHARD_DEPTH=2
|
||||
- REPLICATION_FACTOR=3
|
||||
- GARBAGE_COLLECTION_INTERVAL=24h
|
||||
deploy:
|
||||
replicas: 3
|
||||
placement:
|
||||
max_replicas_per_node: 1
|
||||
resources:
|
||||
limits:
|
||||
memory: 8G
|
||||
cpus: '2.0'
|
||||
reservations:
|
||||
memory: 4G
|
||||
cpus: '1.0'
|
||||
restart_policy:
|
||||
condition: on-failure
|
||||
|
||||
networks:
|
||||
tengig:
|
||||
external: true
|
||||
bzzz-internal:
|
||||
driver: overlay
|
||||
internal: true
|
||||
attachable: false
|
||||
ipam:
|
||||
driver: default
|
||||
config:
|
||||
- subnet: 10.200.0.0/16
|
||||
|
||||
volumes:
|
||||
postgres_data:
|
||||
driver: local
|
||||
driver_opts:
|
||||
type: nfs
|
||||
o: addr=192.168.1.27,rw,sync
|
||||
device: ":/rust/bzzz-v2/data/postgres"
|
||||
|
||||
redis_data:
|
||||
driver: local
|
||||
driver_opts:
|
||||
type: nfs
|
||||
o: addr=192.168.1.27,rw,sync
|
||||
device: ":/rust/bzzz-v2/data/redis"
|
||||
|
||||
secrets:
|
||||
openai_api_key:
|
||||
external: true
|
||||
name: bzzz_openai_api_key
|
||||
postgres_password:
|
||||
external: true
|
||||
name: bzzz_postgres_password
|
||||
|
||||
configs:
|
||||
bzzz_config:
|
||||
external: true
|
||||
name: bzzz_v2_config
|
||||
mcp_config:
|
||||
external: true
|
||||
name: bzzz_mcp_config
|
||||
proxy_config:
|
||||
external: true
|
||||
name: bzzz_proxy_config
|
||||
redis_config:
|
||||
external: true
|
||||
name: bzzz_redis_config
|
||||
Reference in New Issue
Block a user