Linux本地AI助手:Ollama + Open WebUI完全离线方案
Linux 上的本地AI助手:Ollama 跑模型、Open WebUI 做界面、LocalAI 补 API,含 systemd 与 Docker 完整配置。
📜 目录
Linux本地AI助手:Ollama + Open WebUI完全离线方案
一台闲置的 Linux 机器、一张中端显卡,就能搭出一个不联网也能用的私人 AI 助手:聊天、问自己文档、给脚本提供 API。Linux 做这件事比 Windows 省心,驱动、Docker、systemd 都是现成的。下面是从装系统到能用的完整走法,全部命令可直接复制。
一、技术栈分工
| 组件 | 星数 | 角色 |
|---|---|---|
| Ollama | 184,835 | 跑模型,提供本地 API(默认 11434) |
| Open WebUI | 156,799 | 浏览器界面,多用户、文档问答、模型切换 |
| LocalAI | 49,969 | 纯 OpenAI 兼容端点,给老应用做替身 |
| llama.cpp | 132,405 | 底层推理引擎,Ollama 内部也用它 |
大多数场景只需要前两个。LocalAI 的用处是"某个软件只认 OpenAI 的接口格式,又不想改代码",它把接口层做得更贴规范。
二、装 Ollama
curl -fsSL https://ollama.com/install.sh | sh
systemctl status ollama
脚本会装成 systemd 服务并自动启动,模型默认存放在 /usr/share/ollama/.ollama/models。
让它监听内网,方便局域网其他机器访问:
sudo systemctl edit ollama.service
写入:
[Service]
Environment="OLLAMA_HOST=0.0.0.0:11434"
Environment="OLLAMA_MODELS=/data/ollama/models"
Environment="OLLAMA_NUM_PARALLEL=2"
Environment="OLLAMA_KEEP_ALIVE=30m"
sudo systemctl daemon-reload && sudo systemctl restart ollama
几个参数的实际含义:OLLAMA_NUM_PARALLEL 是并发请求数,调大要相应加显存;OLLAMA_KEEP_ALIVE 是模型驻留时间,设长一点能避免每次请求都重新加载(首次加载十几秒到几十秒)。
注意:0.0.0.0 会把服务暴露到整个网络,Ollama 本身没有鉴权。只在内网用,或者前面套一层 nginx 加 basic auth,或者干脆只监听 127.0.0.1 让 Open WebUI 走 Docker 内网访问。
三、拉模型
# 通用对话,8B 大约需 6GB 显存(Q4 量化)
ollama pull qwen3:8b
# 强推理,7B 蒸馏版,16GB 内存可跑
ollama pull deepseek-r1:7b
# 中文写作与长文,质量更稳,24GB 显存更舒服
ollama pull qwen3:14b
# 给文档问答用的嵌入模型
ollama pull bge-m3
跑起来看速度:
ollama run qwen3:8b --verbose
>>> 用三句话解释什么是向量检索
输出末尾会给 eval rate(每秒生成多少 token)。7B 到 8B 模型在消费级显卡上通常几十 token/s,纯 CPU 往往只有个位数,这个数字决定了你的实际体验,值得先测。
四、装 Open WebUI
docker run -d -p 3000:8080 \
--add-host=host.docker.internal:host-gateway \
-v open-webui:/app/backend/data \
--name open-webui --restart always \
ghcr.io/open-webui/open-webui:main
浏览器打开 http://服务器IP:3000,第一个注册的账号默认成为管理员。容器里访问宿主机的 Ollama 用 http://host.docker.internal:11434;如果 Ollama 只监听 127.0.0.1,就在同一个 docker 网络里跑,或者用 --network host。
装完值得打开的几项:
- 文档问答:上传 PDF 或连接目录,选好嵌入模型(
bge-m3),可以只针对某个知识库提问。 - 多用户:给家人或同事开账号,各自独立的对话历史。
- 模型预设:不同任务绑定不同系统提示词,省得每次手打。
- 联网搜索:默认走外部搜索引擎,纯离线场景要关掉,否则一问就外联。
五、真正的"完全离线"要处理三件事
- 模型权重要预下载。断网之后
ollama pull会失败,所有要用的模型和嵌入模型提前拉完。 - 关掉联网搜索和外部工具。Open WebUI 的搜索、网页抓取功能默认可能开启,在设置里逐个确认。
- 嵌入模型走本地。文档问答默认可能调用云端 embedding,改成
bge-m3或nomic-embed-text本地模型,否则上传的文档内容会发出去。
做完这三步,把网线拔掉,聊天和文档问答应该照常工作。这就是验证是否真离线的唯一方法。
六、什么时候需要 LocalAI
| 需求 | 用谁 |
|---|---|
| 自己聊天、内部知识库 | Ollama + Open WebUI 足够 |
| 老应用只支持 OpenAI 接口,要改 base_url 就走 | LocalAI 或 Ollama 的 /v1 兼容层 |
| 需要图像生成、语音转写统一进一个端点 | LocalAI 覆盖面更广 |
| 要按模型做细粒度显存控制 | llama.cpp 直接调参 |
Ollama 自带 http://localhost:11434/v1 的 OpenAI 兼容接口,多数情况不用再上 LocalAI。
七、加一层访问控制
内网也要防手滑。最省事的是 nginx 反代加 basic auth:
server {
listen 80;
server_name ai.local;
auth_basic "restricted";
auth_basic_user_file /etc/nginx/.htpasswd;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
sudo apt install apache2-utils
sudo htpasswd -c /etc/nginx/.htpasswd yourname
sudo systemctl reload nginx
要接公网,再加 TLS(certbot 一条命令),并把 Ollama 的 11434 端口在防火墙上关掉,只留 80/443。
八、硬件与模型对照
| 硬件 | 能跑 | 体验 |
|---|---|---|
| 16GB 内存,无独显 | 7B 到 8B(Q4) | 能用,个位数 token/s |
| 8GB 显存 | 7B 到 8B(Q4) | 日常对话流畅 |
| 12GB 到 16GB 显存 | 14B(Q4) | 质量明显上一档 |
| 24GB 显存 | 32B(Q4)或 14B(Q8) | 接近商用体验 |
| 48GB 以上或 Mac 大内存 | 70B(Q4) | 慢但可用,适合批处理 |
显存不够时的第一招不是换卡,是把量化档从 Q8 降到 Q4_K_M,体积差不多减半,质量损失通常可接受。
常见问题
Q:一定要显卡吗? A:不一定。llama.cpp 的 CPU 推理很成熟,7B 模型在 8 核以上的 CPU 能跑到可用速度,只是长回答要等。
Q:Open WebUI 打开很慢或白屏?
A:多半是容器里连不上 Ollama。进容器 docker exec -it open-webui curl http://host.docker.internal:11434 测一下,通不通一眼就知道。
Q:多人同时用会排队吗?
A:会。Ollama 默认并发有限,OLLAMA_NUM_PARALLEL 调大需要更多显存,几个人同时用 8B 模型,16GB 显存比较稳。
Q:怎么备份?
A:Open WebUI 的数据都在 open-webui 这个 docker volume 里,模型在 OLLAMA_MODELS 目录,两处一起打包即可。数据库是 SQLite,停机复制最安全。
注:安装命令与端口默认值以 Ollama、Open WebUI 官方文档为准,版本升级后可能有变化。
相关文章
本站文章由编辑人工撰写,收录的工具均经过实测或公开资料核验。文中链接指向工具官网或 GitHub 仓库,仅作信息参考,不构成付费推广。