haiku.rag/docker
Yiorgis Gozadinos ce69a8c989
Remove the MCP write tools; the server opens read-only
add_document_from_file, add_document_from_url, add_document_from_text
and delete_document are gone. create_mcp_server and _covering lose
read_only; the client always opens with read_only=True, so the
--read-only flag before `mcp` is redundant and the docs, Dockerfiles and
compose example drop it.

Ingestion is `haiku-rag add`/`add-src`/`delete` and haiku-ingester. No
known consumer used the write tools; one stdio server per client window
made multi-writer the accidental default, and streamable HTTP has no auth.

The test_app stub drops a comment and __init__ that described run_mcp
constructing the client positionally; every path goes through _covering.

Refs #599
2026-09-04 12:59:48 +03:00
..
Dockerfile Remove the MCP write tools; the server opens read-only 2026-09-04 12:59:48 +03:00
Dockerfile.slim Remove the MCP write tools; the server opens read-only 2026-09-04 12:59:48 +03:00
README.md Remove the mxbai reranking provider 2026-07-14 11:09:55 +03:00

haiku.rag Docker Image

The full haiku.rag Docker image includes all features and extras (docling, voyageai, cross-encoder). You can build it locally using the provided Dockerfile.

Building the Image

Build the full image with all features:

docker build -f docker/Dockerfile -t haiku-rag .

This creates an image with:

  • All document processing capabilities (Docling)
  • VoyageAI embeddings
  • MixedBread AI reranking
  • Full feature set

Configuration

Create a configuration file haiku.rag.yaml:

# haiku.rag.yaml
environment: production

embeddings:
  model:
    provider: ollama
    name: nomic-embed-text
    vector_dim: 768

qa:
  model:
    provider: ollama
    name: qwen3

See Configuration docs for all available options.

Running

Mount your config file and data directory:

docker run -p 8001:8001 \
  -v /path/to/haiku.rag.yaml:/app/haiku.rag.yaml \
  -v /path/to/data:/data \
  haiku-rag

For continuous ingestion of a watched directory, run haiku-ingester in a separate container against the same data volume:

docker run \
  -v /path/to/haiku.rag.yaml:/app/haiku.rag.yaml \
  -v /path/to/data:/data \
  -v /path/to/docs:/docs \
  -p 8765:8765 \
  haiku-rag haiku-ingester --config /app/haiku.rag.yaml serve

Configure the watched directory in haiku.rag.yaml using the container path:

ingester:
  queue:
    path: /data/ingester.db   # persist queue in the data volume
  sources:
    - type: fs
      id: docs
      root: /docs             # container path, not host path
      delete_orphans: true

The MCP server running in the first container must be started with --read-only when an ingester is writing to the same database — LanceDB allows one writer and N readers per URI. See examples/docker/docker-compose.yml for a working two-service setup.

For API keys (OpenAI, Anthropic, etc.), pass them as environment variables:

docker run -p 8001:8001 \
  -v /path/to/haiku.rag.yaml:/app/haiku.rag.yaml \
  -v /path/to/data:/data \
  -e OPENAI_API_KEY=your-key-here \
  haiku-rag

Docker Compose

See examples/docker/ for a complete setup example.