WeKnora 本地部署实战单机 Docker Ollama 搭一套零云端依赖的私有问答系统【免费下载链接】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部署完成后的日常是这样的往知识库里丢一份 PDF等解析跑完问一句话拿回一个带引用出处的回答——全程没碰过外网。这篇就是 WeKnora 本地部署的实操记录面向内网机器、无网机房、数据不能出机器的场景文档解析、向量检索、模型推理全部落在本机。如果你是个人尝鲜、不需要多空间协作建议直接看更轻的单应用版本 docs/LITE.md这篇对你不适用。先拆开系统五个容器和宿主机上的 Ollama动手前先把图想清楚排障时才不会晕。docker compose 拉起来的东西其实是五个容器frontend 出网页界面app 是 Go 主程序业务逻辑、检索、模型调用都在它身上postgres 存结构化数据docreader 专门解析文档redis 承担任务队列和流式处理。唯一的模型服务 Ollama 被刻意放在宿主机上而不是容器里模型权重动辄几个 GB 甚至几十个 GB塞进镜像是浪费推理又重度吃内存和 GPU放宿主机上调度资源才方便。所以 app 是通过http://host.docker.internal:11434这个地址跨出容器去连 Ollama 的后面排障时会再提到它。配置上只有一个入口.env从 .env.example 复制生成数据库密码、存储类型、Ollama 地址、各种限制值全在这一个文件里。另外 config/config.yaml 是直接挂载进 app 容器的想微调解析和检索行为改完重启就行不用重建镜像。分工记牢下面都是执行动作。离线准备联网机下载再拷过去最终部署的机器可以完全无网但镜像和模型必须提前备齐正确姿势是在一台联网机上把东西下全、打包、拷过去。硬件上8 核 CPU 加 32GB 内存比较舒服7B 对话模型推理主要吃内存建议留 16GB 以上可用内存磁盘预留 200GB镜像、模型权重和文档解析产物都会持续写盘。软件上只需要 Docker 20.10 及以上、Docker Compose v2 和 GitOllama 不必提前装启动脚本会处理。联网机上真正要备的是两样东西镜像先在联网机上把镜像全部拉下来用docker save打包成文件拷到目标机再docker load目标机上就是全量本地镜像模型把下面两个模型 pull 下来后导出成模型文件拷过去再导入。跳过这步直接去目标机上现拉镜像是内网部署翻车的第一大原因没有之一。启动服务加载模型改 .env 之前先拿到代码git clone https://gitcode.com/GitHub_Trending/we/WeKnora cd WeKnora cp .env.example .env打开 .env需要动的只有几处其余保持默认别动。STORAGE_TYPE保持local文件直接落在容器挂载的本地目录单机部署没必要引入对象存储OLLAMA_BASE_URL保持默认值http://host.docker.internal:11434容器就靠它找到宿主机的 Ollama。DB_PASSWORD、REDIS_PASSWORD、SYSTEM_AES_KEY三个换成自己生成的值——内网部署也别沿用模板里的示例值AES 密钥参与字段加密泄露了旧数据就解不开了。一条命令把容器拉起来动手前可以先跑./scripts/start_all.sh -c做一次环境自检没问题就正式启动./scripts/start_all.sh --no-pull这个脚本会先确认 Ollama 活着、.env 必填项齐全再用 compose 把 frontend、app、postgres、docreader、redis 一批拉起来。--no-pull告诉 compose 不要联网拉镜像、只用本地已有的它就是离线部署的关键开关第一次在有网机器上部署的话去掉这个参数即可。脚本末尾打印出前端界面: http://localhost和API接口: http://localhost:8080集群就算活了。启动、停止、环境检查的逻辑都在 scripts/start_all.sh 里想动参数去那儿看。两个模型各备一个ollama pull bge-m3 ollama pull qwen2.5:7bbge-m3 是嵌入模型负责把文本变成向量存进索引qwen2.5:7b 是对话模型换成你手里已有的模型名也行。模型没就位时 app 只告警不崩溃但问答暂时用不了所以建议这一步一次做完。自检与排障按遇到问题的顺序走验收按这条链路走一遍。先docker compose ps确认所有容器 Up重点看 WeKnora-app、WeKnora-postgres、WeKnora-docreader再在终端执行curl -f http://localhost:8080/health返回 200 说明后端健康检查通过。浏览器打开 http://localhost默认开放注册注册并登录第一个账号。然后新建知识库、上传一份 PDF等解析状态变完成在问答页问一句这份文档主要讲什么——回答里带引用出处整条链路就全通了。后面这三类问题会按出现的先后顺序碰到对号入座就行。容器反复重启、日志里全是 Ollama 连不上先在宿主机curl http://localhost:11434/api/tags确认 Ollama 本身活着再核对 .env 里的OLLAMA_BASE_URL——容器里写localhost指的是容器自己必须写host.docker.internal这是全篇最容易错的一个点。文档传不上去单文件上限默认 50MBMAX_FILE_SIZE_MB超限直接被拒没超限就看docker compose logs docreader解析器会报具体哪种格式不支持。问答太慢没有 GPU 时推理全压在 CPU 上换更小的对话模型或把BATCH_EMBED_SIZE调小换内存通常比换硬件见效快。想再压性能优先动三处对话模型规格、嵌入批次大小、知识库 top_k 召回数量前两处在 .envtop_k 在 config/config.yaml。数据不出机器是这套部署最后的承诺也是它存在的理由。之后想调启动和停止的行为去 scripts/start_all.sh分块与解析的细节看 docs/CHUNKING.md日常运维问题查 docs/QA.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),仅供参考