WeKnora 本地化部署完整指南:4 步跑通 Docker + Ollama 的离线文档问答

WeKnora 本地化部署完整指南:4 步跑通 Docker + Ollama 的离线文档问答 WeKnora 本地化部署完整指南4 步跑通 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/WeKnoraWeKnora 是一个开源 LLM 知识平台把 PDF、Word 这类原始文档变成可检索的 RAG 知识库配上能自主推理的问答 Agent还能自动维护一份 Wiki。本文面向内网机器、涉密数据、或者单纯想吃透 RAG 链路的新手带你完成一次 WeKnora 本地化部署全程只依赖 Docker 和 Ollama不碰任何云端 API。做完之后你手里多一套完整系统文档解析、向量检索、模型推理全部落在本机磁盘上拔网线也能继续问答。动手前先看地图一套部署里到底有谁别急着敲命令先搞清楚这套东西由谁组成。核心链路一共 6 个角色前 5 个跑在容器里最后一个跑在宿主机上组件容器名 / 位置负责什么前端WeKnora-frontend宿主机80端口界面入口nginx 把/api反代给 app应用主服务WeKnora-app宿主机8080端口业务逻辑、检索编排、/health健康检查文档解析WeKnora-docreader内网 50051 (gRPC)把 PDF/Word 等拆成 chunk 和图片只被 app 调用数据库WeKnora-postgres (ParadeDB pg17)业务数据 向量存储一体RETRIEVE_DRIVERpostgres时向量直接落在它里面队列与流WeKnora-redis6379Asynq 任务队列、流式输出中转模型服务宿主机 Ollama11434端口提供嵌入模型和对话模型不占容器记住一条数据流你上传的文件 → app 转给 docreader 解析 → 向量写入 postgres → 提问时 app 从 postgres 召回 → 交给 Ollama 生成带引用的回答。哪一环断了问题就出在哪一环排障时按这条链子查。过一遍这张清单再开机全部满足再动手缺任何一条都会在半路卡住软件Docker ≥20.10 Compose v2 Git。Ollama 不要求预装启动脚本会按系统自动装Linux 走官方脚本macOS 走 brew但离线机器必须提前装好。硬件8 核 CPU 32GB 内存起步跑 7B 对话模型请保证 16GB 以上可用内存推理基本全吃内存。磁盘预留 200GB镜像、模型权重、解析产物都会写盘。⚠️离线环境的坑拉镜像、拉模型这两件事必须联网。正确姿势是在一台能上网的机器上docker pull后docker save打包、ollama pull两个模型后导出全部拷到目标机再部署不要在断网的目标机上现拉。动手前先跑一次自检把 Docker、Ollama、磁盘、内存、沙箱镜像状态一次看全./scripts/start_all.sh -c它只做检查不做启动输出里有环境检查完成就可以往下走。四个动作把整套服务拉起来第 1 步拿代码生成 .envgit clone https://gitcode.com/GitHub_Trending/we/WeKnora cd WeKnora cp .env.example .env整个部署只有一个配置入口数据库密码、存储类型、Ollama 地址全在.env里。之所以先复制模板而不是手写是因为模板里每个键都带注释.env.example 共 760 多行按注释填就行。成功标志项目根目录多了一个.env文件。第 2 步只改 5 个键其余全保持默认打开.env按下表核对其他几百行都不用动STORAGE_TYPE保持local文件直接写容器挂载的本地目录不引入 MinIO/对象存储这层依赖RETRIEVE_DRIVER保持postgres向量直接落在自带库里少维护一个组件OLLAMA_BASE_URL保持http://host.docker.internal:11434容器里localhost指向容器自己只有host.docker.internal才能穿透到宿主机上的 OllamaDB_PASSWORD、REDIS_PASSWORD换成自己生成的值模板里的示例值在内网部署也不能沿用SYSTEM_AES_KEY换掉系统级加密用它的派生密钥32 字节建议openssl rand -base64 32生成。另外 config/config.yaml 会被直接挂载进 app 容器想微调解析或检索行为时改它就行不用重建镜像。成功标志5 个键全部确认过一遍没有留模板占位符。第 3 步一条命令启动全部容器联网环境./scripts/start_all.sh离线环境加--no-pull跳过拉取直接用本机镜像./scripts/start_all.sh --no-pull脚本干三件事确认 Ollama 在跑没装就装、没起就起、校验.env必要项、再docker compose up拉起 frontend / app / postgres / docreader / redis。它最后会持续跟日志CtrlC只退出日志不杀容器。 成功标志终端打印前端界面: http://localhost和API接口: http://localhost:8080。第 4 步给 Ollama 备两个模型对话和嵌入各需要一个ollama pull bge-m3嵌入模型负责把 chunk 变成向量存进 postgres。ollama pull qwen2.5:7b对话模型生成回答用机器内存够就选更大的不够就换 3B 档位的。⚠️ 断网机器上这两条要在联网机执行ollama pull后导出模型文件拷过去再ollama create导入。成功标志ollama list里能看到这两个名字模型没就位时 app 只会告警OLLAMA_OPTIONALtrue的默认行为不会崩但问答用不了。最后到前端「设置 → 模型」里把这两个模型分别配为嵌入模型和对话模型并绑定到知识库。链路验收清单5 条全过才算跑通按顺序做任何一条不过就停下修别跳着走docker compose psfrontend / app / docreader / postgres / redis 状态全是Upapp 的 health 列显示 healthycurl -f http://localhost:8080/health返回 200后端自检通过这一步失败就看docker compose logs app浏览器打开http://localhost完成注册并登录第一个账号默认开放注册新建一个知识库上传一份 PDF等解析状态从处理中变成完成中途失败就看docker compose logs docreader报的具体格式错误在问答页问一句这份文档主要讲什么拿到的回答带引用出处。✅ 五条全部打勾整条链路才算跑通。三个高频故障现象对上了直接改app 容器反复重启日志全是 Ollama 连不上→ 先在宿主机curl http://localhost:11434/api/tags确认 Ollama 本体活着再核对.env的OLLAMA_BASE_URL写的是host.docker.internal而不是localhost容器内这两个地址含义完全不同。上传文档直接被拒→ 默认单文件上限 50MBMAX_FILE_SIZE_MB超限四层同时拒绝没超限就docker compose logs docreader解析器会指明是哪种格式不支持。注意改MAX_FILE_SIZE_MB后要同时重启 app 和 frontend 才生效。问答太慢→ 无 GPU 时推理全压在 CPU 上。先换更小的对话模型再把.env里的BATCH_EMBED_SIZE调小换内存这两招通常比升级硬件见效快。到这里你手里有什么下一步往哪走一台不碰外网的机器上文档解析、向量检索、模型推理全部本地闭环数据不出机器——这就是 WeKnora 本地化部署的终点。想继续深入按顺序看这几份仓库内材料启动/停止/自检逻辑都在 scripts/start_all.sh配置模板是 .env.example 和 config/config.yaml上传后 chunk 怎么切、为什么这么切见 docs/CHUNKING.md日常运维问题查 docs/QA.md。两个值得立刻做的动作给postgres-data和data-files两个卷挂独立磁盘并定期备份丢了卷知识库就没了如果内网里有显存更大的机器把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),仅供参考