跳轉至

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 網絡,並確保 IP 172.21.0.6 未被佔用。
  • 準備好一組隨機 MCP Token 以及對外公開嘅 URL(例如 https://notebooklm.example.com)。

部署步驟

  1. 取得 NotebookLM 原始碼並進入專案目錄。
  2. 建立 .env 檔案,填入所需變數:
NOTEBOOKLM_MCP_TOKEN=your_generated_secret_token
NOTEBOOKLM_MCP_PUBLIC_URL=https://notebooklm.example.com
  1. 使用以下 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
  1. 如果 cf_network 未建立,可先執行:
docker network create cf_network --subnet=172.21.0.0/24
  1. 啟動服務:
docker compose up -d
  1. 驗證部署結果:
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 檔案即可實現。

Source

Coverage auto (container scan)