version: '3.8' services: # MongoDB database mongodb: image: mongo:7.0 environment: MONGO_INITDB_ROOT_USERNAME: ${MONGO_ROOT_USER:-admin} MONGO_INITDB_ROOT_PASSWORD: ${MONGO_ROOT_PASSWORD} MONGO_INITDB_DATABASE: datacenter_docs volumes: - mongodb_data:/data/db - mongodb_config:/data/configdb networks: - backend healthcheck: test: ["CMD", "mongosh", "--eval", "db.adminCommand('ping')"] interval: 10s timeout: 5s retries: 5 command: ["--auth"] # Redis cache redis: image: redis:7-alpine command: redis-server --requirepass ${REDIS_PASSWORD} volumes: - redis_data:/data networks: - backend healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 10s timeout: 3s retries: 5 # API Service api: build: context: . dockerfile: deploy/docker/Dockerfile.api ports: - "8000:8000" environment: MONGODB_URL: mongodb://${MONGO_ROOT_USER:-admin}:${MONGO_ROOT_PASSWORD}@mongodb:27017 MONGODB_DATABASE: datacenter_docs REDIS_URL: redis://:${REDIS_PASSWORD}@redis:6379/0 MCP_SERVER_URL: ${MCP_SERVER_URL} MCP_API_KEY: ${MCP_API_KEY} ANTHROPIC_API_KEY: ${ANTHROPIC_API_KEY} CORS_ORIGINS: ${CORS_ORIGINS:-*} volumes: - ./output:/app/output - ./data:/app/data - ./logs:/app/logs networks: - frontend - backend depends_on: mongodb: condition: service_healthy redis: condition: service_healthy restart: unless-stopped # Chat Service chat: build: context: . dockerfile: deploy/docker/Dockerfile.chat ports: - "8001:8001" environment: MONGODB_URL: mongodb://${MONGO_ROOT_USER:-admin}:${MONGO_ROOT_PASSWORD}@mongodb:27017 MONGODB_DATABASE: datacenter_docs REDIS_URL: redis://:${REDIS_PASSWORD}@redis:6379/0 MCP_SERVER_URL: ${MCP_SERVER_URL} MCP_API_KEY: ${MCP_API_KEY} ANTHROPIC_API_KEY: ${ANTHROPIC_API_KEY} volumes: - ./output:/app/output - ./data:/app/data - ./logs:/app/logs networks: - frontend - backend depends_on: mongodb: condition: service_healthy redis: condition: service_healthy restart: unless-stopped # Celery Worker worker: build: context: . dockerfile: deploy/docker/Dockerfile.worker environment: MONGODB_URL: mongodb://${MONGO_ROOT_USER:-admin}:${MONGO_ROOT_PASSWORD}@mongodb:27017 MONGODB_DATABASE: datacenter_docs REDIS_URL: redis://:${REDIS_PASSWORD}@redis:6379/0 MCP_SERVER_URL: ${MCP_SERVER_URL} MCP_API_KEY: ${MCP_API_KEY} ANTHROPIC_API_KEY: ${ANTHROPIC_API_KEY} volumes: - ./output:/app/output - ./data:/app/data - ./logs:/app/logs networks: - backend depends_on: mongodb: condition: service_healthy redis: condition: service_healthy restart: unless-stopped deploy: replicas: 2 # Flower - Celery monitoring flower: image: mher/flower:2.0 command: celery --broker=redis://:${REDIS_PASSWORD}@redis:6379/0 flower --port=5555 ports: - "5555:5555" environment: CELERY_BROKER_URL: redis://:${REDIS_PASSWORD}@redis:6379/0 networks: - frontend - backend depends_on: - redis restart: unless-stopped # Frontend frontend: build: context: . dockerfile: deploy/docker/Dockerfile.frontend ports: - "80:80" networks: - frontend depends_on: - api - chat restart: unless-stopped volumes: mongodb_config: mongodb_data: redis_data: networks: frontend: backend: