version: '3.8'
services:
# Unified Frontend and Nginx Gateway
ai-frontend:
build: ./frontend
container_name: ai_unified_frontend
restart: always
ports:
- "8002:80"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf:ro
deploy:
resources:
limits:
cpus: '0.50'
memory: 512M
depends_on:
- ai-hub
# AI Hub Backend Service
ai-hub:
build: ./ai-hub
container_name: ai_hub_service
restart: always
ports:
- "50051:50051"
environment:
- PATH_PREFIX=/api/v1
- HUB_API_URL=http://localhost:8000
- HUB_PUBLIC_URL=http://localhost:8002
- HUB_GRPC_ENDPOINT=localhost:50051
- SUPER_ADMINS=${SUPER_ADMINS:-admin@example.com}
- SECRET_KEY=${SECRET_KEY:-default-insecure-key}
- DEBUG_GRPC=true
volumes:
- ai_hub_data:/app/data:rw
- ./config.yaml:/app/config.yaml:rw
- ./agent-node:/app/agent-node-source:ro
- ./skills:/app/skills:ro
- browser_shm:/dev/shm:rw
deploy:
resources:
limits:
cpus: '1.0'
memory: 1G
# Default Local Sandbox Node (Day 0 Experience)
sandbox-node:
build: ./agent-node
container_name: cortex_sandbox_node
restart: always
environment:
- AGENT_NODE_ID=sandbox-node
- AGENT_NODE_DESC=Default Sandbox Node
- GRPC_ENDPOINT=ai-hub:50051
- AGENT_AUTH_TOKEN=sandbox-token-1234
- AGENT_SECRET_KEY=${SECRET_KEY:-default-insecure-key}
- AGENT_TLS_ENABLED=false
volumes:
- ./agent-node:/app/agent-node-source:ro
- sandbox_sync:/app/sync
deploy:
resources:
limits:
cpus: '0.5'
memory: 512M
depends_on:
- ai-hub
# Dedicated Browser Service (M6 Refactor)
browser-service:
build: ./browser-service
container_name: cortex_browser_service
restart: always
ports:
- "50052:50052"
environment:
- SHM_PATH=/dev/shm/cortex_browser
volumes:
- ./browser-service:/app
- browser_shm:/dev/shm:rw
working_dir: /app
command: python3 main.py
deploy:
resources:
limits:
cpus: '2.0'
memory: 2G
# Generic named volume using local driver
volumes:
ai_hub_data:
driver: local
sandbox_sync:
driver: local
browser_shm:
driver: local
driver_opts:
type: tmpfs
device: tmpfs
o: "size=1g,uid=1000"