Open Notebook 自托管教程:Docker 部署、模型配置与数据安全

使用 Docker Compose 自托管 Open Notebook,设置加密密钥和数据库凭据,配置云端或本地模型,并通过容器状态、日志和测试资料完成部署验收。

Open Notebook 是一个面向资料学习和研究的开源应用,可以导入 PDF、网页、音视频和 Office 文档,再围绕来源进行搜索、聊天、笔记整理和播客生成。它与普通聊天工具最大的区别,是把资料、引用、模型配置和笔记保存在自己的工作空间中。

自托管不等于完全离线:如果选择 OpenAI、Anthropic、Google 等云端模型,提交给模型的上下文仍会发送到对应服务。只有同时使用本地部署和本地模型,才能把资料处理链路尽量留在自己的设备上。

部署前准备

官方快速部署只要求 Docker Desktop,Linux 服务器也可以使用 Docker Engine 与 Compose 插件。开始前确认:

1
2
docker --version
docker compose version

还应准备:

  • 至少一个持久化目录,用来保存数据库和应用数据;
  • 一个随机的 OPEN_NOTEBOOK_ENCRYPTION_KEY
  • 如果要对外开放,准备域名、HTTPS 和访问控制;
  • 云端模型的 API Key,或者已经可访问的 Ollama/LM Studio 服务。

下载官方 Compose 文件

新建一个独立目录,避免数据文件散落:

1
2
3
mkdir open-notebook
cd open-notebook
curl -o docker-compose.yml https://raw.githubusercontent.com/lfnovo/open-notebook/main/docker-compose.yml

不要直接使用几个月前博客中复制的 Compose。Open Notebook 的镜像、端口和数据库配置仍可能调整,应以官方仓库当前文件为准。

启动前必须修改的配置

docker-compose.yml 或配套 .env 中修改加密密钥:

1
OPEN_NOTEBOOK_ENCRYPTION_KEY=换成你自己的长随机字符串

这个密钥用于保护数据库中的 API Key。部署后不要随意更换,否则旧凭据可能无法解密。

官方本地示例允许 SurrealDB 使用默认 root:root,但这只适合绑定在本机的测试环境。准备局域网或公网部署时,同时设置数据库用户和密码:

1
2
SURREAL_USER=open_notebook_user
SURREAL_PASSWORD=换成长随机密码

数据库调试端口应继续绑定 127.0.0.1:8000,不要为了“访问方便”改成 0.0.0.0:8000

启动并检查容器

1
2
docker compose up -d
docker compose ps

等待容器启动后打开:

1
http://localhost:8502

默认端口中,8502 是 Web UI,5055 是 REST API;8000 是 SurrealDB 的本地调试端口。docker compose ps 应显示应用和数据库容器处于运行状态。

如果页面打不开,先检查日志:

1
2
docker compose logs --tail=100 open_notebook
docker compose logs --tail=100 surrealdb

配置第一个模型

进入 Web UI 后:

  1. 打开 Models。
  2. 选择 OpenAI、Anthropic、Google、Ollama、LM Studio 或其他支持的 Provider。
  3. 添加 API Key 或本地服务地址。
  4. 点击 Test 验证连接。
  5. 点击 Sync Models,同步并勾选实际要使用的模型。
  6. 在 Default Model Assignments 中自动或手动分配默认模型。

不是每个 Provider 都同时支持 LLM、Embedding、语音识别和语音合成。聊天成功但资料检索失败时,重点检查是否配置了可用的 Embedding 模型,而不是只更换聊天模型。

用一份小资料完成验收

不要一上来导入整个资料库。建议建立测试 Notebook,并只添加:

  1. 一份可以复制文字的短 PDF;
  2. 一个公开网页;
  3. 一段手写测试笔记。

然后依次验证:

  • 来源是否完成解析;
  • 搜索能否找到 PDF 中的独特句子;
  • 回答能否显示来源或引用;
  • 新建笔记后能否再次打开;
  • 重启容器后资料是否仍然存在。

最后一项可以确认 surreal_datanotebook_data 等持久化目录是否真正生效。

常见故障

8502 端口被占用

修改 Compose 左侧的宿主机端口,例如:

1
2
ports:
  - "18502:8502"

修改后访问 http://localhost:18502,容器内部端口仍保持 8502

数据库反复重启

先看 SurrealDB 日志。Linux 上常见原因是挂载目录没有写入权限,或者使用了旧数据库文件但镜像版本已经变化。修权限前先备份数据目录,不要直接删除持久化目录重装。

模型测试成功但问答失败

依次检查默认 LLM、Embedding 模型和来源解析状态。私有模型服务还要确认容器能访问宿主机地址;容器中的 localhost 指向容器本身,并不一定是运行 Ollama/LM Studio 的宿主机。

更新和备份

更新前备份 Compose、.env、数据库和应用数据目录,然后执行:

1
2
3
docker compose pull
docker compose up -d
docker compose ps

不要只备份 docker-compose.yml。真正需要恢复的是持久化数据、加密密钥和数据库凭据。

与 NotebookLM 怎么选

如果你希望开箱即用、不维护服务器,并且接受 Google 托管,NotebookLM 更省事。Open Notebook 更适合需要自托管、多 Provider、REST API、定制工作流或本地模型的人。代价是你要负责升级、备份、权限和模型成本。

参考资料