services: mongo: image: mongo:7 container_name: QQLore-mongo restart: unless-stopped ports: - "27017:27017" volumes: - ./docker/volumes/mongo:/data/db # Optional: Ollama for local embeddings/LLM (CPU by default). # Enable with: docker compose --profile ollama up -d ollama: profiles: ["ollama"] image: ollama/ollama:latest container_name: QQLore-ollama restart: unless-stopped ports: - "11434:11434" volumes: - ./docker/volumes/ollama:/root/.ollama ai-model: build: context: . dockerfile: docker/backend.Dockerfile container_name: QQLore-ai-model restart: unless-stopped depends_on: - mongo environment: - NODE_ENV=production - QQLore_CONFIG_PATH=/config/QQLore_config.json - QQLore_MONGODB_URL=mongodb://mongo:27017/QQLore extra_hosts: - "host.docker.internal:host-gateway" volumes: - ./docker/config:/config:ro - ./docker/data:/app/data - ./docker/logs:/app/logs command: ["node", "applications/ai-model/dist/index.js"] ports: - "7979:7979" preprocessing: build: context: . dockerfile: docker/backend.Dockerfile container_name: QQLore-preprocessing restart: unless-stopped depends_on: - mongo environment: - NODE_ENV=production - QQLore_CONFIG_PATH=/config/QQLore_config.json - QQLore_MONGODB_URL=mongodb://mongo:27017/QQLore extra_hosts: - "host.docker.internal:host-gateway" volumes: - ./docker/config:/config:ro - ./docker/data:/app/data - ./docker/logs:/app/logs command: ["node", "applications/preprocessing/dist/index.js"] orchestrator: build: context: . dockerfile: docker/backend.Dockerfile container_name: QQLore-orchestrator restart: unless-stopped depends_on: - mongo - ai-model - preprocessing environment: - NODE_ENV=production - QQLore_CONFIG_PATH=/config/QQLore_config.json - QQLore_MONGODB_URL=mongodb://mongo:27017/QQLore extra_hosts: - "host.docker.internal:host-gateway" volumes: - ./docker/config:/config:ro - ./docker/data:/app/data - ./docker/logs:/app/logs command: ["node", "applications/orchestrator/dist/index.js"] webui-backend: build: context: . dockerfile: docker/backend.Dockerfile container_name: QQLore-webui-backend restart: unless-stopped depends_on: - mongo - ai-model environment: - NODE_ENV=production - QQLore_CONFIG_PATH=/config/QQLore_config.json - QQLore_MONGODB_URL=mongodb://mongo:27017/QQLore - QQLore_AI_RPC_BASE_URL=http://ai-model:7979 extra_hosts: - "host.docker.internal:host-gateway" volumes: - ./docker/config:/config:ro - ./docker/data:/app/data - ./docker/logs:/app/logs command: ["node", "applications/webui-backend/dist/index.js"] ports: - "3002:3002" webui-frontend: build: context: . dockerfile: docker/frontend.Dockerfile container_name: QQLore-webui-frontend restart: unless-stopped depends_on: - webui-backend ports: - "8080:80" # data-provider cannot be containerized because it needs access to the host's local # QQ NT database files + a platform-specific VFS plugin (DLL/dylib). # Supported on host: Windows x86_64, macOS Apple Silicon. # This is a *placeholder* service to make the architecture explicit. data-provider: profiles: ["host-only"] image: alpine:3.20 container_name: QQLore-data-provider-placeholder command: - sh - -c - | echo "[QQLore] data-provider is host-only (needs local QQNT DB + VFS plugin)."; echo "Run it on your host: pnpm --filter data-provider dev"; echo "(and set QQLore_MONGODB_URL=mongodb://localhost:27017/QQLore)"; sleep 3600