WeKnora:10 分钟从零部署一个私有 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 是一个开源 LLM 知识平台,能把原始文档变成可检索的 RAG 知识库,还能长出推理 Agent 和自动维护的 Wiki。这篇文章只讲一件事:用 Docker Compose 在一台裸机上,把它从空白环境带到"跑起来、能用"的最短路径。全程只需 3 条核心命令加一次账号注册,顺利的话 10 分钟内能问出第一个带引用来源的回答。
预检|5 分钟环境自检:机器够不够跑
结论先行:只要你的 LLM 走 API(云端或远程 Ollama),4 核 8GB 起步就够;重活是文档解析和向量检索,不在模型上。
| 场景 | CPU | 内存 | 磁盘 |
|---|---|---|---|
| 本地开发(LLM 走 API) | 2 核 | 8GB | 20GB |
| 生产环境 | 4 核 | 16GB | 100GB |
| 本机跑大模型(Ollama) | 8 核 | 32GB | 100GB+ |
一条命令把四件事查完:
# 一次看清 CPU、内存、磁盘余量和 Docker 版本 nproc; free -h; df -h .; docker compose version💡 前面三项数字不够用就换机器或加内存;docker compose version报错则通常是 Docker 没装,或当前用户不在 docker 组里,对应排查见启动一节的折叠块。
启动|最小命令集:三步跑起核心服务
第一步:准备
只有一条命令,克隆仓库并复制环境变量模板:
# 克隆代码仓库并复制环境变量模板 git clone https://gitcode.com/GitHub_Trending/we/WeKnora && cd WeKnora && cp .env.example .env打开.env(模板内每个变量都带中文注释,见 .env.example),只需要动这几项,其余保持默认:
| 变量 | 默认值 | 说明 |
|---|---|---|
DB_PASSWORD | 示例密码 | 占位符,改成你自己的强密码 |
REDIS_PASSWORD | 示例密码 | 同上 |
SYSTEM_AES_KEY | 32 字节示例值 | 加密 API Key 等敏感字段的主密钥,用openssl rand -hex 16生成并离线保管 |
STORAGE_TYPE | local | 文件存本地卷,最省事;要对象存储再换minio/s3等 |
RETRIEVE_DRIVER | postgres | 向量检索复用 ParadeDB 版 Postgres,默认即可 |
OLLAMA_BASE_URL | http://host.docker.internal:11434 | 指向你的 Ollama,不用可忽略 |
第二步:执行
# 拉取镜像并后台启动核心服务 docker compose pull && docker compose up -d第三步:验证
# 查看容器状态,app 显示 healthy 才算真正就绪 docker compose ps看到WeKnora-app为 healthy 后,浏览器打开http://localhost就是前端,API 在http://localhost:8080。本机用 Ollama 的话先ollama serve并 pull 一个模型;没配也不影响启动,只是首次要进系统设置手动填模型。仓库里的 scripts/start_all.sh 也能一键拉起并顺带装 Ollama,手动docker compose更可控。
常见启动报错排查(4 组)
Q:docker: command not foundA: 装 Docker 后复查docker compose version。
Q: 连不上 Docker daemon,提示permission deniedA: 把当前用户加进 docker 组再重开终端:sudo usermod -aG docker $USER。
Q: 80 端口被占用,前端起不来 A: 在.env里把FRONTEND_PORT从 80 改成比如 8088,然后docker compose up -d重建。
Q: app 容器反复重启 A:docker compose logs -f app定位,多数是.env的DB_USER/DB_PASSWORD/DB_NAME和 postgres 容器对不上。
搞懂|组件都在干什么:5 个容器各自的角色
默认up -d只拉起核心五件套,其余组件按需叠加:
| 组件 | 作用 | 宿主端口 |
|---|---|---|
| frontend | Web 界面(Nginx) | 80 |
| app | 主应用,API 与业务逻辑 | 8080 |
| postgres | ParadeDB,关系库与向量库二合一 | 不对外 |
| redis | 流处理与 Asynq 任务队列 | 不对外 |
| docreader | 文档解析(gRPC) | 不对外(仅容器内网 50051) |
想加能力就加--profile,多个可组合,例如同时上知识图谱和对象存储:
# 叠加 neo4j 与 minio 两个 profile 拉取并启动 docker compose --profile neo4j --profile minio pull && docker compose --profile neo4j --profile minio up -d常用 profile:full(全部功能)、neo4j(知识图谱)、minio(对象存储)、langfuse(链路追踪)、searxng(自建网页搜索);完整清单见 README_CN.md 的可选服务一节。
上手|跑通第一个真实任务:上传文档并问出带引用的回答
容器起来只是开始,让系统给出可见反馈才算数。四步走完,你会得到一条能点进原文的问答记录:
- 打开
http://localhost,注册第一个账号(它同时是系统管理员)。 - 进「系统设置」配置一个模型:填 API Key 的云端模型,或指向本机 Ollama。没模型,后面所有环节都是空转。
- 新建知识库并上传第一份文档,确认解析完成后能看到分块:
- 点「新对话」,选到刚才的知识库,提一个只有文档里才有答案的问题。回答末尾会标注引用来源,点开能定位到具体分块——能命中,说明解析、向量化、检索整条链路都通了。
提速|3 个立竿见影的优化建议
跑通之后最常见的抱怨是"解析慢、答得不准",按收益排序只改这三处:
- 模型别将就。回答质量九成取决于 LLM,在系统设置里配一个能力强的模型(API 或 Ollama 均可),这一步免费且收益最大。
- 调解析并发。文档解析是异步队列驱动的,
.env里WEKNORA_ASYNQ_CORE_CONCURRENCY(默认 8)控制解析主链路并发;机器余量大就提到 16,批量导入明显变快。 - 日志降级。
LOG_LEVEL默认debug会很吵,稳定后改info,再用LOG_PATH落盘方便事后翻查;同文件的WEKNORA_MODEL_MAX_CONCURRENCY(默认 32)限制每模型后台并发,一般不用动。
改的是环境变量,必须重建容器才生效:
# 重新加载 .env 并只重建 app 容器 docker compose up -d app固化|生产化安全与运维清单 ⚠️
默认.env里多处是示例密码,暴露到公网前把下面 5 项全部打勾:
- 改掉
DB_PASSWORD和REDIS_PASSWORD(.env里的占位值) SYSTEM_AES_KEY换成 32 字节随机值(openssl rand -hex 16)并离线备份——丢了就解不开库里所有加密字段- 设
DISABLE_REGISTRATION=true,新用户走管理员邀请 - 前端挂 HTTPS(反代 nginx/caddy 终止证书即可)
- 备份方案实际演练过一次,数据都在 Docker 卷里
数据库备份一条命令:
# 导出数据库到本地文件,用户名和库名按 .env 实际值替换 docker compose exec postgres pg_dump -U postgres -d WeKnora > weknora_$(date +%F).sql升级记住"先 pull 再 up",否则会复用本地旧镜像:
# 拉取与 .env 版本匹配的新镜像并重建容器 docker compose pull && docker compose up -d日常巡检盯两样就够:docker stats看资源占用,docker compose logs -f app看报错。更多疑难场景见 docs/QA.md。
从预检、三步启动、组件拆解、跑通第一问答,到安全固化,这条路走完,WeKnora 就从"能跑"变成"敢跑"了。下一步,把团队里最常被问到的那批文档灌进知识库——第一批用户就是你自己。
【免费下载链接】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),仅供参考