NotebookLM(自架版本)¶
Overview¶
NotebookLM 原本係 Google 推出嘅 AI 筆記工具,利用大型語言模型幫助用戶整理、理解同埋連結個人筆記。然而,呢個條目所介紹嘅係一個可完全自架嘅 NotebookLM 實現,專為喺 Oracle Cloud 上部署而設計。此服務以 Docker 容器形式運行,提供類似原版 NotebookLM 嘅核心功能,包括語料庫建立、自動摘要、語義搜尋以及與其他 AI 工具整合。
呢個自架版本最特別之處係採用 Model Context Protocol(MCP)作為標準化通訊介面,令 NotebookLM 可以連接到唔同嘅 LLM 後端,例如 litellm 或者其他兼容 MCP 嘅服務。由於所有數據都存儲喺你自己嘅雲端伺服器,用戶可以完全掌握私隱同數據主權,特別適合企業或個人對數據安全有嚴格要求嘅情境。
Architecture¶
整個系統採用單一容器架構,以 Docker Compose 管理,令部署同維修都非常簡單。架構組成如下:
- 容器映像:
notebooklm:latest,由本地 Dockerfile 即時建置,確保環境一致。 - 持久化存儲:宿主機目錄
/home/opc/notebooklm掛載至容器內/root/.notebooklm,用於存放筆記數據、設定檔案、嵌入向量索引以及 MCP 相關配置。 - 網絡設定:容器連接至外部
cf_network網絡,並指定靜態 IPv4 地址172.21.0.6。此網絡通常配合 cloudflare-tunnel 或反向代理使用,以便安全地將服務暴露到互聯網。 - 健康檢查:容器包含內建健康檢查機制,每 30 秒向
http://localhost:8001/mcp發送 HTTP 請求,確認 MCP 端點正常回應。若連續 3 次失敗,容器會被標記為 unhealthy。
環境變數主導所有執行期設定。NOTEBOOKLM_MCP_TOKEN 用於 MCP 端點嘅認證;NOTEBOOKLM_MCP_ALLOW_EXTERNAL_BIND 設為 1 時,服務會監聽所有網絡接口,容許容器外部訪問;NOTEBOOKLM_MCP_PUBLIC_URL 則定義對外公開嘅 URL,供 MCP 用戶端或 Webhook 使用。時區預設為 Asia/Hong_Kong,方便香港用戶記錄時間。
Deployment¶
前置準備¶
- 一個運行緊 Oracle Linux 8 或 Ubuntu 22.04 嘅 Oracle Cloud Infrastructure(OCI)計算實例,建議至少 4 GB RAM。
- 已安裝 Docker Engine 同 Docker Compose Plugin。
- 已建立名為
cf_network嘅外部 Docker 網絡,並確保 IP172.21.0.6未被佔用。 - 準備好一組隨機 MCP Token 以及對外公開嘅 URL(例如
https://notebooklm.example.com)。
部署步驟¶
- 取得 NotebookLM 原始碼並進入專案目錄。
- 建立
.env檔案,填入所需變數:
NOTEBOOKLM_MCP_TOKEN=your_generated_secret_token
NOTEBOOKLM_MCP_PUBLIC_URL=https://notebooklm.example.com
- 使用以下
docker-compose.yml作為組態範本:
services:
notebooklm:
build: .
image: notebooklm:latest
container_name: notebooklm
restart: unless-stopped
environment:
- TZ=Asia/Hong_Kong
- NOTEBOOKLM_MCP_TOKEN=${NOTEBOOKLM_MCP_TOKEN}
- NOTEBOOKLM_MCP_ALLOW_EXTERNAL_BIND=1
- NOTEBOOKLM_MCP_PUBLIC_URL=${NOTEBOOKLM_MCP_PUBLIC_URL}
volumes:
- /home/opc/notebooklm:/root/.notebooklm
networks:
cf_network:
ipv4_address: 172.21.0.6
healthcheck:
test: ["CMD-SHELL", "curl -s -o /dev/null -w '%{http_code}' http://localhost:8001/mcp | grep -qv '^000$'"]
interval: 30s
timeout: 5s
retries: 3
start_period: 30s
networks:
cf_network:
external: true
- 如果
cf_network未建立,可先執行:
docker network create cf_network --subnet=172.21.0.0/24
- 啟動服務:
docker compose up -d
- 驗證部署結果:
docker ps
狀態欄應顯示 Up 且 (healthy)。
Configuration¶
所有組態都集中喺環境變數,方便維護同更新。主要變數包括:
TZ:定義容器時區,預設Asia/Hong_Kong,確保日誌同時間戳符合香港時間。NOTEBOOKLM_MCP_TOKEN:必填,MCP 端點嘅認證令牌。建議用openssl rand -hex 32生成,並妥善保存。NOTEBOOKLM_MCP_ALLOW_EXTERNAL_BIND=1:啟用外部綁定,令容器可以接受來自cf_network或其他主機嘅請求。若設定為0,則只會監聽 localhost。NOTEBOOKLM_MCP_PUBLIC_URL:設定對外公開嘅 URL,此值會被寫入 MCP 配置文件,用於 OAuth 回調、Webhook 或跨域存取。
持久化目錄 /root/.notebooklm 存放所有用戶數據,包括:
- 筆記同知識庫原始檔案
- 嵌入模型載入嘅向量索引
- MCP 伺服器憑證同設定
- 用戶帳戶資料
因此,備份此目錄即完成整個服務嘅數據備份。
Operations¶
日常操作可以透過 Docker 指令進行:
- 查看即時日誌:
docker logs -f notebooklm
- 重啟容器(例如應用配置更新後):
docker restart notebooklm
- 停止並移除容器:
docker compose down
- 更新至最新映像:
docker compose build && docker compose up -d
- 備份數據:直接複製
/home/opc/notebooklm目錄到另一位置或物件儲存。
健康檢查方面,容器會自動執行 curl 探測。若服務持續異常,可檢查日誌睇下有無 MCP 端口衝突、Token 錯誤或外部網絡連接問題。建議喺 OCI 主控台設定資源監控警報,以便及早發現容器停止或 unhealthy 狀態。
FAQ¶
問:MCP Token 係咩?點樣生成?
答:MCP Token 係用於 NotebookLM 與外部工具(例如 litellm 或自訂 MCP 用戶端)之間身份驗證嘅密鑰。你可以喺伺服器執行 openssl rand -hex 32 生成一串 64 字符嘅十六進位字串,然後放入 .env 檔案。
問:點解外部客戶端連接唔到 NotebookLM?
答:請依次檢查:
1. 容器是否運行並 healthy(docker ps)。
2. NOTEBOOKLM_MCP_ALLOW_EXTERNAL_BIND 是否設為 1。
3. cf_network 嘅 IP 設定有無衝突。
4. 如果有防火牆或安全清單,確保 8001 端口已開放,或者經由 cloudflare-tunnel 代理。
問:如何透過 Cloudflare Tunnel 暴露服務?
答:你可以快速建立一個 Tunnel,將流量轉發至 172.21.0.6:8001。只要 NOTEBOOKLM_MCP_PUBLIC_URL 設定為你嘅網域,MCP 回調便能正確運作。
問:升級會唔會影響現有數據?
答:唔會。升級只係重建容器映像,/home/opc/notebooklm 目錄保持不變,所有筆記同設定檔都保留。建議喺升級前仍然做一次備份,以防萬一。
問:可唔可以同時運行多個 NotebookLM 實例?
答:可以,但每個實例需要獨立容器名稱、掛載目錄同 static IP。透過 Docker Compose 嘅 project name 或分開嘅 compose 檔案即可實現。
Related Links¶
- docker
- litellm
- oracle-cloud
- Model Context Protocol
- cloudflare-tunnel
- docker-compose
Source¶
Coverage auto (container scan)