API按token计费肉疼?Ollama+Open WebUI私有化部署实战,小鸡也能跑起自己的AI大模型


导读:本站自托管系列一路跑下来,Gitea管代码、MinIO造对象存储、Uptime Kuma盯服务、Healthchecks盯任务,栈是齐了——但2026年自托管圈最热闹的品类一直没正面写过:大语言模型。官方API按token计费,重度用户月底一算账肉疼;聊天记录躺在别人的服务器上,问点带隐私的内容心里总有点打鼓;免费档限速限并发,高峰期排队排到怀疑人生。这篇把私有化LLM在小鸡上的落地一次讲透:硬件账怎么算(内存是硬门槛、量化是入场券)、Ollama的安装和两个必踩的坑、模型选型与CPU推理的实测预期、Open WebUI的多用户与知识库、反代HTTPS让AI随身携带、OpenAI兼容API怎么接给其他服务,最后算一笔成本账:哪些场景自建真香,哪些场景纯属给自己找罪受。

一、三个动机:可控、隐私,以及排在最后的省钱

先说为什么要在小鸡上折腾这个,把动机排个序比什么都重要。动机一,可控:API服务说限流就限流、说调价就调价、说下线旧版本就下线,你的应用跟着别人的作息走;自己部署的模型,快照备份一份(备份篇的restic照用不误),七年后还能原样跑起来,这一点对长期项目不是玄学是刚需。动机二,隐私:把日志、代码、客户资料贴给第三方API,等于把数据主权交了出去,合规敏感的业务根本没得选;私有大模型让"数据不出机器"从口号变成架构事实——你的服务器在哪,数据就在哪,哪也不去。动机三,才是省钱——注意这个排序:轻度用户API其实比VPS便宜,真正的省钱场景是"高频+长文本":每天几百次调用、每次几千token的自动摘要、批量翻译、日志分析、周报生成,这种用量下API账单会稳定超过一台8G内存小鸡的月付,而且随着用量线性上涨。先对号入座再决定要不要往下读:三条里中了两条,这篇就值得你花一晚上。

二、硬件账:内存是硬门槛,量化是入场券

私有化LLM第一课是放弃幻想:跑得动跑不动,不看CPU不看带宽,先看内存。经验公式很简单:Q4量化模型加载后的内存占用,约等于模型文件体积的1.5到2倍——权重本身占大头,剩下的余量留给KV缓存和运行时。对照常见档位心里就有数了:1.5B到2B的小模型,文件1到2G,2G内存的小鸡勉强能碰,属于"能跑但委屈";4B模型文件2.5G左右,4G内存是舒适线,这也是后面要讲的甜点区;7-8B模型文件5G上下,8G内存起步,6G内存加Swap能苟但体验打折;14B文件9G,16G内存才稳;32B文件20G,没有32G内存就别为难自己了。CPU方面别抱太高期望:小鸡常见的2到4核vCPU上,4B模型的输出速度大致在每秒5到15个token,7-8B在3到8个,14B往上就开始有"一个字一个字往外蹦"的质感——日常问答、改文章、写周报够用,想拿它跑大批量任务就得掂量掂量时间成本。硬盘是第二道坎:一个模型动辄几个G,兴冲冲拉了三四个型号,20G的小盘就见底了(磁盘爆满篇的惨案别在模型上重演),动手前先规划好OLLAMA_MODELS的路径放哪个盘。还有一条容易忽略:跑模型时内存被权重占住,Swap篇的知识这时候是保命的——配置好Swap再开跑,OOM Killer掐死进程的姿势比想象中难看。

三、装Ollama:一条命令的事,两个必踩的坑

Ollama是把开源模型"下载即用"这件事做到极致的工具,模型格式、量化、运行时全部打包好,安装就一条命令:

curl -fsSL https://ollama.com/install.sh | sh

装完自动注册systemd服务并启动,默认监听127.0.0.1:11434——注意这个默认值,它是第一个安全设计也是第一个坑的伏笔,后面细说。先说两个必踩的坑。第一个坑是磁盘:默认模型路径在/usr/share/ollama/.ollama/models,小盘机器拉两个模型根目录就红了。磁盘爆满篇说过数据盘和系统盘要分家,这里同样适用,用systemctl edit ollama.service加一段覆盖配置:

[Service]
Environment="OLLAMA_MODELS=/data/ollama/models"

保存后systemctl restart ollama生效,模型从此落盘到数据盘。第二个坑是拉取速度:模型仓库托管在海外,国内机器直连速度感人,要么给服务器配上代理,要么挑流量充裕的时段提前拉好——好在pull是断点续传的,中断了重跑一遍命令接着下,不用从头来。

四、选模型:4B是甜点区,7B是分水岭

小鸡场景的选型思路一句话:优先参数效率高的新模型,而不是死磕参数量大的旧模型。2026年这个时间点,4B档位是公认的甜点区——Qwen3、Gemma3这个量级的新一代模型,效果已经能打两三年前的7B,而内存占用少一半,日常问答、写作润色、翻译摘要这类活儿完全胜任,这是"小鸡体验"和"模型智商"的最佳平衡点。7-8B是质量分水岭:复杂推理、多步任务、长上下文理解开始有明显提升,代价是CPU推理速度掉一半、内存门槛翻倍。14B以上在纯CPU小鸡上就不建议了,除非你真的很有耐心。动手拉一个感受下:

ollama pull qwen3:4b
ollama run qwen3:4b

run进去就是交互式对话,中文问两个问题试试手感,/bye退出。常用管理命令记住三件套:ollama list看已装模型和占盘体积,ollama ps看当前有没有模型驻留在内存,ollama rm删模型腾空间。两个进阶参数值得提前知道:一是上下文长度,Ollama默认上下文窗口通常只有2K到4K,长文档任务要调大num_ctx,但每翻一倍,KV缓存内存就涨一截,4B模型配上32K上下文,内存占用可能直接翻倍——内存和上下文之间要自己找平衡点;二是OLLAMA_KEEP_ALIVE控制模型在内存里的驻留时长,默认5分钟没人问就自动卸载,高频使用场景可以调长,省得每轮对话都吃一次冷启动的加载时间。想微调模型性格,写个Modelfile:FROM指定基础模型、SYSTEM里塞人设、PARAMETER调temperature,ollama create打包成自己的专属模型,WebUI里就能直接选到。

五、Open WebUI:给裸API穿上好看的外衣

Ollama自带的是个裸API加命令行界面,自己用还行,给家人朋友用就太原始了——Open WebUI(原Ollama WebUI)是这个生态的事实标准前端:多用户账号体系、Markdown渲染、对话历史、多模型切换、文档知识库(RAG)一应俱全,界面质感直逼商业产品。Docker部署(Compose篇的栈理念继续扩容):

services:
  open-webui:
    image: ghcr.io/open-webui/open-webui:main
    ports:
      - "3000:8080"
    environment:
      - OLLAMA_BASE_URL=http://host.docker.internal:11434
    extra_hosts:
      - "host.docker.internal:host-gateway"
    volumes:
      - ./open-webui:/app/backend/data
    restart: unless-stopped

一个Linux特有的细节要单独说:容器里访问宿主机的Ollama,官方文档写的是host.docker.internal,但这个域名在Windows和macOS的Docker里自带,Linux默认没有——extra_hosts那行host-gateway就是补这个映射的,少这行会收获"连不上Ollama"的经典报错,这是新手部署Open WebUI的第一大坑。起来之后浏览器访问3000端口,第一个注册的账号自动成为管理员。多用户玩法:给家人朋友各开一个账号,每人有独立的对话历史;管理员可以在后台控制谁能用哪个模型——比如只给朋友开4B小模型,把7B的算力留给自己。知识库功能值得单独一提:把产品文档、运维手册、常见问题集传进知识库,聊天时挂载,模型的回答就带着你自己的上下文——一台小鸡跑个4B模型加几份内部文档,一个低配版"企业知识助手"就这么成了,这种玩法在商业API上要么不支持要么按token狠狠收费。

六、反代与安全:让AI随身携带,但别裸奔

想在路上用手机问自己的AI,就得把服务暴露到公网。老规矩(反代篇加HTTPS篇的第N次复用):Nginx反代3000端口,套Let's Encrypt证书,防火墙只放行80和443,其余全关。WebUI的流式输出走WebSocket,反代配置里记得加Upgrade头,不然回答出不来或者卡成整段。安全上必须划三条红线,一条都不能少:第一条,Ollama的API本身没有任何认证机制——11434端口一旦裸奔在公网,等于全世界免费用你的机器跑模型,CPU和流量都是你买单,所以这个端口永远只允许本机和内网访问,外部访问一律走反代加认证的WebUI,这是底线中的底线;第二条,Open WebUI装完第一时间到后台关掉"开放注册",改为管理员审核制,否则你的AI大门向所有扫端口的脚本敞开;第三条,给每个账号设强密码,有条件在反代层再加一道basic auth——AI接口是拿来用的,不是拿来给扫描器白嫖的。

七、OpenAI兼容API:整条流水线都能用上它

Ollama最容易被低估的特性是它的API完全兼容OpenAI格式:生态里所有支持"自定义OpenAI endpoint"的工具都能无缝接上——代码编辑器的AI补全插件、自动化平台、你自己随手写的脚本,把base URL从api.openai.com换成http://127.0.0.1:11434/v1,模型名填qwen3:4b,齐活。curl验证一下:

curl http://127.0.0.1:11434/v1/chat/completions -H "Content-Type: application/json" -d '{"model": "qwen3:4b", "messages": [{"role": "user", "content": "用一句话夸夸小鸡"}]}'

这个特性是私有化LLM的隐藏大头:白天的WebUI是给人用的,晚上的API是给机器用的。举个完整的例子:cron篇的定时任务里塞一条,每晚凌晨四点把当天的Nginx访问日志(GoAccess篇的原料)喂给模型,生成一份"今日流量异动摘要",早上推送到手机——小鸡上的AI就从"能聊天"进化成"会干活"。批量任务记得错峰跑,CPU推理本身就把核吃满了,别和备份篇的凌晨三点流水线撞车,更别和流量检查任务抢带宽。API调用没有并发神功,同一时间基本只能服务一个请求,多任务排队是常态,设计流水线时把这条当作前提。

八、成本账:什么时候真香,什么时候找罪受

最后把账摊开算清楚,避免一半人错过好东西、一半人白折腾。自建的真实成本:一台8G内存VPS的月付,加上一晚上的折腾时间,换来的是无限量调用、数据不出门、七年后还能原样跑;API的真实成本:轻度使用每月几块钱,重度使用每月几十刀起,换来的是顶级模型的智商和GPU级的响应速度。结论分三类人:第一类,重度加隐私敏感(自动化流水线、内部知识库、批量文本处理)——自建真香,账面上就划算,隐私是白送的;第二类,轻度休闲用户——别折腾,官方免费额度或者几块钱的API更省心,机器闲着也是闲着不如跑点别的;第三类,需要顶级模型推理能力的——现阶段CPU小鸡给不了,那是GPU服务器和付费API的地盘,认清边界。私有化LLM的正确心态不是"替代"而是"补位":简单活儿小鸡自己消化,一分钱不花;难题走API,花在刀刃上——两条腿走路,才是2026年个人玩家用AI的最优解。

结语

从Gitea到MinIO再到Healthchecks,本站的自托管栈一路补齐了代码、存储、监控——这篇补上的可能是最有意思的一块:算力。Ollama加Open WebUI的组合,把"在自己服务器上跑AI"的门槛降到了一份docker compose的量级:4B模型管日常问答,7B管认真活儿,OpenAI兼容API喂给自动化流水线,隐私不出门、调用不花钱、半夜跑批量任务也不心疼。今晚花半小时把栈拉起来,明早在手机上和跑在自己小鸡里的AI道一声早安——那种"这玩意儿跑在我自己机器上"的踏实感,试过才知道。


手机扫码阅读

微信或手机浏览器扫一扫,随时随地随心阅读与分享

告警邮件在垃圾箱睡了一整晚?ntfy自建统一推送中心实战,把哪吒、Uptime Kuma、备份任务的通知全收进一个APP

cron半夜悄悄失败了你知道吗?Healthchecks死人开关实战,让静默故障无处藏身

评 论
更换验证码