Files
microdao-daarion/docker-compose.staging.yml
Apple ef3473db21 snapshot: NODE1 production state 2026-02-09
Complete snapshot of /opt/microdao-daarion/ from NODE1 (144.76.224.179).
This represents the actual running production code that has diverged
significantly from the previous main branch.

Key changes from old main:
- Gateway (http_api.py): expanded from ~40KB to 164KB with full agent support
- Router: new /v1/agents/{id}/infer endpoint with vision + DeepSeek routing
- Behavior Policy: SOWA v2.2 (3-level: FULL/ACK/SILENT)
- Agent Registry: config/agent_registry.yml as single source of truth
- 13 agents configured (was 3)
- Memory service integration
- CrewAI teams and roles

Excluded from snapshot: venv/, .env, data/, backups, .tgz archives

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-09 08:46:46 -08:00

430 lines
12 KiB
YAML

services:
router:
build:
context: ./services/router
dockerfile: Dockerfile
container_name: dagi-staging-router
environment:
- ROUTER_CONFIG_PATH=/app/router_config.yaml
- LOG_LEVEL=info
- NODE_ID=node-1-hetzner-gex44
- MEMORY_SERVICE_URL=http://memory-service:8000
- QDRANT_HOST=qdrant
- QDRANT_PORT=6333
- QDRANT_ENABLED=true
- NEO4J_BOLT_URL=bolt://neo4j:7687
- NEO4J_HTTP_URL=http://neo4j:7474
- NEO4J_USER=neo4j
- NEO4J_PASSWORD=DaarionNeo4j2026!
- DEEPSEEK_API_KEY=sk-0db94e8193ec4a6e9acd593ee8d898e7
- MISTRAL_API_KEY=40Gwjo8nVBx4i4vIkgszvXw9bOwDOu4G
- COHERE_API_KEY=nOdOXnuepLku2ipJWpe6acWgAsJCsDhMO0RnaEJB
- GROK_API_KEY=xai-69zEnDse8qRuQyZATs9jVKgfwdyvkHzgEVrTbV0OTAurZqsjHmvGepXG6H9GhVRYEC7E4NFl6iZeG0ww
- VISION_ENCODER_URL=http://vision-encoder:8001
- SWAPPER_SERVICE_URL=http://swapper-service:8890
- IMAGE_GEN_URL=http://swapper-service:8890/image/generate
- STT_SERVICE_URL=http://swapper-service:8890
- STT_SERVICE_UPLOAD_URL=http://swapper-service:8890/stt
- OCR_SERVICE_URL=http://swapper-service:8890
- WEB_SEARCH_SERVICE_URL=http://swapper-service:8890
- JWT_SECRET=${JWT_SECRET}
- SERVICE_AUD=microdao-internal
- SERVICE_ISS=microdao
- SERVICE_ID=router
- SERVICE_ROLE=router
- NATS_URL=nats://dagi-staging-nats:4222
volumes:
- ./services/router/router_config.yaml:/app/router_config.yaml:ro
- ./logs:/app/logs
networks:
- dagi-staging-network
restart: unless-stopped
healthcheck:
test:
- CMD-SHELL
- python -c "import urllib.request; urllib.request.urlopen('http://localhost:8000/health')"
interval: 30s
timeout: 10s
retries: 3
start_period: 10s
env_file:
- ./.env.staging
labels:
com.daarion.env: staging
swapper-service:
build:
context: ./services/swapper-service
dockerfile: Dockerfile
container_name: dagi-staging-swapper-service
environment:
- OLLAMA_BASE_URL=http://172.18.0.1:11434
- SWAPPER_CONFIG_PATH=/app/config/swapper_config.yaml
- SWAPPER_MODE=single-active
- MAX_CONCURRENT_MODELS=2
- MODEL_SWAP_TIMEOUT=300
- GPU_ENABLED=true
- NODE_ID=node-1-hetzner-gex44
- HF_HOME=/root/.cache/huggingface
- CUDA_VISIBLE_DEVICES=0
- CRAWL4AI_URL=http://crawl4ai:11235
- GROK_API_KEY=xai-69zEnDse8qRuQyZATs9jVKgfwdyvkHzgEVrTbV0OTAurZqsjHmvGepXG6H9GhVRYEC7E4NFl6iZeG0ww
- MISTRAL_API_KEY=40Gwjo8nVBx4i4vIkgszvXw9bOwDOu4G
volumes:
- ./services/swapper-service/config/swapper_config_node1.yaml:/app/config/swapper_config.yaml:ro
- ./logs:/app/logs
- swapper-hf-cache-staging:/root/.cache/huggingface
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: 1
capabilities:
- gpu
networks:
- dagi-staging-network
restart: unless-stopped
extra_hosts:
- host.docker.internal:172.18.0.1
healthcheck:
test:
- CMD-SHELL
- wget -qO- http://localhost:8890/health || exit 1
interval: 30s
timeout: 10s
retries: 3
start_period: 60s
env_file:
- ./.env.staging
labels:
com.daarion.env: staging
crawl4ai:
image: unclecode/crawl4ai:latest
container_name: dagi-staging-crawl4ai
environment:
- CRAWL4AI_API_TOKEN=${CRAWL4AI_API_TOKEN:-}
- MAX_CONCURRENT_TASKS=5
networks:
- dagi-staging-network
restart: unless-stopped
healthcheck:
test:
- CMD
- curl
- -f
- http://localhost:11235/health
interval: 30s
timeout: 10s
retries: 3
start_period: 30s
env_file:
- ./.env.staging
labels:
com.daarion.env: staging
gateway:
build:
context: ./gateway-bot
dockerfile: Dockerfile
container_name: dagi-staging-gateway
environment:
- ROUTER_URL=http://router:8000
- HELION_TELEGRAM_BOT_TOKEN=8112062582:AAGS-HwRLEI269lDutLtAJTFArsIq31YNhE
- HELION_NAME=Helion
- HELION_PROMPT_PATH=/app/gateway-bot/helion_prompt.txt
- GREENFOOD_TELEGRAM_BOT_TOKEN=7495165343:AAHz62qPdP2WAsVHpupPbkGAmpL94sEnNtw
- DRUID_TELEGRAM_BOT_TOKEN=8145618489:AAHquXktVRkcuU-kN4QxWf6yeJ5TDl_C7wg
- TELEGRAM_BOT_TOKEN=8323412397:AAFUhRiQpEbyoeX36FgvdIPJl1_8PdJsmkE
- GREENFOOD_NAME=GREENFOOD
- GREENFOOD_PROMPT_PATH=/app/gateway-bot/greenfood_prompt.txt
- NUTRA_TELEGRAM_BOT_TOKEN=8517315428:AAGTLcKxBAZDsMgx28agKTvl1SqJGi0utH4
- NUTRA_NAME=NUTRA
- NUTRA_PROMPT_PATH=/app/gateway-bot/nutra_prompt.txt
- DRUID_PROMPT_PATH=/app/gateway-bot/prompts/druid_prompt.txt
- MEMORY_SERVICE_URL=http://memory-service:8000
- SWAPPER_SERVICE_URL=http://swapper-service:8890
- IMAGE_GEN_URL=http://swapper-service:8890/image/generate
- STT_SERVICE_URL=http://swapper-service:8890
- STT_SERVICE_UPLOAD_URL=http://swapper-service:8890/stt
- OCR_SERVICE_URL=http://swapper-service:8890
- WEB_SEARCH_SERVICE_URL=http://swapper-service:8890
- JWT_SECRET=${JWT_SECRET}
- SERVICE_AUD=microdao-internal
- SERVICE_ISS=microdao
- SERVICE_ID=gateway
- SERVICE_ROLE=gateway
volumes:
- ./gateway-bot:/app/gateway-bot:ro
- ./logs:/app/logs
depends_on:
- router
- memory-service
networks:
- dagi-staging-network
restart: unless-stopped
healthcheck:
test:
- CMD-SHELL
- python -c "import urllib.request; urllib.request.urlopen('http://localhost:9300/health')"
interval: 30s
timeout: 10s
retries: 3
start_period: 10s
env_file:
- ./.env.staging
labels:
com.daarion.env: staging
memory-service:
build:
context: ./services/memory-service
dockerfile: Dockerfile
container_name: dagi-staging-memory-service
environment:
- MEMORY_POSTGRES_HOST=dagi-postgres
- MEMORY_POSTGRES_PORT=5432
- MEMORY_POSTGRES_USER=daarion
- MEMORY_POSTGRES_PASSWORD=DaarionDB2026!
- MEMORY_POSTGRES_DB=daarion_main
- MEMORY_QDRANT_HOST=dagi-qdrant-node1
- MEMORY_QDRANT_PORT=6333
- MEMORY_COHERE_API_KEY=nOdOXnuepLku2ipJWpe6acWgAsJCsDhMO0RnaEJB
- MEMORY_DEBUG=false
- JWT_SECRET=${JWT_SECRET}
- SERVICE_AUD=microdao-internal
- SERVICE_ISS=microdao
- SERVICE_ID=memory
- SERVICE_ROLE=memory
- NEO4J_BOLT_URL=bolt://dagi-neo4j-node1:7687
volumes:
- ./logs:/app/logs
depends_on:
- qdrant
networks:
- dagi-staging-network
restart: unless-stopped
healthcheck:
test:
- CMD-SHELL
- python -c "import urllib.request; urllib.request.urlopen('http://localhost:8000/health')"
interval: 30s
timeout: 10s
retries: 3
start_period: 10s
expose:
- '8000'
env_file:
- ./.env.staging
labels:
com.daarion.env: staging
qdrant:
image: qdrant/qdrant:v1.7.4
container_name: dagi-staging-qdrant
ulimits:
nofile:
soft: 65535
hard: 65535
volumes:
- qdrant-data-staging:/qdrant/storage
networks:
dagi-staging-network:
aliases:
- qdrant
- dagi-qdrant-node1
restart: unless-stopped
environment: []
env_file:
- ./.env.staging
labels:
com.daarion.env: staging
neo4j:
image: neo4j:5.15-community
container_name: dagi-staging-neo4j
environment:
- NEO4J_AUTH=neo4j/DaarionNeo4j2026!
- NEO4J_PLUGINS=["apoc"]
- NEO4J_dbms_memory_heap_initial__size=512m
- NEO4J_dbms_memory_heap_max__size=2G
volumes:
- neo4j-data-staging:/data
- neo4j-logs-staging:/logs
networks:
dagi-staging-network:
aliases:
- neo4j
- dagi-neo4j-node1
restart: unless-stopped
healthcheck:
test:
- CMD
- wget
- --no-verbose
- --tries=1
- --spider
- http://localhost:7474
interval: 30s
timeout: 10s
retries: 3
env_file:
- ./.env.staging
labels:
com.daarion.env: staging
redis:
image: redis:7-alpine
container_name: dagi-staging-redis
volumes:
- redis-data-staging:/data
networks:
dagi-staging-network:
aliases:
- redis
- dagi-redis-node1
restart: unless-stopped
healthcheck:
test:
- CMD
- redis-cli
- PING
interval: 30s
timeout: 5s
retries: 3
environment: []
env_file:
- ./.env.staging
labels:
com.daarion.env: staging
vision-encoder:
build:
context: ./services/vision-encoder
dockerfile: Dockerfile
container_name: dagi-staging-vision-encoder
environment:
- DEVICE=cpu
- MODEL_NAME=${VISION_MODEL_NAME:-ViT-L-14}
- MODEL_PRETRAINED=${VISION_MODEL_PRETRAINED:-openai}
- NORMALIZE_EMBEDDINGS=true
- QDRANT_HOST=qdrant
- QDRANT_PORT=6333
- QDRANT_ENABLED=true
volumes:
- ./logs:/app/logs
- vision-model-cache-staging:/root/.cache/clip
depends_on:
- qdrant
networks:
- dagi-staging-network
restart: unless-stopped
healthcheck:
test:
- CMD-SHELL
- python -c "import urllib.request; urllib.request.urlopen('http://localhost:8001/health')"
interval: 30s
timeout: 10s
retries: 3
start_period: 60s
env_file:
- ./.env.staging
labels:
com.daarion.env: staging
crewai-service:
build:
context: ./services/crewai-service
dockerfile: Dockerfile
container_name: dagi-staging-crewai-service
environment:
- ROUTER_URL=http://router:8000
- DEEPSEEK_API_KEY=${DEEPSEEK_API_KEY}
- MISTRAL_API_KEY=${MISTRAL_API_KEY}
- JWT_SECRET=${JWT_SECRET}
- SERVICE_AUD=microdao-internal
- SERVICE_ISS=microdao
- SERVICE_ID=worker
- SERVICE_ROLE=worker
networks:
- dagi-staging-network
depends_on:
- router
restart: unless-stopped
env_file:
- ./.env.staging
labels:
com.daarion.env: staging
crewai-worker:
build:
context: ./services/crewai-worker
dockerfile: Dockerfile
container_name: dagi-staging-crewai-worker
environment:
- ROUTER_URL=http://router:9102
- JWT_SECRET=${JWT_SECRET}
- SERVICE_AUD=microdao-internal
- SERVICE_ISS=microdao
- SERVICE_ID=worker
- SERVICE_ROLE=worker
- NATS_URL=nats://dagi-staging-nats:4222
networks:
- dagi-staging-network
depends_on:
- router
env_file:
- ./.env.staging
labels:
com.daarion.env: staging
dagi-postgres:
image: postgres:15-alpine
container_name: dagi-staging-postgres
environment:
POSTGRES_DB: daarion_main
POSTGRES_USER: daarion
POSTGRES_PASSWORD: DaarionDB2026!
volumes:
- postgres-data-staging:/var/lib/postgresql/data
networks:
dagi-staging-network:
aliases:
- dagi-postgres
- postgres
labels:
com.daarion.env: staging
env_file:
- ./.env.staging
nats:
image: nats:latest
container_name: dagi-staging-nats
command:
- -c
- /etc/nats/nats.conf
volumes:
- nats-data-staging:/data
- ./nats/nats.staging.conf:/etc/nats/nats.conf:ro
networks:
- dagi-staging-network
labels:
com.daarion.env: staging
env_file:
- ./.env.staging
control-plane:
image: control-plane:latest
container_name: dagi-staging-control-plane
environment:
JWT_SECRET: ${JWT_SECRET}
SERVICE_ID: control-plane
SERVICE_ROLE: controlplane
SERVICE_AUD: microdao-internal
SERVICE_ISS: microdao
networks:
- dagi-staging-network
labels:
com.daarion.env: staging
env_file:
- ./.env.staging
volumes:
qdrant-data-staging: null
neo4j-data-staging: null
neo4j-logs-staging: null
redis-data-staging: null
postgres-data-staging: null
nats-data-staging: null
vision-model-cache-staging: null
swapper-hf-cache-staging: null
networks:
dagi-staging-network: null