本地部署 Qdrant 向量数据库:Docker 一键搭建,RAG 应用必备

什么是 Qdrant?

做 AI 应用离不开向量搜索。Qdrant 是目前最流行的开源向量数据库之一,由 Rust 编写,性能强、接口友好。它支持余弦相似度、欧氏距离、点积等多种距离度量,自带过滤查询,还能和 LangChain、LlamaIndex 等框架无缝对接。

相比 PGVector、Milvus,Qdrant 的优势是轻量、单二进制部署简单、API 设计直观。本文教你用 Docker 五步搞定本地部署。

准备工作

你需要:

  • 一台服务器(本地电脑或 VPS 均可,推荐 2 核 4GB)
  • Docker 已安装(没装的话:curl -fsSL https://get.docker.com | bash)
  • curl 工具(测 API 用)

如果服务器内存只有 1GB,用 Qdrant 时建议不开启 WAL 压缩和磁盘持久化,纯内存运行。

第一步:创建项目目录

mkdir -p ~/qdrant-data && cd ~/qdrant-data

把数据目录挂在宿主机上,这样容器重建也不会丢数据。

第二步:写 docker-compose.yml

version: "3.8"

services:
  qdrant:
    image: qdrant/qdrant:latest
    container_name: qdrant
    restart: unless-stopped
    ports:
      - "6333:6333"
      - "6334:6334"
    volumes:
      - ./qdrant_data:/qdrant/data
      - ./qdrant_snapshots:/qdrant/snapshots
    environment:
      - QDRANT__SERVICE__HTTP_PORT=6333
      - QDRANT__SERVICE__GRPC_PORT=6334
      - QDRANT__SERVICE__ENABLE_AUTH API_KEY=
    healthcheck:
      test: ["CMD-SHELL", "curl -sf http://localhost:6333/ || exit 1"]
      interval: 10s
      timeout: 5s
      retries: 5

关键说明:

  • 6333 是 REST API 端口,前端和 curl 都走这里
  • 6334 是 gRPC 端口,性能要求高的场景用
  • qdrant_data 目录持久化向量数据,qdrant_snapshots 目录存快照
  • 如果不想暴露到公网,把端口改成本地映射 127.0.0.1:6333:6333

第三步:启动服务

docker compose up -d

启动后等几秒,检查健康状态:

docker compose ps

看到 healthy 状态就OK了。如果一直是 starting,查一下日志:

docker compose logs -f qdrant

第四步:创建集合,写入向量

Qdrant 的逻辑层次是:服务器 → 集合(Collection)→ 点(Point)。一个集合就是一个独立的向量索引。

用 curl 创建一个名为 my_rag 的集合,维度 768(和常见的 Embedding 模型对齐):

curl -X PUT http://localhost:6333/collections/my_rag \
  -H "Content-Type: application/json" \
  -d '{
    "vectors": {
      "size": 768,
      "distance": "Cosine"
    }
  }'

返回 {"result":true} 说明创建成功。

写入几条向量数据:

curl -X PUT http://localhost:6333/collections/my_rag/points \
  -H "Content-Type: application/json" \
  -d '{
    "points": [
      {
        "id": 1,
        "vector": [0.1] 768,
        "payload": {"title": "什么是向量数据库"}
      },
      {
        "id": 2,
        "vector": [0.2] 768,
        "payload": {"title": "RAG 原理入门"}
      }
    ]
  }'

注意:实际使用中向量是从 Embedding 模型生成的,这里演示用随机数代替。

第五步:向量搜索

搜索最相似的 3 条结果:

curl -X POST http://localhost:6333/collections/my_rag/points/search \
  -H "Content-Type: application/json" \
  -d '{
    "vector": [0.15] 768,
    "limit": 3,
    "with_payload": true,
    "with_vector": false
  }'

返回结果包含每个点的相似度分数(score)和附加信息(payload),这就是 RAG 检索的核心接口。

验证部署成功

两种方式确认 Qdrant 跑起来了:

方式一:看健康检查

curl http://localhost:6333/collections/my_rag

返回集合信息就说明服务正常。

方式二:打开 Web UI

open http://localhost:6333/dashboard

浏览器会打开 Qdrant 的管理界面,可以直接在页面上创建集合、上传数据、执行搜索,适合调试。

常见问题

Q1:向量维度怎么选?

取决于你用的 Embedding 模型。text-embedding-ada-002 是 1536 维,bge-large 是 1024 维,bge-m3 是 1024 维。不确定就去查模型文档。

Q2:远程服务器怎么安全暴露?

不要直接把端口暴露到公网。用 Tailscale、Cloudflare Tunnel 或 Nginx 反向代理,配合 API Key 鉴权。

# 开启 API Key 鉴权
environment:
  - QDRANT__SERVICE__API_KEY=your-secret-key

调用时带 Header:

curl -H "api-key: your-secret-key" http://your-server:6333/collections

Q3:数据丢了怎么办?

只要 qdrant_data 目录还在,重建容器数据就还在。定期备份这个目录:

tar czf qdrant-backup-$(date +%Y%m%d).tar.gz qdrant_data/

Q4:Qdrant 和 PGVector 怎么选?

Qdrant 专注向量搜索,性能强、功能全。PGVector 适合已经在用 PostgreSQL 的项目,不想多维护一个服务。两者可以结合使用——PG 存业务数据,Qdrant 存向量。

下一步

Qdrant 配好之后,接一个 Embedding 模型就能搭完整的 RAG 系统。推荐搭配 Ollama 跑本地 Embedding,或者直接用 OpenAI API 生成向量。配合之前的 Ollama 部署教程,本地 AI 检索管道就全了。

去试试你的第一个向量集合吧,遇到报错随时来问。

这篇文章对你有帮助吗?