企业内网 30 分钟部署 WeKnora:把部门文档变成 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
这篇指南面向中小型企业内网:把散落在各部门的产品手册、制度文档、FAQ 变成一套可检索、可问答的 RAG(检索增强生成)知识库。用 Docker Compose 一条命令拉起 WeKnora,注册即用,支持多部门权限隔离与知识图谱。部署完成后,员工直接提问"退款流程是什么",系统从文档里召回对应章节,给出带出处的回答。
开始之前:一份自检清单 📋
硬件、软件、网络合并成一张清单,逐项打勾即可,不必逐节展开。
- 硬件:4 核 CPU / 8GB 内存起步(docreader 内含 LibreOffice、Playwright,较吃内存);磁盘按知识库规模预留,要装下 Postgres 数据卷和
/data/files文件卷。 - 软件:Docker 20.10+、Docker Compose v2(v1 的
docker-compose也兼容,启动脚本会自动探测)。 - 网络:如需让全公司访问,向网管申请开放前端 80、后端 8080 两个端口入站;纯内网单机可跳过。
- 模型:二选一——本机装 Ollama,或准备一个 OpenAI 兼容 API(DeepSeek、通义、智谱等)。
先跑一条命令确认环境就绪:
# 确认 Docker 与 Compose 已安装且版本可用 docker --version && docker compose version动手实录:四步拉起企业内网 RAG 知识库
步骤一:拉取仓库并生成 .env
做什么:把代码拉到内网服务器,造出 compose 依赖的环境文件。
怎么做:
# 克隆 WeKnora 仓库并进入目录 git clone https://gitcode.com/GitHub_Trending/we/WeKnora cd WeKnora# 从模板生成 .env(app 服务的 env_file 依赖它,缺失会导致 compose 解析失败) cp .env.example .env接着编辑.env,只改必填项。示例值如下,生产环境请换成强随机值:
# .env 必填项(占位值请替换为强随机值) DB_USER=weknora DB_PASSWORD=换成强密码 DB_NAME=weknora REDIS_PASSWORD=换成强密码 JWT_SECRET=用 openssl rand -hex 32 生成 SYSTEM_AES_KEY=用 openssl rand -hex 32 生成(必须 32 字节)如何确认成功:DB_USER/DB_PASSWORD/DB_NAME/REDIS_PASSWORD/JWT_SECRET/SYSTEM_AES_KEY六项都已填、无残留占位符。
步骤二:拉取镜像并启动服务
做什么:下载与版本匹配的镜像,后台拉起核心服务(frontend、app、docreader、postgres、redis)。
怎么做:
# 拉取镜像再后台启动核心服务(只 up -d 会复用缓存旧镜像,务必先 pull) docker compose pull docker compose up -d如何确认成功:
# 查看容器状态,等待全部变为 healthy / running docker compose ps再用curl http://localhost:8080/health确认后端返回就绪。
步骤三:注册账号、建库、传文档
做什么:建第一个知识库、选好模型、把真实文档传进去。
怎么做:浏览器打开http://<服务器IP>,首次访问落到登录页。注册是同一页上的一个页签(默认self_serve模式才会显示),注册后会自动得到一个属于你自己的工作空间,你在其中是 Owner。登录后新建一个知识库,在弹出的初始化向导里为这个库选模型(对话模型、向量模型、重排模型)。WeKnora 的模型是按知识库走的,没有全局一次性初始化。保存后上传部门文档。
如何确认成功:文档列表里上传的文档状态变为"已完成",说明已解析、切块并入库。
步骤四(可选):开启多部门权限与知识图谱
做什么:让各部门数据互相隔离,并为文档建立实体关系图谱。
怎么做:
# 需要知识图谱时,追加 neo4j 服务(配合 .env 中 NEO4J_ENABLE=true) docker compose --profile neo4j up -d部门权限走空间(Tenant)机制:默认允许普通用户自助创建空间,每个空间一套独立的知识库与成员。到「设置 → 成员」里把对应同事请进本部门空间即可。
如何确认成功:docker compose ps里出现neo4j且为 running;成员页能看到各部门空间与角色。
场景调优:只改这 3 处配置 ⚙️
企业内网和公网部署的差别主要在存储、上传上限、注册策略,其余保持默认。
MAX_FILE_SIZE_MB:默认 50MB。企业里常有上百页的产品手册、培训课件,把这行改成MAX_FILE_SIZE_MB=200,改完重启app与frontend两个容器才生效。STORAGE_TYPE=local+LOCAL_STORAGE_BASE_DIR:内网通常没有云对象存储,保持local,并把LOCAL_STORAGE_BASE_DIR指向一块共享挂载目录,文件就落在本地卷data-files上,不依赖外网。WEKNORA_TENANT_SELF_SERVICE_CREATION_ENABLED=true配DISABLE_REGISTRATION:先保持自助建空间为true,让各部门自己开户;等人员到位、确认要锁入口时,把DISABLE_REGISTRATION设为true,只留邀请链接一条注册通路。
验收:用两个部门协作场景验证
场景一:跨成员文档问答。部门 A 管理员上传《产品操作手册.pdf》,部门 B 成员在对话里问"如何申请退款",系统应从手册里召回对应章节,给出带引用的回答。
场景二:权限隔离。新成员注册后自动获得个人空间,在检索框里搜本部门关键词,只应返回本空间的文档,看不到其他部门内容。
| 验证点 | 期望结果 | 检查方式 |
|---|---|---|
| 文档入库 | 上传文档状态变"已完成" | 文档列表页 |
| 语义检索 | 提问能召回相关章节并带出处 | 对话页引用抽屉 |
| 空间隔离 | 只返回本空间文档 | 用两个不同账号分别搜索 |
| 健康检查 | 后端/health正常 | curl http://<IP>:8080/health |
踩坑日志:内网部署最常见的 5 个问题 ⚠️
现象:
docker compose up -d报解析错误。原因:app服务用了env_file: .env,文件缺失时 compose 直接失败。解法:先执行cp .env.example .env再启动;start_all.sh会自动兜底,但手动跑 compose 时要自己建。现象:容器反复
unhealthy,或界面版本和刚下载的 release 对不上。原因:只跑up -d会复用本地缓存的旧镜像。解法:docker compose pull拉新镜像后再docker compose up -d。现象:初始化向导里 Ollama 检测失败、首次问答无结果。原因:容器默认连
http://host.docker.internal:11434,Linux 上需extra_hosts的host-gateway生效。解法:确认映射生效,或改用远程 Ollama / OpenAI 兼容 API 地址。现象:上传大文件返回 413 或被拒。原因:Nginx 上传上限由
MAX_FILE_SIZE_MB控制。解法:调大该值,并重启app与frontend两个容器。现象:升级或重建后,某些已保存的密钥显示为空、无法解密。原因:
SYSTEM_AES_KEY缺失或长度不足 32 字节,已加密字段不可恢复。解法:生产环境用openssl rand -hex 32生成并妥善保管,切勿用默认值上线。
收尾
WeKnora 让企业内网的文档从"存着"变成"答得上来",核心靠一条docker compose up -d和多部门空间隔离。细节参数见 安装文档、快速开始、配置说明 与 RBAC 说明。
【免费下载链接】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),仅供参考