搬瓦工 VPS 部署 ChromaDB 嵌入向量存储教程

ChromaDB 是一款轻量级的开源嵌入向量数据库,专为 AI 应用设计。它以简单易用著称,几行 Python 代码即可完成向量的存储和检索。ChromaDB 既可以作为嵌入式库在应用内运行,也可以部署为独立的服务端,是构建 RAG 应用最常用的向量存储之一。本教程将介绍在搬瓦工 VPS 上部署和使用 ChromaDB 的完整流程。

一、ChromaDB 特点

  • 极简 API:API 设计简洁,学习成本极低。
  • 内置向量化:默认集成 Sentence Transformers 嵌入模型。
  • 灵活部署:支持嵌入式、客户端-服务端和 Docker 三种模式。
  • 自动持久化:数据自动存储到磁盘,重启不丢失。
  • 框架集成:与 LangChain、LlamaIndex 等框架深度集成。

二、环境准备

  • 操作系统:Ubuntu 20.04 或更高版本。
  • 内存:至少 1GB(嵌入式模式),2GB 以上更佳。
  • Python:Python 3.9 或更高版本。
apt update && apt upgrade -y
apt install python3 python3-pip python3-venv -y

mkdir -p /opt/chromadb && cd /opt/chromadb
python3 -m venv venv
source venv/bin/activate

三、安装 ChromaDB

pip install chromadb

四、嵌入式模式使用

最简单的使用方式,直接在 Python 应用中作为库使用:

cat > /opt/chromadb/embedded_demo.py <<'EOF'
import chromadb

# 创建持久化客户端
client = chromadb.PersistentClient(path="/opt/chromadb/data")

# 创建或获取集合
collection = client.get_or_create_collection(
    name="documents",
    metadata={"hnsw:space": "cosine"}  # 使用余弦相似度
)

# 添加文档(ChromaDB 会自动生成嵌入向量)
collection.add(
    documents=[
        "如何在 VPS 上安装 Docker 容器引擎",
        "Nginx 反向代理配置详解和最佳实践",
        "Linux 服务器安全加固和防火墙设置",
        "MySQL 数据库性能优化和索引调优",
        "使用 Let's Encrypt 配置免费 SSL 证书"
    ],
    ids=["doc1", "doc2", "doc3", "doc4", "doc5"],
    metadatas=[
        {"category": "容器"},
        {"category": "Web服务器"},
        {"category": "安全"},
        {"category": "数据库"},
        {"category": "SSL"}
    ]
)

# 查询相似文档
results = collection.query(
    query_texts=["服务器安全配置"],
    n_results=3
)

print("查询结果:")
for i, doc in enumerate(results["documents"][0]):
    distance = results["distances"][0][i]
    metadata = results["metadatas"][0][i]
    print(f"  {i+1}. [{metadata['category']}] {doc} (距离: {distance:.4f})")

print(f"\n集合总文档数: {collection.count()}")
EOF

python3 embedded_demo.py

五、服务端模式部署

将 ChromaDB 部署为独立服务,供多个应用共享:

# 方式一:直接运行
chroma run --host 0.0.0.0 --port 8000 --path /opt/chromadb/server-data
# 方式二:使用 Docker 部署(参考 Docker 安装教程)
docker run -d --name chromadb \
  -p 8000:8000 \
  -v /opt/chromadb/server-data:/chroma/chroma \
  chromadb/chroma:latest

5.1 客户端连接

cat > /opt/chromadb/client_demo.py <<'EOF'
import chromadb

# 连接远程 ChromaDB 服务
client = chromadb.HttpClient(host="localhost", port=8000)

# 操作方式与嵌入式模式完全一致
collection = client.get_or_create_collection("remote_docs")
collection.add(
    documents=["测试文档内容"],
    ids=["test1"]
)
print(f"远程集合文档数: {collection.count()}")
EOF

六、使用自定义嵌入模型

pip install sentence-transformers
cat > /opt/chromadb/custom_embedding.py <<'EOF'
import chromadb
from chromadb.utils.embedding_functions import SentenceTransformerEmbeddingFunction

# 使用指定的嵌入模型
embedding_fn = SentenceTransformerEmbeddingFunction(
    model_name="sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2"
)

client = chromadb.PersistentClient(path="/opt/chromadb/custom-data")
collection = client.get_or_create_collection(
    name="multilingual_docs",
    embedding_function=embedding_fn
)

# 添加中文文档
collection.add(
    documents=[
        "搬瓦工 VPS 提供高性能的虚拟专用服务器",
        "Docker 容器技术简化了应用部署流程",
        "向量数据库是 AI 应用的重要基础组件"
    ],
    ids=["zh1", "zh2", "zh3"]
)

results = collection.query(query_texts=["虚拟服务器"], n_results=2)
for doc in results["documents"][0]:
    print(f"  - {doc}")
EOF

七、配置 Systemd 服务

cat > /etc/systemd/system/chromadb.service <<EOF
[Unit]
Description=ChromaDB Vector Database Server
After=network.target

[Service]
Type=simple
User=root
WorkingDirectory=/opt/chromadb
ExecStart=/opt/chromadb/venv/bin/chroma run --host 0.0.0.0 --port 8000 --path /opt/chromadb/server-data
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reload
systemctl enable chromadb
systemctl start chromadb

八、配置认证

生产环境建议启用认证保护:

# 使用 Token 认证启动
chroma run --host 0.0.0.0 --port 8000 \
  --path /opt/chromadb/server-data \
  --chroma-server-authn-provider chromadb.auth.token_authn.TokenAuthenticationServerProvider \
  --chroma-server-authn-credentials "your-secure-token"
# 客户端使用 Token 连接
import chromadb
from chromadb.config import Settings

client = chromadb.HttpClient(
    host="localhost",
    port=8000,
    settings=Settings(
        chroma_client_auth_provider="chromadb.auth.token_authn.TokenAuthClientProvider",
        chroma_client_auth_credentials="your-secure-token"
    )
)

九、与 RAG 框架集成

ChromaDB 可以无缝集成到 LangChainLlamaIndex 中:

# LangChain 集成
from langchain_community.vectorstores import Chroma
from langchain_community.embeddings import HuggingFaceEmbeddings

embeddings = HuggingFaceEmbeddings(model_name="sentence-transformers/all-MiniLM-L6-v2")
vectorstore = Chroma(
    persist_directory="/opt/chromadb/langchain-data",
    embedding_function=embeddings,
    collection_name="langchain_docs"
)

# 添加文档
vectorstore.add_texts(["VPS 安全配置指南", "Docker 部署最佳实践"])

# 相似度搜索
results = vectorstore.similarity_search("安全配置", k=3)

十、数据管理

# 备份 ChromaDB 数据
tar -czf /opt/backups/chromadb-$(date +%Y%m%d).tar.gz /opt/chromadb/server-data/

# 集合管理
python3 -c "
import chromadb
client = chromadb.PersistentClient(path='/opt/chromadb/data')
# 列出所有集合
for c in client.list_collections():
    print(f'{c.name}: {c.count()} 条文档')
"

十一、常见问题

首次启动缓慢

ChromaDB 首次使用时会下载默认的嵌入模型(约 90MB),搬瓦工海外节点下载速度通常很好。也可以提前手动下载模型。

数据量限制

ChromaDB 适合中小规模的数据集(百万级以下)。如果数据量更大,建议使用 MilvusWeaviate

总结

ChromaDB 以其极简的 API 和轻量级部署成为 RAG 应用最受欢迎的向量存储选择。无论是快速原型开发还是中小规模的生产部署,ChromaDB 都能很好地胜任。选购搬瓦工 VPS 请查看 全部方案,使用优惠码 NODESEEK2026 可享受 6.77% 的折扣,购买链接:bwh81.net

关于本站

搬瓦工VPS中文网(bwgvps.com)是非官方中文信息站,整理搬瓦工的方案、优惠和教程。我们不销售主机,不提供技术服务。

新手必读
搬瓦工优惠码

NODESEEK2026(优惠 6.77%)

购买时填入即可抵扣。