Skip to content

Deployment

hemlock-lab deploys as a Docker Compose stack from the docker/ directory.


Starting the Stack

cd docker
docker compose up -d

This builds images (first run only) and starts 6 containers:

graph LR
    CB["chromadb<br/>:8000"] --> HC{"healthcheck<br/>passes"}
    HC --> LC["langchain-rag<br/>:8100"]
    HC --> LI["llamaindex-rag<br/>:8101"]
    HC --> UN["unstructured-rag<br/>:8102"]
    HC --> HS["haystack-rag<br/>:8103"]
    HC --> CP["colpali-rag<br/>:8104"]

Pipeline containers wait for ChromaDB's healthcheck before starting.


Prerequisites Check

Before starting the stack, verify Ollama is running on the host:

# Ollama must be reachable
curl -sf http://localhost:11434/api/tags | jq '.models[].name'

# Required models must be pulled
ollama pull smollm2:135m
ollama pull nomic-embed-text
ollama pull nomic-embed-text

First Build

The first docker compose up -d builds all pipeline images from their Dockerfiles:

Service Dockerfile Build context
chromadb (pre-built image)
langchain-rag docker/langchain-rag/Dockerfile Repo root
llamaindex-rag docker/llamaindex-rag/Dockerfile Repo root
unstructured-rag docker/unstructured-rag/Dockerfile Repo root
haystack-rag docker/haystack-rag/Dockerfile Repo root
colpali-rag docker/colpali-rag/Dockerfile Repo root

Subsequent starts use cached images. To force a rebuild:

docker compose build --no-cache
docker compose up -d

Stopping the Stack

# Stop containers (preserves data)
docker compose stop

# Stop and remove containers (preserves volumes)
docker compose down

# Stop, remove containers, AND delete data
docker compose down -v
Command Containers Volumes Images
docker compose stop Stopped Kept Kept
docker compose down Removed Kept Kept
docker compose down -v Removed Removed Kept
docker compose down --rmi all -v Removed Removed Removed

Restarting Services

# Restart a single service
docker compose restart langchain-rag

# Restart all services
docker compose restart

# Rebuild and restart a service after code changes
docker compose up -d --build langchain-rag

Verification

After starting, verify all services are healthy:

docker compose ps

Then check each endpoint:

for port in 8000 8100 8101 8102 8103 8104; do
  echo -n "Port ${port}: "
  curl -sf "http://localhost:${port}/health" | jq -c . || echo "DOWN"
done

See Verification for the full health check procedure.


Next Steps


Legacy: Proxmox Deployment

The original deployment used make deploylab-scripts/deploy-all.sh, a 4-phase process: (1) Base OS setup with apt packages, (2) Service provisioning with systemd units and Python venvs, (3) ChromaDB seeding with 11 noise documents, (4) 9-point verification. Scripts are preserved in lab-scripts/.