再见 Google NotebookLM?20分钟用 Docker 搭建私有化“神级”认知库 Open Notebook (国内环境完美适配版)
摘要:20分钟搭建私有化NotebookLM替代方案 针对Google NotebookLM的数据隐私和网络访问问题,本文提供了一套专为国内环境优化的开源方案Open Notebook部署指南。通过Docker Compose编排,整合SurrealDB数据库和优化后的OpenAI接口,实现完全本地的知识管理平台。该方案具有三大优势: 数据主权保障 - 所有文档处理均在本地完成 混合检索能力 -
🛑 摘要
Google NotebookLM 的“播客生成”功能最近火出了圈,但作为国内开发者,**“数据隐私”和“网络连接”**始终是两道过不去的坎。想拥有一个能读懂海量 PDF、还能生成中文播客脚本的“数字第二大脑”,却不想把私密文档上传给 Google?
本文将带你深度玩转 GitHub 高分开源项目 Open Notebook (lfnovo)。不同于官方文档的通用教程,这是一份专为国内开发环境定制的部署指南:涵盖了从 Docker Compose 编排、SurrealDB 数据库配置,到 OpenAI 国内优化接口 的完整调通方案。不废话,直接上代码,20 分钟还你一个完全私有的认知中台。

1. 为什么要折腾这个?
老实说,NotebookLM 的 RAG(检索增强生成)体验确实很顶,尤其是那个 Audio Overview(音频概览),把枯燥的论文变成双人对谈,简直是通勤听书神器。
但作为一个对数据敏感的技术人,我有三个痛点它解决不了:
- 数据主权:我的技术方案和未公开文档,不敢随便喂给公有云 SaaS。
- 黑盒焦虑:我没法控制它是怎么切分文档的,也没法自定义 Prompt。
- 网络门槛:你懂的,且不说访问问题,光是 API 的调用就得折腾半天。
Open Notebook 就是为了解决这些问题而生的。它基于 Next.js + Python (FastAPI) + SurrealDB 架构,支持混合检索(Hybrid Search),最骚的操作是它生成的播客脚本支持人工编辑——这简直是强迫症的福音。
今天我们就用 Docker,把它在本地(或国内云服务器)跑起来。
2. 环境准备与架构微调
为了适应国内的网络环境,我对原版的部署方案做了一些“魔改”:
- 容器保活:增加了
restart: always,防止网络抖动挂掉。 - 时区校准:强制
Asia/Shanghai,不然你的笔记时间戳会乱。 - API 线路优化:直接集成国内中转接口,跳过复杂的网络配置。
前置要求:
- Linux 服务器 (推荐 Ubuntu 22.04) 或 Windows (WSL2) / macOS。
- 已安装 Docker 和 Docker Compose。
- 获取OpenAI 或者其他AI厂家的APIKey推荐意见兼容的接口API厂商(
uiuiapi.com)。

3. 部署实战:保姆级 Copy 代码
随便找个舒服的目录,开始我们的表演。
3.1 创建工作目录
mkdir -p ~/projects/open-notebook
cd ~/projects/open-notebook
3.2 编写 Docker Compose (针对国内优化)
创建 docker-compose.yml。这里我把数据库和应用的数据卷(Volumes)都挂载了出来,确保你重启容器后,上传的 PDF 和生成的笔记不会丢失。
version: '3.8'
services:
# --- 数据库:SurrealDB (高性能多模数据库) ---
surrealdb:
image: surrealdb/surrealdb:latest
container_name: open_notebook_db
restart: always
user: root
environment:
- TZ=Asia/Shanghai # 关键:修正时区
ports:
- "8000:8000"
volumes:
- ./data/surrealdb:/mydata # 数据持久化
command: start --log trace --user root --pass root file://mydata/surreal.db
# --- 后端核心:Python FastAPI ---
backend:
image: ghcr.io/lfnovo/open-notebook-backend:latest
container_name: open_notebook_backend
restart: always
environment:
- TZ=Asia/Shanghai
depends_on:
- surrealdb
env_file:
- .env
ports:
- "5055:5055"
volumes:
- ./data/uploads:/app/uploads # 上传文件存储
- ./data/cache:/app/cache # 音频缓存
# --- 前端界面:Next.js ---
frontend:
image: ghcr.io/lfnovo/open-notebook-frontend:latest
container_name: open_notebook_frontend
restart: always
environment:
- TZ=Asia/Shanghai
depends_on:
- backend
env_file:
- .env
ports:
- "8502:3000" # 映射到宿主机 8502 端口
3.3 配置环境变量 (核心中的核心) 🛠️
这是最容易踩坑的地方!为了打通国内网络,我们需要配置 API 中转。
创建 .env 文件,直接复制下面的内容(Key 已预置):
# ===========================
# 网络与基础配置
# ===========================
# ❗重要:如果你部署在云服务器,请把 localhost 换成你的公网 IP
API_URL=http://localhost:5055
# 容器内部通信地址,保持默认即可
INTERNAL_API_URL=http://backend:5055
# ===========================
# 数据库配置 (SurrealDB)
# ===========================
SURREAL_URL=http://surrealdb:8000
SURREAL_NAMESPACE=test
SURREAL_DATABASE=test
SURREAL_USER=root
SURREAL_PASSWORD=root
# ===========================
# LLM 模型配置 (国内中转加速版)
# ===========================
LLM_PROVIDER=openai
# 输入你在uiuiAPI您的 API Key
OPENAI_API_KEY="sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
# 👇 关键配置:指定中转接口地址
# 解决了直连 OpenAI 不通/超时的问题
OPENAI_API_BASE="https://sg.uiuiapi.com/v1"
OPENAI_BASE_URL="https://sg.uiuiapi.com/v1"
# 推荐模型:gpt-4o-mini 性价比极高,适合读长文
DEFAULT_CHAT_MODEL=gpt-4o-mini
DEFAULT_EMBEDDING_MODEL=text-embedding-3-small
# ===========================
# 稳定性优化
# ===========================
# 增加超时时间(秒),防止中转网络延迟导致报错
API_TIMEOUT=120
MAX_RETRIES=3
3.4 一键起飞
docker compose up -d
首次拉取镜像可能需要一点时间(取决于你的 docker 镜像源速度)。启动后,用 docker compose logs -f 瞄一眼日志,看到 Uvicorn running on http://0.0.0.0:5055 就说明后端稳了。
打开浏览器访问 http://localhost:8502(或你的服务器 IP:8502),注册个账号(数据完全在本地库,放心填),开始体验。
4. 深度体验:这玩意儿到底比原版强在哪?
4.1 真正的“上帝视角”编辑
原版 NotebookLM 生成播客是“一锤子买卖”,读错字了你也没辙。
Open Notebook 的流程是:分析文档 -> 生成文字脚本 -> (暂停! 此时你可以介入编辑) -> 合成音频。
这意味着你可以:
- 给专业术语加上注音。
- 强行插入一段你想强调的观点。
- 把对话风格改成“相声”或者“辩论”。
4.2 混合检索 (Hybrid Search)
技术人都懂,单纯的向量检索(Vector Search)有时候会丢关键字。Open Notebook 同时用了 SurrealDB 的全文检索能力。
比如你搜具体的错误代码“Error 503”,向量检索可能给你找一堆“网络连接”相关的概念,但混合检索能精准定位到包含“Error 503”字符串的那一行。这对于查技术文档简直是降维打击。
5. 避坑指南 (Debug 笔记)
部署过程中我也踩了几个坑,提前帮大家填上:
- 浏览器报错 “Network Error”
- 原因:
.env里的API_URL填错了。 - 解法:这个地址是你的浏览器去访问后端的地址。如果你在腾讯云/阿里云上,必须填
http://公网IP:5055。填localhost只有在你本机部署才行。
- API 依然连接失败
- 原因:某些 Python 库对 Base URL 的处理逻辑不一样。
- 解法:我在上面的
.env里同时配置了OPENAI_API_BASE和OPENAI_BASE_URL,并且都带上了/v1后缀。这能兼容 99% 的 Python SDK。
- PDF 解析乱码
- 原因:部分 PDF 编码奇葩。
- 建议:目前项目对标准 PDF 支持最好。如果是扫描件,建议先 OCR 一下再上传。

6.界智通(jieAGI)总结
只用了不到 20 分钟,我们就搭建了一套不依赖 Google 生态、无需担心隐私泄露、且网络完全通畅的认知知识库。
在 AI 时代,工具的可掌控性往往比功能强大更重要。Open Notebook 也许不是最完美的,但它绝对是最适合极客们魔改和私有化使用的“第二大脑”。
兄弟们,如果你在部署过程中遇到任何报错,欢迎在评论区贴 Log,必定知无不言!
作者提示:本文使用的 API 代理地址仅作演示配置,请确保您的 Key 有足够的额度。项目开源地址请搜索 GitHub
lfnovo/open-notebook。
更多推荐

所有评论(0)