Chroma 向量库的自托管运行、认证、备份与容量运维。
Chroma 以 SQLite 加 HNSW 段文件为本地存储,既能嵌入式运行,也能起 HTTP 服务。自托管运维的关键是单写者约束、持久卷、认证、批量上限和版本兼容。
基础 API 见 chroma;本页聚焦服务端运行和生产故障。
pip install -U chromadb
chroma run --path ./chroma-data --host 0.0.0.0 --port 8000
curl -s http://localhost:8000/api/v2/heartbeat
用 Docker 启动并开启 token 认证:
docker run -d --name chroma \
-p 8000:8000 \
-v "$PWD/chroma-data:/data" \
-e CHROMA_SERVER_AUTHN_PROVIDER="chromadb.auth.token_authn.TokenAuthenticationServerProvider" \
-e CHROMA_SERVER_AUTHN_CREDENTIALS="$CHROMA_TOKEN" \
chromadb/chroma:"$CHROMA_VERSION"
镜像版本的挂载点可能是 /data,也可能是 /chroma/chroma;先 docker inspect 或查看该版本文档确认。
客户端带 token 访问,并做一次写入和查询:
python - <<'PY'
import chromadb
client = chromadb.HttpClient(
host="localhost", port=8000,
headers={"X-Chroma-Token": "test-token"},
)
print("heartbeat:", client.heartbeat())
col = client.get_or_create_collection("docs", metadata={"hnsw:space": "cosine"})
col.add(ids=["1"], documents=["df -h 查看磁盘使用率"],
metadatas=[{"source": "ops"}])
print(col.query(query_texts=["磁盘满了"], n_results=3))
PY
服务停止后做一致性备份:
docker stop chroma
tar czf "chroma-backup-$(date +%F).tgz" chroma-data
docker start chroma
恢复时解压到新目录,再用相同版本启动并校验 collection 数量与抽样查询。
PersistentClient 和 HTTP 服务不能同时打开同一个持久化目录;SQLite 锁冲突可能导致损坏。X-Chroma-Token。add/update 有批量上限(常见实现约 5461 条),超过会报 batch size 错误;按固定大小切批。hnsw:space、hnsw:M、hnsw:construction_ef 等参数在创建集合时确定,事后改 metadata 不会重建索引。$in 列表容易报错,写入前先规范化。合上页面,先回答,再展开对照。
CHROMA_SERVER_AUTHN_PROVIDER=chromadb.auth.token_authn.TokenAuthenticationServerProvider 和 CHROMA_SERVER_AUTHN_CREDENTIALS=<token>;客户端在请求头带同一个 token。