上周我家这边光纤线路集中改造,物业贴出通知说要断网两天。家里孩子正在追可汗学院的数学进度,另一个在维基百科上查动物冷知识查到停不下来,结果全部断供。这时候我突然想起手头那台闲置的小主机——前一阵我正好把它改造成了一台离线知识服务器,维基百科离线镜像、可汗学院课程包、本地大模型AI问答助手全塞了进去。断网这两天,这台机器成了家里最忙的设备。这篇文章就完整记录一下我当时的搭建思路、具体操作和踩过的坑,给想搞类似家庭基础设施的朋友一个参考。
1. 为什么要折腾一台离线知识服务器
1.1 从一次“断网焦虑”说起
大部分人可能觉得断网两天没什么,刷不了手机而已,但家里有学龄儿童的话情况完全不同。学校布置的开放课题需要查资料,在线课程有固定学习计划,连作业里“请查阅相关资料”这句话都默认你必须有个永不掉线的互联网。问题是,家庭网络环境根本做不到“永不掉线”,运营商割接、雷雨天气、路由器老化,各种情况随时可能让在线依赖全线崩溃。
我不太喜欢把所有学习资料都押在“在线”这一个篮子里。维基百科的内容是开放的,可汗学院的课程是开放的,开源大模型权重也是开放的,这些资源完全可以脱网使用。把它们全部放到一台小主机上,家里就拥有了一套完全自有的本地知识基础设施。孩子查资料、看课程、问AI,都不会被外网状况绑架。
1.2 这台服务器解决的四个核心问题
第一是学习连续性,断网不断课。第二是访问速度,内网访问维基百科镜像基本秒开,不用等外网加载。第三是内容可控,我明确知道这台机器里有什么,孩子在看什么,不用担心广告、推荐流和乱七八糟的跳转页面。第四是隐私,AI问答全部在本地推理,问题不会上传到任何云端。
1.3 适合谁来抄这个作业
如果你的需求是“家里有小孩需要稳定学习资源”“经常出差到网络不好的地方”“学校、机构要建内部知识库”“或者你本来就是个喜欢把数据攥在自己手里的人”,这个方案基本都适合。门槛不高,不需要很强的编程能力,只要会敲几条Linux命令,就能搭起来。唯一需要点耐心的是下载那几个体积不小的离线资源包。
2. 硬件规划与部署架构:先把底子打好
2.1 我的配置清单
离线知识服务器对硬件的要求其实被很多人高估了。维基百科离线包主要是存储需求,可汗学院课程也是存储需求,真正吃性能的只有本地大模型推理。我的搭配是这样的:
| 部件 | 配置 | 用途说明 |
|---|---|---|
| 主机 | 二手迷你小主机(Intel N100,8GB内存) | 整机功耗低,性能够用 |
| 系统盘 | 256GB SATA SSD | 装系统、跑数据库 |
| 数据盘 | 2TB 机械硬盘 | 放zim离线包、课程视频、模型文件 |
| 系统 | Debian 12(无桌面环境) | 稳定、省资源、操作简单 |
N100这颗处理器是四核四线程,性能不算强,但跑Kiwix这种静态内容服务绰绰有余。8GB内存对维基百科和可汗学院来说完全够用,跑中等规模的大模型则有点紧,我后面会讲怎么绕开这个限制。
2.2 为什么不推荐用树莓派干这件事
我也认真考虑过树莓派,最后放弃了。树莓派5的功耗确实更低,但它的瓶颈在外置存储和网络。USB硬盘盒加树莓派的稳定性一般,供电稍微不稳就容易掉盘,而离线知识服务器恰恰需要长时间稳定运行。另外树莓派在价格上已经没有优势,一套带电源带壳子带存储的树莓派,价格已经超过二手N100小主机。相比之下,N100小主机有原生SATA接口,内存可以扩展,性能释放完全不在一个量级。
2.3 系统与服务规划
我选择了极简路线:系统用Debian 12裸装,所有服务直接跑在宿主机上,用systemd管理,没有引入Docker和容器编排。原因很简单,整个项目就四个服务,分别是Kiwix-serve、Kolibri、Ollama和Nginx,用Docker带来的隔离收益有限,反而增加了磁盘占用和运维复杂度。
服务端口规划如下:
| 服务 | 端口 | 作用 |
|---|---|---|
| Nginx | 80 | 导航首页与反向代理 |
| Kiwix-serve | 8080 | 维基百科离线镜像 |
| Kolibri | 8081 | 可汗学院离线学习平台 |
| Ollama | 11434 | 本地大模型推理接口 |
| Open WebUI | 3000 | AI对话网页界面 |
如果后续还想加服务,只要遵守“一个服务一个端口”的约定,维护起来非常清晰。我也保留了Docker,因为Open WebUI刚好有官方镜像,这个后面会提到,但核心知识服务都是裸装。
3. 维基百科离线包:从 zim 文件到局域网全文检索
3.1 zim 文件到底是什么
维基百科离线镜像的核心是zim文件,这是Kiwix项目维护的一种开放归档格式,相当于把整个网站的页面、图片、样式全部打包进一个单文件里,同时还内建了搜索索引。Kiwix-serve就是一个能把zim文件直接以网站形式提供出去的轻量服务器。
你不需要理解太深的原理,只需知道两件事:拿到对应语言的zim文件,再用Kiwix-serve打开它,维基百科就在你的局域网里复活了。
3.2 下载哪个语言包、选哪个版本
根据自己的使用人群来选。我主要服务中文内容,下载的是中文维基百科的完整包,不包含图片的精简版体积小很多,但我还是选择了带图片的版本,因为孩子查动物、植物、地理类词条时图片非常重要。中文维基的完整zim包体积在20GB左右,英文完整包更大,动不动上百GB,如果机器磁盘紧张,建议先从中英双语的精简版开始。
下载时建议用命令行直接拉,支持断点续传,浏览器下载大文件一旦中断就得重头再来,太痛苦了。下载命令大概是这样的:
# 先给ziw文件建个目录 mkdir -p /srv/library/zim cd /srv/library/zim # 注意替换成实际最新的文件地址 wget -c https://download.kiwix.org/zim/wikipedia/wikipedia_zh_all_maxi.zim-c参数表示支持断点续传,如果下载中途断了,重新执行同一命令可以接着继续下。
3.3 安装并配置 Kiwix-serve
Kiwix-tools提供了kiwix-serve、kiwix-manage等命令行工具,官网有预编译的二进制包。解压后扔到/opt,再做个软链接到系统目录即可:
cd /opt wget -c https://download.kiwix.org/release/kiwix-tools/kiwix-tools_linux-x86_64.tar.gz tar -xvzf kiwix-tools_linux-x86_64.tar.gz mv kiwix-tools_linux-x86_64 /opt/kiwix-tools ln -s /opt/kiwix-tools/kiwix-serve /usr/local/bin/kiwix-serve ln -s /opt/kiwix-tools/kiwix-manage /usr/local/bin/kiwix-manage然后用kiwix-manage维护一个图库文件,把zim文件添加到库里:
kiwix-manage /srv/library/library.xml add /srv/library/zim/wikipedia_zh_all_maxi.zim启动服务:
kiwix-serve --port=8080 --library=/srv/library/library.xml现在打开浏览器访问http://服务器IP:8080,就能看到维基百科的离线首页。为了让它开机自动运行,我写了一个systemd服务:
[Unit] Description=Kiwix Server After=network.target [Service] ExecStart=/usr/local/bin/kiwix-serve --port=8080 --library=/srv/library/library.xml Restart=always User=www-data Group=www-data [Install] WantedBy=multi-user.target保存到/etc/systemd/system/kiwix.service,执行:
systemctl daemon-reload systemctl enable --now kiwix3.4 文本检索体验与中文分词的取舍
Kiwix内建的搜索对英文支持很理想,中文稍弱一些,部分长尾关键词的全文检索结果不如在线版精准。实际使用中我发现,对于常见词条问题不大,但如果搜索太口语化的表述,匹配度会下降。所以我在导航页上专门加了一句话提示:“查资料请尽量使用词条名搜索”,这样家里的使用体验基本不受影响。
如果之后下载了更多zim文件,比如维基文库、维基词典,用同一个library.xml统一管理非常方便,这也是我坚持用库文件而非直接指定单文件启动的原因。
4. 可汗学院离线版:把孩子能看的课装进家里
4.1 方案选型:Kiwix的KA包还是Kolibri
可汗学院离线化有两个主流路线。一个是用Kiwix下载可汗学院的zim文件,优点是和维基百科用同一套体系,部署简单。但缺点是它主要把视频和配套文本打包成静态内容,练习题、进度追踪这些互动功能基本没有。另一个是用Learning Equality团队开发的Kolibri平台,这是一个专门面向离线教学场景的学习管理系统,可以直接导入可汗学院的内容渠道,并且保留练习、测验、学习记录等功能。
我在实际部署时两边都试过,最终选择了Kolibri作为主力。原因很简单:孩子看课不是看完就算,课后练习和进度反馈对学习效果影响很大。Kiwix的可汗学院包适合只当视频库用,而Kolibri更像真正的“离线版可汗学院”。
4.2 安装Kolibri并导入可汗学院课程
Kolibri的安装比Kiwix简单,它提供了Python包和Debian安装包两种方式。我用了pip方式:
apt install python3-pip pip3 install kolibri kolibri manage setup首次启动时它会创建一个管理员账号,然后启动服务:
kolibri start浏览器访问http://服务器IP:8081,进入管理后台,在“内容”部分找到渠道库,搜索可汗学院的官方渠道,勾选需要的课程资源进行导入。这一步需要服务器能联网,因为要下载课程元数据和视频。导入完成后Kolibri就把内容存在本地,之后的观看、练习、测验可以完全离线进行。
4.3 可汗学院导入的视频存储量与选择策略
可汗学院的数学课从小学到高中全量导入体积非常大,我建议按需导入。我只导入了孩子当前年级的数学课,以及小学科学、编程入门两类课程,总存储量在30GB左右,比全量导入少了一大截。Kolibri支持按课程结构选择导入,不用打包全收。之后年级升高了,再回到渠道库增量导入即可。
4.4 学习进度追踪带来管理便利
Kolibri会记录每个用户的学习时长、完成率、测验成绩,我在管理后台能看到孩子每天实际学了哪些内容、卡在哪一课时。这一点比直接用视频网站或静态离线包好太多。像我家老大喜欢“假装在听课”,后台的进度数据能直接拆穿,不用我坐在旁边盯梢。
5. 本地AI助手:把大模型塞进去之后还能做什么
5.1 为什么离线场景下也要有AI助手
既然维基百科离线包已经能查资料了,为什么还需要一个本地AI助手?道理很简单:查资料解决的是“找出信息”,而AI助手解决的是“理解信息和整理信息”。孩子查到一个词条后,经常需要把文字整理成自己的话,这时候让AI帮忙概括、解释、出几道练习题,都比单纯浏览词条高效得多。更关键的是,所有对话都在本地完成,问题内容不会离开这台机器。
5.2 模型与推理框架选型
本地大模型推理框架我选了Ollama,理由就是省心,一条命令装好,一条命令拉模型,自带API接口。模型选型上,中文场景我推荐Qwen系列,阿里出的通义千问开源模型对中文理解明显比同尺寸的国外模型更好。
我在这台8GB内存的N100主机上实测了一圈,最后留下两个模型:
| 模型 | 体积 | 速度体验 | 适用场景 |
|---|---|---|---|
| qwen2.5:3b | 约2GB | 较快,可日常对话 | 基础问答、作文润色 |
| qwen2.5:7b | 约4.7GB | 明显慢,有等待感 | 复杂推理、长文本整理 |
安装过程非常直接:
curl -fsSL https://ollama.com/install.sh | sh ollama pull qwen2.5:3b ollama pull qwen2.5:7b实测下来,7B模型在这颗低功耗CPU上生成速度只有每秒几个token,一句话要等好几秒甚至十几秒。如果是大人用,等待可以接受,但小孩子没耐心等。所以我把3B模型设为默认,7B留给真正需要深度回答的场景。如果你的机器内存有16GB以上,跑7B会从容很多。
5.3 给AI助手配个网页聊天界面
Ollama默认只有命令行接口,家人用起来肯定不现实。我直接跑了Open WebUI这个开源项目,它会提供一个类似ChatGPT的网页界面,支持多用户、对话历史、参数调整。我最终用Docker部署它,因为官方镜像一条命令就能拉起来:
docker run -d -p 3000:8080 \ --add-host=host.docker.internal:host-gateway \ -e OLLAMA_BASE_URL=http://host.docker.internal:11434 \ -v open-webui:/app/backend/data \ --name open-webui \ --restart always \ ghcr.io/open-webui/open-webui:main访问http://服务器IP:3000,注册一个管理员账号,在设置里把Ollama地址指向本机,就能看到已下载的模型列表,点选模型直接开聊。
5.4 和维基百科检索串起来的实用玩法
纯对话问答有时候会一本正经地胡说八道,我就再补了一步:先在Kiwix里搜索维基词条,把词条内容复制给AI,要求它基于这段资料回答问题。这种“本地知识库加本地大模型”的组合比让模型单靠记忆生成回答靠谱得多。实测下来,孩子在写自然科普类小作文时,先查维基词条再到AI助手那里加工,整个流程很顺,也没有出过明显的事实性错误。
6. 全屋访问与日常维护:脱离互联网后的真实使用体验
6.1 固定IP与导航首页
为了让全家人不用记一串端口号,我在路由器里给服务器分配了固定IP192.168.1.10,然后用Nginx挂了一个简单的静态导航首页,把所有服务入口集中放在一起:
server { listen 80; server_name 192.168.1.10; root /srv/www/portal; index index.html; }首页上放了三个大按钮:维基百科、可汗学院、AI助手,孩子自己打开浏览器就能找到入口。这个设计很朴素,但家里用起来几乎没有学习成本。
6.2 手机、平板、笔记本和电视的访问方式
只要是同一局域网内的设备,浏览器直接输IP就能访问。我在手机上把导航页面加到了桌面,点开就是知识库,不需要任何额外App。电视投屏这块,电视盒子上装个浏览器也能访问,不过用遥控器输入IP地址比较难受,我实际用得不多,主力还是平板加触屏。
6.3 功耗与长期开机成本
N100小主机整机待机功耗大约10瓦左右,满载能到25瓦左右。按一天24小时开机来算,一天耗电约0.24到0.6度。按居民电价计算,一个月电费大概在几块钱到十几块钱之间,完全能接受。这也是我敢长期不关机的原因之一。温度方面,我在机箱上加了个小直径静音风扇,夏天最热的时候CPU温度也稳定在五十多度,没出过问题。
6.4 备份与更新策略
维基百科的zim文件并不是自动更新的,我设置了每半年去Kiwix官网看一下有没有新版本。更新流程是:先停掉Kiwix服务,下载新文件,然后用kiwix-manage把新版加入库再删除旧条目,最后重启服务。可汗学院的Kolibri更新则是登录管理后台,在内容渠道里点增量更新,它会自动同步新增课时和修正内容。Ollama的模型更新更简单,重新执行一次ollama pull即可。
6.5 远程访问与安全边界
我的使用场景就是家庭局域网,所以没有把任何端口暴露到公网。如果出门在外需要访问,优先考虑用成熟的反向代理方案并加上身份认证,但设置起来复杂度不低,而且会引入更多维护工作。以这台机器的定位,留在局域网内反而更安全,这也是“离线知识服务器”最朴素也最稳妥的边界。
7. 踩坑记录:我在这台机器上交过的学费
7.1 大文件下载中断,差点让我重下40GB
第一次下载维基百科超大量级文件时,我用浏览器直接下,下到百分之八十,家里路由器重启了一次,下载直接失败,浏览器给的临时文件还没法续传,只能重头再来。血泪教训后我才改用wget -c,这个参数在文件下载中断后重新执行命令就能接着下载。后来又遇到几次断网,都没再浪费过时间。
7.2 8GB内存跑7B大模型触发OOM
刚把Ollama和qwen2.5:7b装好后,启动模型立刻遇到进程被杀,查日志发现是内存不足。这台机器只有8GB内存,7B模型加载量化版本后占用内存接近5GB,加上系统和其他服务,内存就爆了。解决方法是先加了8GB的交换分区,把7B模型放在“偶尔用”的角色上,平时主力用3B模型。加完swap之后7B能跑,但会更慢,所以我建议有条件还是直接上16GB内存。
7.3 服务没有开机自启,断电后全家“失联”
最开始Kiwix和Kolibri都是手动启动的,结果家里跳闸一次,来电后只有路由器恢复工作了,知识服务器死在那里,三个服务一个都没起来。后来我把所有服务都写成了systemd单元,Restart=always加上WantedBy=multi-user.target,再顺手验证了几次重启,之后就再也没操过这个心。
7.4 Kolibri数据库在断电后损坏
有一次在Kolibri导入课程时直接断电,重启后Kolibri一直报数据库错误,查了一圈发现是SQLite数据库没有干净关闭导致的。修复方式倒不算难,用Kolibri自带的数据库恢复命令能导回大部分数据,但导入到一半的课程需要重新导入。这个坑让我意识到,折腾这类长时间写入的任务,最好还是配一个在线式UPS或者至少提前保存快照。
7.5 别忽视中文搜索体验差异
最后说一个不算坑但容易误判的点。Kiwix的中文全文检索和在线版维基百科相比,对长句和口语化表达的处理有明显差距,有时候孩子输入“世界上最大的动物是什么”,搜索结果反而不如直接输入“蓝鲸”来得准确。后来我在导航页面的使用提示里写了“查词条优先输入词条名”,家里人的体验立刻就上去了。这不是bug,是离线索引方案本身的性质决定的,大家使用前要有心理预期。