# Docker Compose 会自动从 .env 文件读取环境变量 # 所有 ${VAR} 形式的变量都会从 .env 文件中获取 # # 注意:PostgreSQL 和 Redis 使用 Azure 云服务,不在本地部署 # DATABASE_URL 和 REDIS_URL 通过 .env 文件配置 services: # NATS消息队列 nats: image: nats:2.10-alpine container_name: taiji-nats ports: - "4222:4222" # Client connections - "6222:6222" # Routing - "8222:8222" # Monitoring command: ["-js", "-m", "8222"] # Enable JetStream and monitoring volumes: - nats_data:/data networks: - taiji-network restart: unless-stopped # LiteLLM网关服务 litellm-gateway: build: context: ./services/model-gateway dockerfile: Dockerfile container_name: taiji-litellm-gateway ports: - "4000:4000" environment: - LITELLM_MASTER_KEY=${LITELLM_MASTER_KEY} - DATABASE_URL=${DATABASE_URL} - REDIS_URL=${REDIS_URL} # OpenRouter 配置 - OPENROUTER_API_KEY=${OPENROUTER_API_KEY} - OPENROUTER_BASE_URL=${OPENROUTER_BASE_URL} volumes: - ./services/model-gateway/config:/app/config - ./logs:/app/logs networks: - taiji-network restart: unless-stopped # 数据接入服务 (Python) data-ingestion: build: context: ./services/data-ingestion dockerfile: Dockerfile container_name: taiji-data-ingestion ports: - "8001:8000" environment: - DATABASE_URL=${DATABASE_URL} - ASYNC_DATABASE_URL=${ASYNC_DATABASE_URL} - REDIS_URL=${REDIS_URL} - NATS_URL=${NATS_URL} # RapidAPI 配置 - RAPIDAPI_KEY=${RAPIDAPI_KEY} - RAPIDAPI_HOST=${RAPIDAPI_HOST} # OpenRouter 配置(用于APILLAMA) - OPENROUTER_API_KEY=${OPENROUTER_API_KEY} - OPENROUTER_BASE_URL=${OPENROUTER_BASE_URL} volumes: - ./services/data-ingestion:/app - ./logs:/app/logs depends_on: - nats networks: - taiji-network restart: unless-stopped # MCP服务器 (Python) mcp-server: build: context: ./services/mcp-server dockerfile: Dockerfile container_name: taiji-mcp-server ports: - "8002:8000" environment: - DATABASE_URL=${DATABASE_URL} - ASYNC_DATABASE_URL=${ASYNC_DATABASE_URL} - REDIS_URL=${REDIS_URL} - NATS_URL=nats://nats:4222 - LITELLM_URL=${LITELLM_URL:-https://litellm.graystone-fb459c5d.southeastasia.azurecontainerapps.io} - LITELLM_MASTER_KEY=${LITELLM_MASTER_KEY:-sk-1f06b8f0d2e34c9b8a9f3d75a1c4e9b7-7e3a2c6bd9f441d8} - AGENT_MANAGER_URL=${AGENT_MANAGER_URL:-http://host.docker.internal:8000} extra_hosts: - "host.docker.internal:host-gateway" volumes: - ./services/mcp-server:/app - ./logs:/app/logs depends_on: - nats - litellm-gateway networks: - taiji-network restart: unless-stopped # Agent注册中心 (Go) - 暂时禁用 # agent-registry: # build: # context: ./services/agent-registry # dockerfile: Dockerfile # container_name: taiji-agent-registry # ports: # - "8003:8080" # environment: # - DATABASE_URL=${DATABASE_URL} # - REDIS_URL=${REDIS_URL} # - NATS_URL=nats://nats:4222 # volumes: # - ./services/agent-registry:/app # - ./logs:/app/logs # depends_on: # - nats # networks: # - taiji-network # restart: unless-stopped # EU计费引擎 (Go) - 暂时禁用 # billing-engine: # build: # context: ./services/billing-engine # dockerfile: Dockerfile # container_name: taiji-billing-engine # ports: # - "8004:8080" # environment: # - DATABASE_URL=${DATABASE_URL} # - REDIS_URL=${REDIS_URL} # - NATS_URL=nats://nats:4222 # volumes: # - ./services/billing-engine:/app # - ./logs:/app/logs # depends_on: # - nats # networks: # - taiji-network # restart: unless-stopped # API网关 (Nginx) api-gateway: image: nginx:alpine container_name: taiji-api-gateway ports: - "80:80" - "443:443" volumes: - ./config/nginx.conf:/etc/nginx/nginx.conf - ./config/ssl:/etc/nginx/ssl depends_on: - data-ingestion - mcp-server networks: - taiji-network restart: unless-stopped # 监控服务 - Prometheus prometheus: image: prom/prometheus:latest container_name: taiji-prometheus ports: - "9090:9090" volumes: - ./config/prometheus.yml:/etc/prometheus/prometheus.yml - prometheus_data:/prometheus command: - '--config.file=/etc/prometheus/prometheus.yml' - '--storage.tsdb.path=/prometheus' - '--web.console.libraries=/etc/prometheus/console_libraries' - '--web.console.templates=/etc/prometheus/consoles' - '--web.enable-lifecycle' networks: - taiji-network restart: unless-stopped # 监控服务 - Grafana grafana: image: grafana/grafana:latest container_name: taiji-grafana ports: - "3000:3000" environment: - GF_SECURITY_ADMIN_PASSWORD=admin volumes: - grafana_data:/var/lib/grafana - ./config/grafana/dashboards:/etc/grafana/provisioning/dashboards - ./config/grafana/datasources:/etc/grafana/provisioning/datasources depends_on: - prometheus networks: - taiji-network restart: unless-stopped # 开发环境容器 (可选) dev-container: build: context: ./dev-environment dockerfile: Dockerfile container_name: taiji-dev volumes: - .:/workspace - /var/run/docker.sock:/var/run/docker.sock working_dir: /workspace tty: true stdin_open: true networks: - taiji-network profiles: - dev networks: taiji-network: driver: bridge ipam: config: - subnet: 172.20.0.0/16 volumes: nats_data: prometheus_data: grafana_data: