Open Notebook 自架教學:Docker 部署、模型設定與資料安全

使用 Docker Compose 自架 Open Notebook,設定加密金鑰與資料庫憑證,配置雲端或本機模型,並透過容器狀態、日誌及測試資料完成部署驗收。

Open Notebook 是一個面向資料學習和研究的開源應用程式,可以匯入 PDF、網頁、音訊、影片和 Office 文件,再圍繞來源進行搜尋、對話、筆記整理及 Podcast 產生。它與一般聊天工具最大的差別,是把資料、引用、模型設定和筆記保存在自己的工作空間中。

自架不等於完全離線:如果選擇 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。真正需要復原的是持久化資料、加密金鑰和資料庫憑證。

Open Notebook 還是 NotebookLM?

如果希望開箱即用、不維護伺服器,而且接受由 Google 託管,NotebookLM 更省事。Open Notebook 更適合需要自架、多 Provider、REST API、自訂工作流程或本機模型的使用者;代價是你要負責升級、備份、權限和模型成本。

參考資料