Deployment¶
hemlock-lab deploys as a Docker Compose stack from the docker/ directory.
Starting the Stack¶
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:
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:
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¶
- Verification — Health check details
- Troubleshooting — Common deployment issues
Legacy: Proxmox Deployment
The original deployment used make deploy → lab-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/.