WeKnora 本地化部署:30 分钟在离线服务器上跑通 RAG 知识库问答
【免费下载链接】WeKnoraOpen-source LLM knowledge platform: turn raw documents into a queryable RAG, an autonomous reasoning agent, and a self-maintaining Wiki.项目地址: https://gitcode.com/GitHub_Trending/we/WeKnora
内网服务器上搭文档问答系统,最常见的卡壳不是代码,而是模型调用全部失败:.env 填完,容器起来了,一问答就报"连不上 Ollama"。WeKnora 是一个开源 LLM 知识平台,把 PDF、Word 变成可检索的 RAG 知识库,配一个能自主推理的问答 Agent。这篇带你把 WeKnora 本地化部署完整跑通,拔网线也照跑。
先做个决定
动手前花 30 秒回答三件事:
- 文档能不能出机器?涉密文档走第三方 API 过不了合规——不能出,才需要私有化部署;
- 要不要多人共享空间?标准版带多空间协作,只给一个人用的话,先去看单应用、零依赖、无需注册的 Lite 版本,见 docs/LITE.md;
- 机器够不够吃?8 核 CPU + 32GB 内存起步,7B 模型推理时内存是主要瓶颈。
三条都不命中的话,停在这最省事——继续往下,说明你就是那台必须自己扛推理的服务器。
上图是标准版的完整容器化组成:文档解析、混合检索、向量存储、本地模型服务各占一栏,你要跑的就是中间那几组容器。
动手前清点物料
| 条件 | 要求 | 说明 |
|---|---|---|
| 软件 | Docker ≥ 20.10 + Compose v2 + Git | Ollama 不用提前装,启动脚本会自动处理 |
| 硬件 | 8 核 CPU + 32GB 内存 | 跑 7B 对话模型建议留 16GB 以上空闲 |
| 磁盘 | 预留 200GB | 镜像、模型权重、解析产物都往盘上写 |
| 网络 | 首次拉镜像和拉模型必须联网 | 无其他要求 |
⚠️ 无网机器的正确做法:找一台联网机器拉好全部镜像和模型,docker save/ 模型导出打包拷过去再导入;不要在目标机上现拉。
把代码和配置模板拉下来
git clone https://gitcode.com/GitHub_Trending/we/WeKnora cd WeKnora cp .env.example .env整个部署只有一个配置入口,就是.env:数据库密码、存储类型、Ollama 地址都在这一个文件里,模板每项都带注释。先跑一次./scripts/start_all.sh -c做环境自检,它能替你检查 Docker、Compose、磁盘和内存,缺什么一目了然,见 scripts/start_all.sh。
做对了的标志:ls .env能看到新文件,自检命令打印"环境检查完成"。
改 .env 里的三处必改项
打开.env,其余保持默认,只盯这三处:
STORAGE_TYPE保持默认local,文件直接落容器挂载的本地目录,不引入对象存储;OLLAMA_BASE_URL单机部署写默认值http://host.docker.internal:11434即可——容器内用localhost指向的是容器自己,必须用host.docker.internal才能找到宿主机上的 Ollama;DB_PASSWORD、REDIS_PASSWORD、SYSTEM_AES_KEY换成自己生成的值,模板里的示例值别沿用。
想调解析和检索行为时,直接改config/config.yaml,见 config/config.yaml;它会挂进 app 容器,改完重启容器生效,不用重建镜像。
做对了的标志:三个密钥不再是示例值,.env能保存无告警。
给 Ollama 备好两个模型
RAG 问答要两个模型:一个嵌入模型把文档变成向量,一个对话模型负责推理。
ollama pull bge-m3 ollama pull qwen2.5:7b第一个是嵌入模型,第二个是对话模型,换成你已有的模型名也行。
ollama list做对了的标志:列表里能看到这两个模型。
⚠️ 离线机器:这两步在联网机器上做,模型导出后拷到目标机导入;模型没就位 app 只告警不崩,但问答功能暂时用不了。
一条命令把服务拉起来
./scripts/start_all.sh --no-pull脚本会先确认 Ollama 在跑、检查.env是否齐全,再用 Compose 拉起前端、app、postgres、docreader、redis 这批容器。--no-pull表示跳过联网拉镜像、直接用本地已有的——离线部署的关键开关;第一次在有网机器上装就去掉这个参数。
🚀做对了的标志:终端打印"前端界面: http://localhost"和"API接口: http://localhost:8080",然后开始滚动容器日志。
一条链路验到底
从浏览器入口到带引用的回答,5 项全过才算跑通:
| # | 检查项 | 怎么做 | 通过标准 |
|---|---|---|---|
| 1 | 容器状态 | docker compose ps | 全部 Up,重点看 WeKnora-app、WeKnora-postgres、WeKnora-docreader |
| 2 | 后端健康 | curl -f http://localhost:8080/health | 返回 200 |
| 3 | Web 界面 | 浏览器打开http://localhost | 出现注册页,注册并登录第一个账号 |
| 4 | 文档入库 | 新建知识库,上传一份 PDF | 解析状态变为完成 |
| 5 | 问答带引用 | 问一句"这份文档主要讲什么" | 回答下方带引用出处 |
翻车自救手册
| 现象 | 根因 | 处理 |
|---|---|---|
| app 反复重启,日志刷 Ollama 连不上 | 容器里localhost指向的是容器自己,不是宿主机 | 宿主机执行curl http://localhost:11434/api/tags确认 Ollama 活着,再把.env的OLLAMA_BASE_URL改回host.docker.internal |
| 文档上传直接被拒 | 超过MAX_FILE_SIZE_MB默认上限 50MB | 在.env调大该值并重启 app 与 frontend |
| 上传成功但解析失败 | 格式不受支持或解析服务异常 | 看docker compose logs docreader,报错会指明具体格式 |
| 问答响应慢 | 无 GPU 时推理全压在 CPU 上 | 换更小的对话模型,或把BATCH_EMBED_SIZE调小省内存 |
更多故障排查见 docs/QA.md。
到这里,文档解析、向量检索、模型推理全落在本机,数据不出机器。下一步做两件具体的事:给数据卷挂独立磁盘并配定期备份;把OLLAMA_BASE_URL指到内网显存最大的那台机器,分担推理压力。
【免费下载链接】WeKnoraOpen-source LLM knowledge platform: turn raw documents into a queryable RAG, an autonomous reasoning agent, and a self-maintaining Wiki.项目地址: https://gitcode.com/GitHub_Trending/we/WeKnora
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考