services: # MongoDB Database mongodb: image: docker.io/library/mongo:7-jammy container_name: datacenter-docs-mongodb hostname: mongodb restart: always ports: - "${MONGODB_PORT}:27017" env_file: - ../../.env environment: MONGO_INITDB_ROOT_USERNAME: ${MONGO_ROOT_USER} MONGO_INITDB_ROOT_PASSWORD: ${MONGO_ROOT_PASSWORD} MONGO_INITDB_DATABASE: ${MONGODB_DATABASE} volumes: - mongodb-data:/data/db - mongodb-config:/data/configdb networks: - datacenter-network healthcheck: test: ["CMD", "mongosh", "--eval", "db.adminCommand('ping')"] interval: 10s timeout: 5s retries: 5 # Redis Cache & Message Broker redis: image: docker.io/library/redis:7-alpine container_name: datacenter-docs-redis hostname: redis restart: always ports: - "${REDIS_PORT}:6379" env_file: - ../../.env command: redis-server --appendonly yes volumes: - redis-data:/data networks: - datacenter-network healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 10s timeout: 5s retries: 5 # FastAPI API Service api: build: context: ../.. dockerfile: deploy/docker/Dockerfile.api container_name: datacenter-docs-api hostname: api restart: always ports: - "${API_PORT}:8000" env_file: - ../../.env volumes: - ../../src:/app/src - ../../config:/app/config - api-logs:/app/logs - worker-output:/app/output # Shared with worker for documentation files - /var/run/docker.sock:/var/run/docker.sock:ro # For accessing worker logs depends_on: mongodb: condition: service_healthy redis: condition: service_healthy networks: - datacenter-network # Chat Service chat: build: context: ../.. dockerfile: deploy/docker/Dockerfile.chat container_name: datacenter-docs-chat hostname: chat restart: always ports: - "${CHAT_PORT}:8001" env_file: - ../../.env volumes: - ../../src:/app/src:z - ../../config:/app/config:z - worker-output:/app/output # Shared documentation files with worker - ../../scripts:/app/scripts:z # Indexing scripts - chat-logs:/app/logs - chat-data:/app/data # Vector store persistence depends_on: mongodb: condition: service_healthy redis: condition: service_healthy networks: - datacenter-network # Celery Worker worker: build: context: ../.. dockerfile: deploy/docker/Dockerfile.worker container_name: datacenter-docs-worker hostname: worker restart: always env_file: - ../../.env volumes: - ../../src:/app/src - ../../config:/app/config - worker-logs:/app/logs - worker-output:/app/output - chat-data:/app/data # Shared ChromaDB vector store with chat depends_on: mongodb: condition: service_healthy redis: condition: service_healthy networks: - datacenter-network healthcheck: test: ["CMD-SHELL", "celery -A datacenter_docs.workers.celery_app inspect ping -d celery@worker || exit 1"] interval: 30s timeout: 10s retries: 3 start_period: 40s # Flower - Celery Monitoring flower: image: docker.io/mher/flower:2.0 container_name: datacenter-docs-flower hostname: flower restart: always ports: - "${FLOWER_PORT}:5555" env_file: - ../../.env depends_on: redis: condition: service_healthy worker: condition: service_healthy networks: - datacenter-network # Frontend frontend: build: context: ../.. dockerfile: deploy/docker/Dockerfile.frontend container_name: datacenter-docs-frontend hostname: frontend restart: always ports: - "${FRONTEND_PORT}:80" env_file: - ../../.env depends_on: - api - chat networks: - datacenter-network volumes: mongodb-data: name: datacenter-docs-mongodb-data mongodb-config: name: datacenter-docs-mongodb-config redis-data: name: datacenter-docs-redis-data api-logs: name: datacenter-docs-api-logs chat-logs: name: datacenter-docs-chat-logs chat-data: name: datacenter-docs-chat-data worker-logs: name: datacenter-docs-worker-logs worker-output: name: datacenter-docs-worker-output networks: datacenter-network: name: datacenter-docs-network driver: bridge