ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

Open Notebook 本地私有化部署实战:Docker Compose + Ollama 构建 100% 离线的 NotebookLM 式研究助手

2026/9/6 19:56:22 拓冰建站 浏览量
Open Notebook 本地私有化部署实战:Docker Compose + Ollama 构建 100% 离线的 NotebookLM 式研究助手 Open Notebook 本地私有化部署实战Docker Compose Ollama 构建 100% 离线的 NotebookLM 式研究助手【免费下载链接】open-notebookAn Open Source implementation of Notebook LM with more flexibility and features项目地址: https://gitcode.com/GitHub_Trending/op/open-notebook本文基于 Open Notebook 仓库的本地快速入门文档quick-start-local.md展开讲解如何用 Docker Compose 把 Open Notebook、SurrealDB 和 Ollama 三个服务全部跑在同一台机器上实现无需任何云 API Key、数据不出本机的 100% 本地 AI 环境。读完本文你将掌握完整的本地部署流程从编写 compose 文件、拉起服务、拉取模型到在 UI 中配置 Ollama 凭据、注册模型、创建笔记本并对话同时理解每个环境变量如OLLAMA_API_BASE、OPEN_NOTEBOOK_ENCRYPTION_KEY在源码中的实际作用与常见故障排查手段。一、方案定位与适用场景Open Notebook 的本地模式面向隐私优先、零 API 费用的使用场景所有语言模型、向量嵌入都由 Ollama 在本地推理适合离线环境、开发测试、以及不愿把研究资料上传到第三方云服务的用户。代价也很直接——响应速度取决于你的 CPU/GPU 性能通常慢于云端模型。仓库为此提供了完整的配套素材本文所依据的入门文档docs/0-START-HERE/quick-start-local.md仓库根目录的官方 compose 文件docker-compose.ymlSurrealDB Open Notebook 两服务版完整本地 AI 栈示例额外包含 Ollama 与本地 TTS/STT 服务 Speachesexamples/docker-compose-full-local.yml深入的 Ollama 网络配置专题文档docs/5-CONFIGURATION/ollama.md若你已经有本机安装的 Ollama不打算用容器跑 Ollama应改看 外部 Ollama 指南。前置条件Docker Desktop或 Docker Engine已安装并可正常运行容器本地 LLM 运行时二选一Ollama推荐本文主线将随 Compose 一起以容器方式运行LM StudioGUI 友好的替代方案运行在 Docker 之外见本文第六节。两种部署拓扑入门文档把部署目标分为两类本文的 compose 方案同时覆盖本地机器同一台电脑Open Notebook、SurrealDB、Ollama 全部跑在你当前这台机器上适合测试和学习是最简单的起步方式远程服务器如 Raspberry Pi、NAS、云虚拟机同一份docker-compose.yml可以直接部署到另一台机器上从你常用的电脑访问。注意远程场景下数据库端口绝不能对公网开放原因见下节的端口绑定说明网络配置细节可参考 Ollama 网络配置指南。二、编写配置文件三个服务的职责与关键参数新建一个目录open-notebook-local在其中创建docker-compose.yml。下面是入门文档给出的完整内容可原样复制services: surrealdb: image: surrealdb/surrealdb:v2 command: start --user root --pass password rocksdb:/mydata/mydatabase.db user: root ports: # Localhost only — the database uses default credentials, so never # publish this port on 0.0.0.0 - 127.0.0.1:8000:8000 volumes: - ./surreal_data:/mydata open_notebook: image: lfnovo/open_notebook:v1-latest pull_policy: always ports: - 8502:8502 # Web UI (React frontend) - 5055:5055 # API (required!) environment: # Encryption key for credential storage (required) - OPEN_NOTEBOOK_ENCRYPTION_KEYchange-me-to-a-secret-string # Database (required) - SURREAL_URLws://surrealdb:8000/rpc - SURREAL_USERroot - SURREAL_PASSWORDpassword - SURREAL_NAMESPACEopen_notebook - SURREAL_DATABASEopen_notebook # Ollama (required when running Ollama via Docker, as in this compose file) - OLLAMA_API_BASEhttp://ollama:11434 volumes: - ./notebook_data:/app/data depends_on: - surrealdb restart: always ollama: image: ollama/ollama:latest ports: - 11434:11434 volumes: - ./ollama_models:/root/.ollama restart: always # Optional: set GPU support if available #deploy: # resources: # reservations: # devices: # - driver: nvidia # count: 1 # capabilities: [gpu]对照仓库源码逐个说明关键配置项的含义1. SurrealDB 服务command使用rocksdb:/mydata/mydatabase.db启动即单文件 RocksDB 模式数据落盘到挂载卷./surreal_data容器重建后数据不丢失端口映射刻意写成127.0.0.1:8000:8000而非8000:8000。仓库的 docker-compose.yml 中对此有专门注释由于数据库使用的是默认凭据open_notebook服务通过 Compose 内部网络ws://surrealdb:8000/rpc访问数据库宿主端口仅用于本地调试例如用 Surrealist 或surreal sql客户端连接。把它发布到0.0.0.0会让任何能访问该主机的客户端用默认凭据直接连入数据库因此在远程部署时这一点尤其重要仓库版本还支持SURREAL_EXPERIMENTAL_GRAPHQLtrue与通过.env变量SURREAL_USER/SURREAL_PASSWORD覆盖默认凭据默认root:root入门文档中的 compose 则直接把root/password写死在命令与open_notebook的环境变量里两者一一对应即可。2. open_notebook 服务image: lfnovo/open_notebook:v1-latest是官方镜像8502端口是 React 前端Web UI5055端口是 REST API两者都需要发布OPEN_NOTEBOOK_ENCRYPTION_KEY是必填项它用于加密存入数据库的凭据API Key、Base URL 等敏感字段。仓库源码 open_notebook/utils/encryption.py 提供了加密实现api/main.py 在启动流程中依赖该密钥。入门文档要求把它从change-me-to-a-secret-string替换为你自己的任意字符串——本地部署下任意字符串即可但更换该密钥后已存储的凭据将无法解密请勿事后随意更改SURREAL_URLws://surrealdb:8000/rpc中的surrealdb是 Compose 服务名即服务发现域名与宿主端口127.0.0.1:8000无关volumes中的./notebook_data:/app/data存放上传的源文件、生成的播客音频等用户数据。3. Ollama 服务与OLLAMA_API_BASE的重要性OLLAMA_API_BASE是这份 compose 中最容易踩坑的变量值得结合源码说明在 open_notebook/ai/provider_registry.py 中Ollama 的ProviderSpec声明了required_env(OLLAMA_API_BASE,)即系统判定Ollama 是否可用的依据就是这一个环境变量在 open_notebook/ai/model_discovery.py 中discover_ollama_models()读取OLLAMA_API_BASE缺省回退到http://localhost:11434然后请求{base_url}/api/tags接口枚举已拉取的模型并按模型名自动分类为 language / embedding 类型仓库 CHANGELOG.md 中记录过一个真实教训早期的快速入门指南曾写成OLLAMA_BASE_URL而代码路径实际读取的是OLLAMA_API_BASE——照抄旧示例会导致 Ollama静默不可用且没有任何报错。三个随仓库发布的示例文件包括本文引用的 compose都已统一为正确名称因此请确认你写的是OLLAMA_API_BASE在容器化 Ollama 的场景下Open Notebook 容器必须通过 Compose 网络内的服务名访问它即http://ollama:11434——这正是本文件open_notebook服务环境变量的取值。如果你改用宿主机上安装的 Ollama容器外则应改为http://host.docker.internal:11434Linux 上还需extra_hosts配置见 Ollama 配置指南 的网络配置章节。另外说明一点源码层面的机制OLLAMA_API_BASE属于环境变量方式配置 Ollama而当前 UI 推荐的方式是在Settings → API Keys中创建 Ollama 凭据。二者并不冲突——open_notebook/ai/key_provider.py 中PROVIDER_CONFIG把ollama映射到OLLAMA_API_BASE运行时优先从数据库中的 Credential 记录读取读不到时回退到环境变量api/credentials_service.py 的create_credential_from_env()还会在检测到OLLAMA_API_BASE时自动生成一条Default (Migrated from env)凭据完成从环境变量到 UI 凭据的迁移。所以本文 compose 中设置该变量、以及第六步在 UI 中添加凭据两者是同一件事的容器侧与 UI 侧表达。4. GPU 可选配置compose 中被注释掉的deploy.resources.reservations.devices块用于 NVIDIA GPU 加速。如果你的机器有独显取消注释后 Ollama 会使用 GPU 推理响应速度显著提升纯 CPU 环境下保持注释即可。三、启动服务与拉取模型1. 启动在open-notebook-local目录下执行docker compose up -d等待 10–15 秒三个容器SurrealDB、Open Notebook、Ollama进入运行状态。可用docker compose ps确认。2. 拉取模型Ollama 至少要有一个语言模型。入门文档给出三个梯度注意容器名open-notebook-local-ollama-1由目录名open-notebook-local派生如果你的目录名不同请先docker ps确认实际容器名# Fastest smallest (recommended for testing) docker exec open-notebook-local-ollama-1 ollama pull mistral # OR: Better quality but slower docker exec open-notebook-local-ollama-1 ollama pull neural-chat # OR: Even better quality, more VRAM needed docker exec open-notebook-local-ollama-1 ollama pull llama2下载耗时约 1–5 分钟取决于网络。向量嵌入模型nomic-embed-text在第七步配置 Embedding Model 时会按需自动下载若想提前准备好可以执行docker exec open-notebook-local-ollama-1 ollama pull nomic-embed-text。仓库的完整本地示例 examples/docker-compose-full-local.yml 的注释中还列出了mxbai-embed-large约 334M 参数、质量更高等可选嵌入模型。3. 打开 Web UI浏览器访问http://localhost:8502应看到 Open Notebook 界面。四、在 UI 中配置 Ollama 凭据与模型第一步添加 Ollama 凭据进入Manage → Models当前版本 UI 中对应 Settings 区域点击Add Credential选择提供商Ollama命名例如 Local OllamaBase URL 填写http://ollama:11434compose 内部地址与第二节说明一致点击Save点击Test Connection——应显示成功点击Discover Models→Register Models把已拉取的模型注册进 Open Notebook。Discover Models 的底层就是第二节提到的discover_ollama_models()它请求 Ollama 的/api/tags把返回的每个模型按名称分类为语言模型或嵌入模型。如果列表为空通常意味着 Base URL 填错或模型还没拉完。第二步设置默认模型仍停留在Manage → Models设置Language Modelollama/mistral或你实际拉取的模型Embedding Modelollama/nomic-embed-text未下载时会自动拉取点击Save。语言模型负责对话与问答嵌入模型负责把你的资料切成向量存入库中以供检索——这正是 Open Notebook AI 上下文 / RAG 工作方式的核心可延伸阅读 AI Context / RAG 概念文档。五、创建第一个笔记本并完成首次对话入门文档把用起来压缩为四步正好覆盖了 NotebookLM 式工作流的最短闭环创建笔记本点击New Notebook命名为 My Private Research点击Create添加本地内容点击Add Source→ 选择Text→ 粘贴一段文本或文档内容 →Add。资料会被切块并生成嵌入向量本地 Ollama 嵌入模型完成对话进入Chat输入 What did you learn from this?发送观察本地 Ollama 模型基于你的资料生成回答。验证清单Docker 正在运行三个容器均为 Up 状态可以访问http://localhost:8502Ollama 凭据已配置且 Test Connection 通过模型已注册语言模型 嵌入模型已创建笔记本本地模型可以正常对话全部勾选通过后你就拥有一个完全私有、可离线运行的研究助手了。六、备选方案用 LM Studio 替代 Ollama如果你更习惯 GUI 管理模型LM Studio 是面向非技术用户的替代选择。与 Ollama 容器的关键区别是LM Studio 运行在 Docker 之外Open Notebook 容器需要通过host.docker.internal才能访问它。下载并安装 LM Studiolmstudio.ai打开应用从模型库下载一个模型进入 Local Server 标签页启动本地服务器默认端口 1234在 Open Notebook 中进入Settings → API Keys点击Add Credential→ 选择OpenAI-CompatibleBase URL 填写http://host.docker.internal:1234/v1API Key 填写lm-studio占位值LM Studio 不校验点击Save然后Test Connection在 Settings → Models 中选择你的 LM Studio 模型。七、本地部署的收益与代价收益零 API 费用长期使用无订阅无需互联网具备真正的离线能力模型下载完成后隐私优先——研究资料永不离开本机凭据加密存储OPEN_NOTEBOOK_ENCRYPTION_KEY配置迁移成本低。代价响应速度受 CPU/GPU 限制明显慢于云端模型对复杂推理类任务小参数本地模型的质量也有限。仓库的完整本地示例 examples/docker-compose-full-local.yml 给出了硬件参考CPU 最低配置约 8 GB 内存、4 核、20 GB 磁盘推荐配置 16 GB 内存、8 GB 显存NVIDIA、50 GB 磁盘、8 核。八、故障排查Troubleshooting以下问题与命令均继承自入门文档ollama: command not found通常是因为容器名与假设的不一致。先查实际容器名再执行docker ps # Find the Ollama container name docker exec container_name ollama pull mistral模型下载卡住检查网络后重启 Ollama 容器再重试拉取docker compose restart ollamaAddress already in use宿主机端口被占用常见于 8502/5055/11434/8000。停掉旧栈后重建docker compose down docker compose up -d或者修改 compose 中的宿主端口映射保持容器端口不变如8503:8502。性能偏低检查 GPU 是否可用# Show available GPUs / loaded models docker exec open-notebook-local-ollama-1 ollama ps然后按第二节说明在 compose 中启用 GPU 设备预留并执行docker compose restart ollama。添加更多模型# List available models docker exec open-notebook-local-ollama-1 ollama list # Pull additional model docker exec open-notebook-local-ollama-1 ollama pull neural-chat拉取新模型后记得回到 UI 对该凭据重新执行Discover Models→Register Models新模型才会出现在可选列表中。九、常见本地模型选择入门文档给出的选型对照表以 Ollama 模型名标注模型速度质量VRAM适用场景mistral快良好4GB测试、日常使用neural-chat中更好6GB均衡推荐llama2慢最佳8GB复杂推理phi极快一般2GB硬件吃紧时仓库的 Ollama 配置指南docs/5-CONFIGURATION/ollama.md则列出了更新的模型建议如qwen3、gemma3、deepseek-r1、phi4嵌入模型推荐mxbai-embed-large。可以推断实际选型时以你的硬件显存为准先用小模型跑通全流程再逐步升级到更大模型做速度/质量的本地基准测试。十、部署之后的进阶方向切换模型随时在 Settings → Models 中更换默认语言/嵌入模型添加模型Ollama 侧执行ollama pull model后重新 DiscoverLM Studio 侧直接从应用模型库下载部署到服务器同一份docker-compose.yml适用于任何 Docker 环境远程部署时务必守住数据库端口只绑 127.0.0.1这条安全底线更多网络与代理细节见 docs/5-CONFIGURATION/security.md 与 docs/5-CONFIGURATION/reverse-proxy.md云端混合保留本地模型处理日常任务同时添加云厂商凭据处理复杂任务Open Notebook 的多凭据机制天然支持这种混合配置丰富资料来源添加 PDF、网页文章等更多类型的 Source完整功能文档见 docs/3-USER-GUIDE/index.md其中 添加资料指南 与 有效对话指南 与本文的创建笔记本 → 添加资料 → 对话闭环直接衔接本地语音能力若希望播客/转录也完全本地化可参考 完整本地栈示例含 Speaches TTS/STT对应配置文档为 docs/5-CONFIGURATION/local-tts.md 与 docs/5-CONFIGURATION/local-stt.md。小结本地模式的全部工作量可以概括为一份 compose 文件 一次模型拉取 两分钟 UI 配置compose 定义 SurrealDB数据、Open Notebook应用8502/5055 端口、Ollama模型11434 端口三者的网络与卷OPEN_NOTEBOOK_ENCRYPTION_KEY保障凭据加密OLLAMA_API_BASE决定容器如何找到本地模型服务——这两个变量在源码 open_notebook/ai/provider_registry.py 与 open_notebook/ai/model_discovery.py 中的具体读取位置是排查模型不可用类问题的第一落脚点。按验证清单逐项打勾之后你得到的就是一个数据不出本机、零 API 账单的 NotebookLM 式研究助手。【免费下载链接】open-notebookAn Open Source implementation of Notebook LM with more flexibility and features项目地址: https://gitcode.com/GitHub_Trending/op/open-notebook创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考