这套环境包含什么
调 API 做原型很爽,但到了正经开发阶段,你会碰到一堆只在本地才暴露的问题:向量数据库跟 embedding 模型的维度对不上、OpenAI 兼容接口的 streaming 行为跟本地推理不一样、RAG 管线在云端跑通但本地调试不了。
这些问题不需要你买 GPU 服务器解决。一台普通开发机,装好 Docker,用下面这份 docker-compose.yml 就能跑起一整套本地 LLM 开发环境:模型推理、Web 界面、向量数据库、embedding 服务,全部容器化,一条命令启动。
四个容器各司其职
Ollama — 本地模型推理引擎。官方 Docker 镜像支持 CPU 和 Nvidia GPU,暴露 11434 端口提供 OpenAI 兼容的 REST API。你能跑 Llama 3.2、Qwen 2.5、DeepSeek-R1 等几十个开源模型,不花一分钱 API 费用。
Open WebUI — 前端界面。支持多模型切换、文件上传、RAG 检索、代码执行。它的 API 兼容 OpenAI 格式,意味着你本地开发的代码以后切到云端 API 几乎不用改。GitHub 上 80k+ star,社区活跃。
Qdrant — 向量数据库。做 RAG 必须有向量存储。Qdrant 开源、支持 Docker 部署、性能在主流向量数据库里排前列。比 ChromaDB 更适合生产环境,比 Milvus 部署简单得多。
Qdrant Web UI — 向量数据库的可视化管理界面,方便你检查 collection 状态、调试向量检索结果。
完整 docker-compose.yml
直接复制使用。CPU 和 GPU 两套配置都给了。
version: "3.8"
services:
ollama:
image: ollama/ollama:latest
container_name: ollama
ports:
- "11434:11434"
volumes:
- ollama_data:/root/.ollama
restart: unless-stopped
# Nvidia GPU 模式:取消注释 deploy 配置
# deploy:
# resources:
# reservations:
# devices:
# - driver: nvidia
# count: all
# capabilities: [gpu]
open-webui:
image: ghcr.io/open-webui/open-webui:main
container_name: open-webui
ports:
- "3000:8080"
volumes:
- open-webui_data:/app/backend/data
environment:
- OLLAMA_BASE_URL=http://ollama:11434
- QDRANT_URL=http://qdrant:6333
depends_on:
- ollama
- qdrant
restart: unless-stopped
qdrant:
image: qdrant/qdrant:latest
container_name: qdrant
ports:
- "6333:6333"
- "6334:6334"
volumes:
- qdrant_data:/qdrant/storage
restart: unless-stopped
qdrant-ui:
image: qdrant/qdrant-web-ui:latest
container_name: qdrant-ui
ports:
- "8001:8001"
depends_on:
- qdrant
restart: unless-stopped
volumes:
ollama_data:
open-webui_data:
qdrant_data:
保存为 docker-compose.yml,然后执行 docker compose up -d。四个容器全部启动。打开 http://localhost:3000 就是 Open WebUI 界面,http://localhost:8001 是 Qdrant 管理面板。
启动后要做的三件事
第一件:拉模型。 Ollama 默认不预装模型,需要手动拉。进入容器执行:
docker exec -it ollama ollama pull llama3.2
根据你的显存选模型。8GB 显存跑 Llama 3.2 3B 没压力,16GB 可以上 8B。纯 CPU 模式建议用 1B 版本,能跑但慢。Ollama 官方库有几十个模型可选,包括 Qwen 2.5 Coder 这种专门优化过代码生成的。
第二件:在 Open WebUI 里关联模型。 第一次打开 WebUI 注册管理员账号后,进 Settings → Models,确认 Ollama 连接已自动建立。你应该能看到刚拉的模型出现在列表里。如果没出现,检查 Ollama 容器是否正常:docker logs ollama。
第三件:配置 Qdrant 做 RAG。 Open WebUI 原生支持 Qdrant 做知识库检索。进 Settings → Documents,把向量数据库选成 Qdrant,填入 http://qdrant:6333(容器间用服务名通信)。然后上传文档,Open WebUI 会自动调 Ollama 的 embedding 模型生成向量存进 Qdrant。聊天时勾选文档,就实现了 RAG。
GPU 配置的注意事项
如果你有 Nvidia 显卡,用 GPU 模式推理速度快 10 倍以上。但需要先装 NVIDIA Container Toolkit:
# Ubuntu/Debian
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey \
| sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list \
| sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' \
| sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker
装完之后把 docker-compose.yml 里 Ollama 的 GPU 配置取消注释就行。验证 GPU 是否生效:docker exec -it ollama ollama ps。如果看到模型加载到了 GPU 上,说明配置成功。
开发场景:怎么用这套环境
这套环境不只是”能聊天”。几个实际开发场景:
场景一:RAG 管线调试。 上传文档到 Open WebUI 知识库,聊天时引用。如果检索效果不好,去 Qdrant UI 查看向量数据,检查 chunk 大小、embedding 维度是否匹配。这比在云上调 RAG 快得多,不用等网络往返。
场景二:API 兼容性测试。 Ollama 的 REST API 跟 OpenAI 格式兼容。你的代码先指向 http://localhost:11434/v1 调试,通过后改个 base URL 切到生产 API。注意 streaming 行为可能略有差异,本地测过比线上发现 bug 好。
场景三:Prompt 工程。 Open WebUI 支持创建自定义模型预设——系统提示词、温度参数、知识库绑定都配好。你可以为不同任务建不同预设,快速对比效果。比在代码里改 prompt 字符串方便太多。
资源消耗参考
CPU 模式下,四个容器占大约 2GB 内存(不含模型加载)。Llama 3.2 3B 加载后多占 2-3GB。一台 16GB 内存的开发机跑得起来,不流畅但能用。
GPU 模式下,3B 模型占 2-3GB 显存,8B 占 5-6GB。一张 8GB 显存的卡够日常开发用了。
磁盘方面,模型文件是大头。Llama 3.2 3B 约 2GB,8B 约 5GB。Qdrant 和 Open WebUI 的数据通常在几百 MB 级别。建议预留 20GB 磁盘空间。
进阶配置建议
加一个 embedding 专用模型。Ollama 支持 nomic-embed-text 这类轻量 embedding 模型,跟推理模型分开跑,互不影响。
加 SearXNG 做联网搜索。Open WebUI 支持集成 SearXNG,让本地 LLM 能搜实时网页。再加一个 searxng 容器到 compose 文件里就行。
加流量监控。用 cAdvisor 或 Portainer 监控各容器资源占用,方便你调优。
数据来源:
- Ollama 官方 Docker Hub 文档(hub.docker.com/r/ollama/ollama):CPU/GPU/AMD GPU 部署命令、模型拉取方式
- Open WebUI 官方文档(docs.openwebui.com):功能列表、环境变量配置、知识库与 RAG 功能、Qdrant 集成
- Ollama 模型库(ollama.com/library):可用模型列表与参数规模,包括 Llama 3.2、Qwen 2.5、DeepSeek-R1、nomic-embed-text
- Qdrant 官方文档(qdrant.tech/documentation/):Docker 部署、端口配置、存储卷映射
