离线知识服务器搭建指南:断网也能看维基百科和可汗学院
上周我家这边光纤线路集中改造物业贴出通知说要断网两天。家里孩子正在追可汗学院的数学进度另一个在维基百科上查动物冷知识查到停不下来结果全部断供。这时候我突然想起手头那台闲置的小主机——前一阵我正好把它改造成了一台离线知识服务器维基百科离线镜像、可汗学院课程包、本地大模型AI问答助手全塞了进去。断网这两天这台机器成了家里最忙的设备。这篇文章就完整记录一下我当时的搭建思路、具体操作和踩过的坑给想搞类似家庭基础设施的朋友一个参考。1. 为什么要折腾一台离线知识服务器1.1 从一次“断网焦虑”说起大部分人可能觉得断网两天没什么刷不了手机而已但家里有学龄儿童的话情况完全不同。学校布置的开放课题需要查资料在线课程有固定学习计划连作业里“请查阅相关资料”这句话都默认你必须有个永不掉线的互联网。问题是家庭网络环境根本做不到“永不掉线”运营商割接、雷雨天气、路由器老化各种情况随时可能让在线依赖全线崩溃。我不太喜欢把所有学习资料都押在“在线”这一个篮子里。维基百科的内容是开放的可汗学院的课程是开放的开源大模型权重也是开放的这些资源完全可以脱网使用。把它们全部放到一台小主机上家里就拥有了一套完全自有的本地知识基础设施。孩子查资料、看课程、问AI都不会被外网状况绑架。1.2 这台服务器解决的四个核心问题第一是学习连续性断网不断课。第二是访问速度内网访问维基百科镜像基本秒开不用等外网加载。第三是内容可控我明确知道这台机器里有什么孩子在看什么不用担心广告、推荐流和乱七八糟的跳转页面。第四是隐私AI问答全部在本地推理问题不会上传到任何云端。1.3 适合谁来抄这个作业如果你的需求是“家里有小孩需要稳定学习资源”“经常出差到网络不好的地方”“学校、机构要建内部知识库”“或者你本来就是个喜欢把数据攥在自己手里的人”这个方案基本都适合。门槛不高不需要很强的编程能力只要会敲几条Linux命令就能搭起来。唯一需要点耐心的是下载那几个体积不小的离线资源包。2. 硬件规划与部署架构先把底子打好2.1 我的配置清单离线知识服务器对硬件的要求其实被很多人高估了。维基百科离线包主要是存储需求可汗学院课程也是存储需求真正吃性能的只有本地大模型推理。我的搭配是这样的部件配置用途说明主机二手迷你小主机Intel N1008GB内存整机功耗低性能够用系统盘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带来的隔离收益有限反而增加了磁盘占用和运维复杂度。服务端口规划如下服务端口作用Nginx80导航首页与反向代理Kiwix-serve8080维基百科离线镜像Kolibri8081可汗学院离线学习平台Ollama11434本地大模型推理接口Open WebUI3000AI对话网页界面如果后续还想加服务只要遵守“一个服务一个端口”的约定维护起来非常清晰。我也保留了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-serveKiwix-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 --port8080 --library/srv/library/library.xml现在打开浏览器访问http://服务器IP:8080就能看到维基百科的离线首页。为了让它开机自动运行我写了一个systemd服务[Unit] DescriptionKiwix Server Afternetwork.target [Service] ExecStart/usr/local/bin/kiwix-serve --port8080 --library/srv/library/library.xml Restartalways Userwww-data Groupwww-data [Install] WantedBymulti-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-hosthost.docker.internal:host-gateway \ -e OLLAMA_BASE_URLhttp://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单元Restartalways加上WantedBymulti-user.target再顺手验证了几次重启之后就再也没操过这个心。7.4 Kolibri数据库在断电后损坏有一次在Kolibri导入课程时直接断电重启后Kolibri一直报数据库错误查了一圈发现是SQLite数据库没有干净关闭导致的。修复方式倒不算难用Kolibri自带的数据库恢复命令能导回大部分数据但导入到一半的课程需要重新导入。这个坑让我意识到折腾这类长时间写入的任务最好还是配一个在线式UPS或者至少提前保存快照。7.5 别忽视中文搜索体验差异最后说一个不算坑但容易误判的点。Kiwix的中文全文检索和在线版维基百科相比对长句和口语化表达的处理有明显差距有时候孩子输入“世界上最大的动物是什么”搜索结果反而不如直接输入“蓝鲸”来得准确。后来我在导航页面的使用提示里写了“查词条优先输入词条名”家里人的体验立刻就上去了。这不是bug是离线索引方案本身的性质决定的大家使用前要有心理预期。