services: docling-serve: image: quay.io/docling-project/docling-serve:latest container_name: docling-serve ports: - "5001:5001" environment: - DOCLING_SERVE_ENABLE_UI=1 restart: unless-stopped healthcheck: test: ["CMD", "curl", "-f", "http://localhost:5001/health"] interval: 30s timeout: 10s retries: 3 start_period: 40s start_interval: 5s # LanceDB allows one writer + N readers per database URI; the ingester is # the writer, MCP runs read-only. haiku-ingester: build: context: ../.. dockerfile: docker/Dockerfile.slim image: haiku-rag-slim:local container_name: haiku-ingester command: [ "haiku-ingester", "--config", "/app/haiku.rag.yaml", "serve", ] ports: - "8765:8765" # ingester control plane (/health, /jobs, /sources, /dlq) volumes: - ./data:/data - ./docs:/docs # Documents directory ingested by the FS source - ./haiku.rag.yaml:/app/haiku.rag.yaml:ro environment: - OPENAI_API_KEY=${OPENAI_API_KEY} - ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY} - VOYAGE_API_KEY=${VOYAGE_API_KEY} - CO_API_KEY=${CO_API_KEY} depends_on: docling-serve: condition: service_healthy restart: unless-stopped haiku-rag: image: haiku-rag-slim:local container_name: haiku-rag command: [ "haiku-rag", "--config", "/app/haiku.rag.yaml", "--read-only", "mcp", "--port", "8001", ] ports: - "8001:8001" # MCP server (read-only against the same LanceDB) volumes: - ./data:/data # Shared with the ingester (read-only at this process) - ./haiku.rag.yaml:/app/haiku.rag.yaml:ro environment: - OPENAI_API_KEY=${OPENAI_API_KEY} - ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY} - VOYAGE_API_KEY=${VOYAGE_API_KEY} - CO_API_KEY=${CO_API_KEY} depends_on: - haiku-ingester restart: unless-stopped