Chroma — an open-source embedding (vector) database for building AI apps with retrieval: store embeddings and metadata, then run fast similarity search for RAG and semantic search. Deployed as a host-networked Nomad service with a persistent, on-disk store.
Needs nomad-pack on PATH. The script only adds the nomploy registry and runs this pack.
Source ↗ Project ↗ ★ 29.4k ⚑ Report an issue
Save as values.hcl, edit, then run:
# The name of the Nomad job.
job_name = "chroma"
# The Nomad namespace to deploy into.
namespace = "default"
# The datacenters to deploy to.
datacenters = ["*"]
# The Chroma container image. Pin a tag in production.
image = "chromadb/chroma:latest"
# Host port for the Chroma HTTP API. The container listens on 8000.
port = 8000
# Named volume for the on-disk vector store (/chroma/chroma). Holds all collections and embeddings.
data_volume = "chroma_data"
# Placement constraints. Pin to the node holding the volume. On a nomploy cluster: attribute = "$${meta.nomploy_control_plane}", operator = "=", value = "true".
constraints = []
# Resources for the Chroma task. Large collections need more memory.
resources = {
cpu = 500
memory = 512
}
| Name | Type | Default | Description |
|---|---|---|---|
| job_name | string | "chroma" | The name of the Nomad job. |
| namespace | string | "default" | The Nomad namespace to deploy into. |
| datacenters | list | ["*"] | The datacenters to deploy to. |
| image | string | "chromadb/chroma:latest" | The Chroma container image. Pin a tag in production. |
| port | number | 8000 | Host port for the Chroma HTTP API. The container listens on 8000. |
| data_volume | string | "chroma_data" | Named volume for the on-disk vector store (/chroma/chroma). Holds all collections and embeddings. |
| constraints | list | [] | Placement constraints. Pin to the node holding the volume. On a nomploy cluster: attribute = "$${meta.nomploy_control_plane}", operator = "=", value = "true". |
| resources | object | {
cpu = 500
memory = 512
} | Resources for the Chroma task. Large collections need more memory. |
No variables match.
This pack stores data in one Docker named volume:
chroma_data
restic
# Run on the node hosting this pack. Point restic at your repo first: # export RESTIC_REPOSITORY="s3:https://<account>.r2.cloudflarestorage.com/<bucket>" # export RESTIC_PASSWORD="<repo-password>" # export AWS_ACCESS_KEY_ID=<key> AWS_SECRET_ACCESS_KEY=<secret> restic backup \ /var/lib/docker/volumes/chroma_data/_data
rclone (sync to S3/R2)
rclone sync /var/lib/docker/volumes/chroma_data/_data backup:<bucket>/chroma_data
Paths assume the default Docker volume location (/var/lib/docker/volumes). Restore by stopping the job, restoring files into the same volume, and re-running the pack.
Chroma — an open-source embedding (vector) database for AI apps. Store embeddings with metadata and run fast similarity search — the retrieval half of a RAG or semantic-search stack. Simple HTTP API with official Python and JavaScript clients.
Single host-networked Nomad service with a persistent on-disk store.
nomad-pack registry add nomploy https://github.com/Nomploy/nomad-packs
nomad-pack run chroma --registry=nomploy
| Variable | Default | Description |
|---|---|---|
port |
8000 |
HTTP API port. The container listens on 8000. |
data_volume |
chroma_data |
/chroma/chroma — collections and embeddings (persistent). |
image |
chromadb/chroma:latest |
Container image. Pin a tag in production. |
resources |
{ cpu = 500, memory = 512 } |
Task resources. Bump memory for large collections. |
Connect from Python with chromadb.HttpClient(host="<node-ip>", port=8000). Pairs with the ollama
and open-webui packs for a fully local RAG stack. The API is unauthenticated by default — keep it
on an internal network, or enable token auth via the CHROMA_SERVER_AUTHN_CREDENTIALS /
CHROMA_SERVER_AUTHN_PROVIDER env vars. Pin the job to the node holding the volume with constraints.