Ollama + Open WebUI 本地 AI 部署完全指南 2026
发布日期:2026-05-05 · 阅读时间:14 分钟 · 分类:AI 基础设施
到 2026 年中,格局已经改变。企业正在将 AI 工作负载撤回本地部署。隐私法规日益收紧。而你可以在单块 GPU 上运行的模型——DeepSeek V4、Qwen 3、Llama 4、Mistral Large——已经能与 6 个月前的云端 API 相媲美。
本指南带你搭建一套生产级的本地 AI 技术栈,让你的数据保持私有、成本可预测、延迟最小化。
1. 2026 年为什么要用本地 AI
算账的方式变了。以下是推动这种转变的因素:
- 数据隐私: GDPR、CCPA 和中国个人信息保护法(PIPL)现在都有实际处罚。将代码库或客户数据发送到美国 API 在许多司法管辖区存在法律风险。
- 成本: 在单张 RTX 4090 上运行 70B 参数模型的电费约 $0.40/小时。同等规模的云端 API 吞吐量要贵 5-10 倍。
- 延迟: 本地推理零网络跳转。首个 token 延迟从 500-2000ms(云端)降低到 30-100ms(本地 GPU)。
- 离线: 隔离环境、旅途中开发、网络不稳定场所——本地 AI 随处可用。
- 模型质量: Qwen 3 72B、DeepSeek V4-0514、Llama 4 70B 都可运行在 48GB 显存上。与 GPT-5.5 在代码和结构化任务上的质量差距正在迅速缩小。
2. 技术栈概览
三个核心组件,各有其特定角色:
| 组件 | 角色 | 兼容 API |
|---|---|---|
| Ollama | 模型运行器和推理引擎 | 兼容 OpenAI 的聊天和嵌入端点 |
| Open WebUI | 聊天界面、RAG、多用户管理 | Ollama API(无需代理) |
| Continue.dev | VS Code / JetBrains AI 助手 | 兼容 OpenAI(指向 Ollama) |
可选但推荐:MCP 服务器(文件系统、GitHub、git、数据库)为你的本地 AI 代理提供工具访问能力。
3. Docker Compose 部署
这是启动全套技术栈的最快路径。一个命令,全部连接好。
docker-compose.yml
version: "3.8"
services:
ollama:
image: ollama/ollama:latest
container_name: ollama
restart: unless-stopped
ports:
- "11434:11434"
volumes:
- ollama_data:/root/.ollama
environment:
- OLLAMA_KEEP_ALIVE=24h
- OLLAMA_NUM_PARALLEL=2
- OLLAMA_MAX_LOADED_MODELS=2
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all
capabilities: [gpu]
open-webui:
image: ghcr.io/open-webui/open-webui:main
container_name: open-webui
restart: unless-stopped
ports:
- "3000:8080"
volumes:
- open_webui_data:/app/backend/data
environment:
- OLLAMA_BASE_URL=http://ollama:11434
- WEBUI_SECRET_KEY=${WEBUI_SECRET_KEY:-changeme}
- WEBUI_NAME=Local AI
- ENABLE_SIGNUP=false
depends_on:
- ollama
volumes:
ollama_data:
open_webui_data:
WEBUI_SECRET_KEY 改为强随机值。创建管理员账户后设置 ENABLE_SIGNUP=false。
部署
docker compose up -d
# 检查日志
docker compose logs -f
# 验证 Ollama API
curl http://localhost:11434/api/tags
Open WebUI 将运行在 http://localhost:3000。首次访问创建管理员账户。
4. Ollama 配置
拉取模型
从最适合你硬件的模型开始:
# 在容器内或宿主机上运行
docker exec -it ollama ollama pull qwen3:72b
docker exec -it ollama ollama pull deepseek-v4:latest
docker exec -it ollama ollama pull llama4:70b
docker exec -it ollama ollama pull mistral-large:latest
# 嵌入模型(用于 Open WebUI 的 RAG)
docker exec -it ollama ollama pull nomic-embed-text:v1.5
Ollama 环境调优
| 变量 | 默认值 | 推荐值 | 原因 |
|---|---|---|---|
OLLAMA_KEEP_ALIVE |
5 分钟 | 24 小时 | 保持模型加载在显存中。防止每次请求 30 秒加载时间。 |
OLLAMA_NUM_PARALLEL |
1 | 2-4 | 处理并发请求。更高的值增加显存使用。 |
OLLAMA_MAX_LOADED_MODELS |
1 | 1-2 | 更多模型 = 更少重载,但更多显存争用。 |
OLLAMA_HOST |
127.0.0.1 | 0.0.0.0 | 监听所有接口(Docker 内需要)。 |
自定义 Modelfile
创建自定义 modelfile 来调整每个模型的系统提示和参数:
FROM qwen3:72b
# 编程用系统提示
SYSTEM """你是一名经验丰富的软件工程师。编写干净、文档完善的代码。
偏重实用方案而非理论方案。
不确定时承认不确定,不要胡编乱造。"""
PARAMETER temperature 0.3
PARAMETER top_p 0.9
PARAMETER num_ctx 32768
docker exec -i ollama ollama create my-coder -f - << 'EOF'
FROM qwen3:72b
SYSTEM "你是一名经验丰富的软件工程师..."
PARAMETER temperature 0.3
PARAMETER num_ctx 32768
EOF
5. Open WebUI 设置
Open WebUI 提供类似 ChatGPT 的界面,背后是你的本地模型,并支持 RAG 文档查询。
首次登录配置
- 打开
http://localhost:3000— 创建管理员账户 - 进入 Admin Panel → Settings → Models
- 确认 Ollama 连接显示了你拉取的模型
- 将默认模型设为主要模型(例如
qwen3:72b)
- 进入 Settings → Documents
- 上传文档用于 RAG 检索
- 选择
nomic-embed-text:v1.5作为嵌入模型
- 进入 Settings → Interface
- 禁用注册(如果尚未通过环境变量设置)
- 配置用户角色
值得启用的关键功能
- 网络搜索: Open WebUI 通过
searxng或直接 API 支持网络搜索。在 Admin Panel 中启用,让你的本地模型获取最新信息。 - 多模态: 上传图片到支持视觉的模型(LLaVA、Qwen-VL)。开箱即用。
- 代码执行: 内置 Pyodide 沙盒,用于在聊天中运行 Python 代码。在 Admin Panel 中启用。
- 音频输入: Whisper 集成用于语音输入。可映射到本地 Whisper 模型或 API。
6. Continue.dev VS Code 集成
Continue.dev 将 VS Code 直接连接到你的本地 Ollama 模型,提供内联补全、聊天和编程代理功能。
安装
# 在 VS Code 中:扩展 → 搜索 "Continue"
# 或通过命令行:
code --install-extension continue.continue
配置(~/.continue/config.json)
{
"models": [
{
"title": "本地 Qwen 3",
"provider": "ollama",
"model": "my-coder",
"apiBase": "http://localhost:11434",
"contextLength": 32768,
"completionOptions": {
"temperature": 0.2,
"topP": 0.9
}
},
{
"title": "DeepSeek V4",
"provider": "ollama",
"model": "deepseek-v4:latest",
"apiBase": "http://localhost:11434",
"contextLength": 65536
}
],
"tabAutocompleteModel": {
"title": "本地 Tab 补全",
"provider": "ollama",
"model": "qwen3:7b",
"apiBase": "http://localhost:11434"
},
"embeddingsProvider": {
"provider": "ollama",
"model": "nomic-embed-text:v1.5",
"apiBase": "http://localhost:11434"
}
}
/edit 和聊天命令,这些场景质量比速度更重要。
你能获得什么
- Tab 自动补全: 输入时提供代码建议(类似 Copilot,但本地运行)
- 聊天: 完整的上下文感知聊天,可引用选中代码
- 内联编辑: 选中代码并告诉模型要修改什么(
Cmd+I) - 代理模式: 模型可以读取文件、运行终端命令、编辑多个文件
- 代码库搜索: 使用本地嵌入在整个项目中语义搜索
7. MCP 服务器集成
MCP(模型上下文协议)服务器为你的本地 AI 提供工具访问能力 — 读取文件、查询数据库、管理 git 等。Continue.dev 和 Open WebUI 都支持 MCP。
Continue.dev 中的 MCP
添加到你的 ~/.continue/config.json:
{
"experimental": {
"mcpServers": {
"filesystem": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/workspace"]
},
"github": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"],
"env": {
"GITHUB_TOKEN": "${GITHUB_TOKEN}"
}
},
"git": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-git", "."]
}
}
}
}
Open WebUI 中的 MCP
Open WebUI(v0.5+)内置 MCP 客户端。进入 Admin Panel → Tools → MCP Servers 并添加:
{
"servers": [
{
"name": "filesystem",
"transport": "stdio",
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/data"]
},
{
"name": "web-search",
"transport": "stdio",
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-brave-search"],
"env": {
"BRAVE_API_KEY": "${BRAVE_API_KEY}"
}
}
]
}
8. GPU 加速
没有 GPU,大模型将在 CPU 上运行 — 可用但速度很慢(70B 模型 1-3 token/秒)。以下是如何确保 GPU 加速正常工作。
NVIDIA GPU
# 验证 NVIDIA 驱动和 CUDA
nvidia-smi
# 安装 NVIDIA 容器工具包
sudo apt install nvidia-container-toolkit
sudo systemctl restart docker
# 在容器中测试 GPU
docker run --rm --gpus all nvidia/cuda:12.8-base nvidia-smi
如果上面的 Docker Compose 文件包含 deploy.resources.reservations.devices 的 NVIDIA capabilities,Ollama 将自动使用 GPU。
AMD ROCm
使用 Ollama 的 ROCm 构建版本:
image: ollama/ollama:rocm
对于 16GB+ 显存的 AMD GPU(RX 7900 XTX、MI250),ROCm 对推理的支持很稳定。
Apple Silicon(M 系列)
Ollama 在 macOS 上原生运行,支持 Metal 加速:
# 直接安装(macOS 上无需 Docker)
brew install ollama
ollama serve
# M1/M2/M3/M4 上自动启用 Metal 加速
# 统一内存 = 在 M 系列 Max/Ultra 上可运行 64GB 模型
ollama pull qwen3:72b
显存需求
| 模型大小 | 量化级别 | 所需显存 | 硬件 |
|---|---|---|---|
| 7B | Q4_K_M | ~6 GB | RTX 3060、M1、任意 GPU |
| 14B | Q4_K_M | ~10 GB | RTX 3080、M2 Pro |
| 32B | Q4_K_M | ~20 GB | RTX 3090、M3 Max |
| 70B | Q4_K_M | ~42 GB | RTX 4090 24GB(2x)、M3 Ultra、A100 |
| 72B | Q4_K_M | ~43 GB | A6000、2x RTX 3090、M3 Ultra |
| 120B+ | Q4_K_M | ~72 GB | A100 80GB、2x A6000 |
9. 生产环境加固
更进一步?以下是需要添加的内容:
身份认证
Open WebUI 内置基于角色的用户管理。生产环境中:
- 放在反向代理后面(nginx、Caddy、Traefik)
- 使用 Let's Encrypt 添加 HTTPS
- 创建用户账户后设置
ENABLE_SIGNUP=false - 考虑 OAuth 集成(Open WebUI 支持 Google、GitHub、OIDC)
限流和监控
# nginx 限流示例
limit_req_zone $binary_remote_addr zone=ai_api:10m rate=30r/m;
server {
listen 443 ssl;
server_name ai.yourdomain.com;
location / {
limit_req zone=ai_api burst=10 nodelay;
proxy_pass http://localhost:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
备份策略
# 备份 Open WebUI 数据(包含用户账户、聊天历史、RAG 文档)
docker run --rm -v open_webui_data:/data -v $(pwd):/backup \
alpine tar czf /backup/open-webui-backup-$(date +%Y%m%d).tar.gz -C /data .
# 备份 Ollama 模型(体积大 — 如果能重新拉取可跳过)
# 模型文件位于 ollama_data 卷:/root/.ollama/models/
资源限制
services:
ollama:
deploy:
resources:
limits:
memory: 64G
reservations:
memory: 32G
10. 模型选择指南
| 使用场景 | 最佳模型 | 备选 | 最低硬件 |
|---|---|---|---|
| 通用编程 | Qwen 3 72B | DeepSeek V4-0514 | 24GB 显存(Q4) |
| Tab 自动补全 | Qwen 3 7B / DeepSeek-Coder 7B | Llama 4 8B | 8GB 显存 |
| RAG 和文档问答 | Mistral Large 2 | Qwen 3 32B | 16GB 显存 |
| 推理/数学 | DeepSeek V4-0514 | Qwen 3 72B | 48GB 显存 |
| 创意写作 | Llama 4 70B | Mistral Large 2 | 48GB 显存 |
| 低硬件(8GB) | Qwen 3 7B | Llama 4 8B | 8GB 显存 |
| 跨平台 M 系列 | Qwen 3 72B(Metal) | DeepSeek V4(Metal) | M3 Max 48GB |
11. 故障排查
Ollama 不使用 GPU
# 检查容器内 CUDA 是否可用
docker exec -it ollama nvidia-smi
# 验证容器工具包
docker info | grep -i runtime
# 强制 GPU 设备
docker compose down
docker compose up -d #(确保 compose 中有 --gpus all)
模型加载但输出垃圾内容
- Num_ctx 对显存来说太高 → 降低到 8192 或 16384
- 下载损坏 → 删除并重新拉取:
ollama rm <model>然后ollama pull - 混合精度问题 → 设置
OLLAMA_FLASH_ATTENTION=1
Open WebUI 无法连接 Ollama
# 从 webui 容器内验证
docker exec -it open-webui curl http://ollama:11434/api/tags
# 检查 docker-compose 中 OLLAMA_BASE_URL 是否设置正确
# 应为 http://ollama:11434(容器名称,非 localhost)
Apple Silicon 上推理慢
- 确保使用原生 macOS 安装,而非 Docker
- macOS 上的 Docker 没有 Metal 的 GPU 穿透
- 使用
brew install ollama安装并运行ollama serve
Continue.dev 无法连接
# 从宿主机测试 Ollama API
curl http://localhost:11434/api/generate -d '{"model":"qwen3:72b","prompt":"hi"}'
# 验证 config.json 中的 apiBase 完全匹配
# Docker:apiBase 为 "http://host.docker.internal:11434"
# 原生安装:"http://localhost:11434"
标签:Ollama, Open WebUI, Continue.dev, 本地 AI, MCP, Docker, GPU, LLM