Add minimal Dockerfile and docker-compose.yml for containerized development

This commit is contained in:
Russ Ferriday 2025-06-24 15:32:20 +01:00
parent ef73b53e46
commit 7167e9cd49
6 changed files with 108 additions and 0 deletions

10
.dockerignore Normal file
View file

@ -0,0 +1,10 @@
__pycache__/
*.pyc
*.pyo
*.db
.git
.gitignore
tests/
database/
documents/
uv.lock

4
.gitignore vendored
View file

@ -17,3 +17,7 @@ tests/data/
# environment variables
.env
# dirs we might mount in docker-compose.yml
documents/
database/

28
Dockerfile Normal file
View file

@ -0,0 +1,28 @@
FROM python:3.11-slim
# Install uv using pip instead of the shell installer - to avoid platform issues
RUN pip install uv
# Set working directory
WORKDIR /app
# Copy project files
COPY . .
# Install the package
RUN uv pip install --system .
# Create directories for mounts
RUN mkdir -p /inbound /database /ollama/models
# Set environment variables
ENV MONITOR_DIRECTORIES="/inbound"
ENV EMBEDDINGS_PROVIDER="ollama"
ENV EMBEDDINGS_MODEL="mxbai-embed-large"
ENV EMBEDDINGS_VECTOR_DIM=1024
# Expose port
EXPOSE 8000
# Default command
CMD ["uv", "run", "haiku-rag", "serve", "--db", "/database/haiku-rag.db"]

View file

@ -192,3 +192,36 @@ async with HaikuRAG("database.db") as client:
print(f"Content: {chunk.content}")
print(f"From document: {chunk.document_id}")
```
## Docker
``` bash
docker pull topiaruss/haiku-rag:latest
docker compose up
```
### docker-compose.yml file
* When this runs, a documents directory will be created in this directory. You can drag files here to be indexed.
* A database directory will be created to hold your haiku-rag.db.
* The compose file mounts your local `~/.ollama/models` directory into which you should pull in the normal way the models you want to use. These will then be accessible inside the running container.
For production, expect to edit the docker-compose.yml file
to set a permanent location for your models, database, and document directory.
Consult Docker resources to understand the many possibilities.
### build-multiplatform.sh
This is a simple builder to provide a multi-platform image.
Replace "topiaruss" with your own dockerhub username, create the haiku-rag
image folder, and issue a `docker login` command
### check (tail) the logs
```bash
docker compose logs -f
```

13
build-multiplatform.sh Executable file
View file

@ -0,0 +1,13 @@
#!/bin/bash
# Create a new builder instance for multi-platform builds
docker buildx create --name multiplatform-builder --use --bootstrap
# Build for both AMD64 and ARM64 platforms
docker buildx build \
--platform linux/amd64,linux/arm64 \
--tag topiaruss/haiku-rag:latest \
--push \
.
echo "The Multi-platform build is nowcomplete for linux/amd64 and linux/arm64"

20
docker-compose.yml Normal file
View file

@ -0,0 +1,20 @@
services:
haiku-rag:
build: .
image: topiaruss/haiku-rag:latest
ports:
- "8000:8000"
volumes:
# Mount external directory to /inbound for document monitoring
- ./documents:/inbound
# Mount database directory for persistence
- ./database:/database
# Mount ollama models directory (adjust path as needed)
- ~/.ollama/models:/ollama/models
environment:
- MONITOR_DIRECTORIES=/inbound
- EMBEDDINGS_PROVIDER=ollama
- EMBEDDINGS_MODEL=mxbai-embed-large
- EMBEDDINGS_VECTOR_DIM=1024
- OLLAMA_BASE_URL=http://host.docker.internal:11434
restart: unless-stopped