30 分钟完成 WeKnora 本地部署:单机 Docker + Ollama 跑私有 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
WeKnora 是一个把文档变成可检索 RAG 知识库、再配自主问答智能体的开源 LLM 知识平台;本文只用 Docker 和 Ollama 带你完整走完 WeKnora 本地部署,让内网机器断开外网后照样解析文档、照样问答。
这套方案适合谁
先对号入座,命中任意一条就往下看:
- 机器连不上外网:内网、机房环境,云端 API 根本调不通,WeKnora 本地部署后解析、检索、推理链路全在机器上跑;
- 文档敏感不能出机器:金融、政务、医疗场景,离线部署后文件只落在自己的磁盘上;
- 想在自己的硬件上吃透整条 RAG 链路:学习或小团队试点,单机 Docker 就够,不用上 Kubernetes。
反例:如果只是个人尝鲜、不需要多空间协作,直接看零依赖的 Lite 版本,更轻,见 docs/LITE.md。
动手前先备好
| 项 | 要求 | 为什么 |
|---|---|---|
| 软件 | Docker ≥20.10、Docker Compose v2、Git | Ollama 不必预装,启动脚本会自动装 |
| 硬件 | 8 核 CPU、32GB 内存起步 | 7B 对话模型推理吃内存,至少留 16GB 可用内存,否则模型加载时会 OOM |
| 磁盘 | 预留 200GB | 镜像、模型、文档解析产物都会往盘上写 |
| 网络 | 首次拉镜像和拉模型必须联网 | 见下方警告 |
⚠️网络窗口是离线部署最大的坑:正确姿势是"一台联网机器下载好全部镜像与模型,docker save 打包拷到目标机 load",再开始部署;在目标机上现拉只会一直失败。
实操
第 1 步:拿到 WeKnora 本地部署的代码
一次性取代码并初始化配置,整个部署只有一个配置入口 .env,模板里每一项都带注释,照着填就行。
git clone https://gitcode.com/GitHub_Trending/we/WeKnora cd WeKnora cp .env.example .env成功信号:根目录ls能看到 .env 与 .env.example 两个文件并存。
第 2 步:填好 .env 里的四个关键变量
只改四处,其余保持默认。
grep -E "STORAGE_TYPE|OLLAMA_BASE_URL|DB_PASSWORD|SYSTEM_AES_KEY" .envSTORAGE_TYPE保持 local,文件直接存容器挂载的本地目录,不引入对象存储;OLLAMA_BASE_URL保持默认http://host.docker.internal:11434,别改成 localhost——容器里的 localhost 指向容器自己,只有 host.docker.internal 才通宿主机;DB_PASSWORD、SYSTEM_AES_KEY换成自己生成的值,后者是加密数据库敏感字段的 32 字节 AES 密钥,丢了已加密数据就无法恢复。
成功信号:上面四行全部有值,且你改过的 SYSTEM_AES_KEY 恰好 32 字节。
第 3 步:一条命令拉起集群
脚本会先确认 Ollama、检查 .env 是否齐全,再用 compose 拉起前端、app、postgres、docreader、redis 这批容器,相当于把 Docker 快速上手的检查清单自动化了。
./scripts/start_all.sh --no-pull--no-pull表示不联网拉镜像、只用本地已 load 的镜像,这是离线部署的关键开关;第一次在有网机器上部署就去掉这个参数。
成功信号:脚本末尾打印出"前端界面: http://localhost"和"API接口: http://localhost:8080",随后执行:
docker compose ps curl -f http://localhost:8080/healthps里 WeKnora-app、WeKnora-postgres、WeKnora-docreader 等全部 Up,curl 返回 HTTP 200、响应体{"status":"ok"}✅
第 4 步:Ollama 搭配装入两个模型
对话和嵌入各要一个。
ollama pull bge-m3 ollama pull qwen2.5:7b离线环境下这两条命令在联网机器执行,导出模型文件拷过去再导入。
成功信号:ollama list能看到这两个模型;缺模型时 app 只会告警、不会崩,但问答功能暂时用不了。
排障速查
| 现象 | 原因 | 动作 |
|---|---|---|
| app 日志持续告警 Ollama 连不上,问答功能不可用 | OLLAMA_BASE_URL 写了 localhost,或 Ollama 服务没在跑 | 确认宿主机 Ollama 存活后,把 .env 改成 http://host.docker.internal:11434 再重启 app |
| 启动时报找不到镜像 | 离线机没有 load 过镜像 | 联网机 docker save、目标机 docker load,再跑一次启动命令 |
| 上传文档被直接拒绝 | 单文件超过 MAX_FILE_SIZE_MB(默认 50MB) | 调大 .env 里该变量,或把文档拆分 |
| 问答太慢 | 无 GPU 时推理全压在 CPU 上 | 换更小的对话模型,或调小 BATCH_EMBED_SIZE 换内存 |
之后值得调的参数
三个地方最值得动:对话模型规格(选 Ollama 上能稳定跑通的最小尺寸)、.env.example 里的BATCH_EMBED_SIZE(嵌入批次,越小越省内存)、config/config.yaml 里的embedding_top_k与rerank_top_k(召回数量,该文件直接挂载进 app 容器,改完重启即生效,不用重建镜像)。
跑通之后
文档解析、向量检索、模型推理全部在本机完成、数据不出机器,这就是 WeKnora 本地部署的终点。
两个下一步动作:给数据卷挂独立磁盘并定期备份;把 Ollama 指向内网里显存最大的那台机器,做模型负载分担。
想深入就翻这几份仓库内材料:
- 启动与运维脚本:scripts/start_all.sh
- 配置模板:.env.example
- 常见问题与运维:docs/QA.md
- 分块与解析细节:docs/CHUNKING.md
【免费下载链接】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),仅供参考