Techvoyage
首頁
使用自建 Synch 平台和 Ignis 網頁端在 Cloudflare Zero Trust 安全私有網路中同步多端 Obsidian 本地筆記庫的架構圖

如何在多台裝置之間安全地同步 Obsidian 本地筆記庫

本文詳細介紹如何利用開源工具 Synch 與 Ignis 在您的 VPS 上搭建私有同步伺服器,從而在多台電腦、手機以及平板裝置之間安全地同步您的 Obsidian 筆記庫。我們還將所有服務全部部署在 Cloudflare Zero Trust 私有網路中,從而完全阻斷來自公網的惡意掃描與未授權存取,保障數據隱私安全。

Sep 15, 2026 - 8 分鐘閱讀
目錄

Obsidian 是一款本地優先的知識管理應用。每一個筆記在裝置上都是一個本地 Markdown 檔案,並完全處於您的掌控之中。然而,我們通常希望在筆記型電腦、手機和其他裝置上共享同一個本地筆記庫,或者希望在某些時候能夠透過網頁瀏覽器遠端存取它。

市面上有許多針對 Obsidian 的同步方案,但在衝突處理、加密和數據自主權方面,它們或多或少都做出了一些妥協。Synch 是一款開源應用,它可以在自建伺服器上實現具備端到端加密和衝突解決機制的 Obsidian 筆記庫同步。

雖然 Obsidian 的本地優先方案在絕大多數情况下都能完美運作,但在某些場景下,我們可能仍需要透過網頁瀏覽器遠端存取並編輯筆記。Ignis 是一款開源應用,它能夠讓網頁瀏覽器中以接近原生的體驗執行 Obsidian,讓您能够直接讀取和編輯筆記庫。

在本文中,我們將在一台 VPS(虛擬專用伺服器)上部署 Synch 和 Ignis,並將它們安全地託管在 Cloudflare Zero Trust 私有網路中,而無需將它們直接暴露在公網上。

使用 Cloudflare Zero Trust 和 WARP 隧道安全地將 Hermes Agent 暴露到私有網路中

相關指南

如何使用 Cloudflare WARP 私密地公開暴露 Hermes Agent

學習如何使用 Cloudflare WARP 和 Zero Trust 安全地在全網範圍內暴露和存取您的 Hermes Agent,而無需在防火牆上開啟任何入站連接埠。

8 分鐘閱讀

使用 Synch 安全同步 Obsidian 筆記庫

Synch 提供以下特性:

  • 偵測到變更時立即即時同步您的筆記庫
  • 並在上傳前對筆記庫資料進行端到端加密
  • 支援從歷史版本記錄中進行復原
  • 內建自動衝突解決機制

Synch 會在您的本地裝置上生成一個隨機的 32 位元組筆記庫金鑰(Vault Key),該金鑰專門用於加密您的筆記庫資料。當您建立遠端筆記庫時,您需要設定一個筆記庫密碼。該密碼用於保護您的筆記庫金鑰,以便能夠將金鑰安全地儲存在伺服器上,並在其他裝置上進行解密。

筆記的衝突解決是在用戶端裝置上完成的,而不是在伺服器端。如果兩台裝置同時編輯同一個筆記,伺服器會保留最先到達的版本,並通知另一台裝置其本地版本已過期。隨後,該裝置會自動將伺服器上的最新版本與其本地變更進行合併,然後再將合併後的最終筆記上傳。

在您的 VPS 上部署 Synch

建立網域名稱解析

在 Cloudflare 中建立一條 A 記錄,並將其代理狀態設定為僅限 DNS(繞過 Cloudflare CDN)。

在 Ubuntu 上使用 Docker 安裝 Synch

克隆倉庫
git clone https://github.com/hjinco/synch.git       
        
# Navigate to the API folder
cd synch/apps/api
        
# Copy the example environment file:
cp .env.example .env
編輯 .env 變數
  • PUBLIC_URL=synch.pafor.me:輸入您的 Synch 伺服器公网網域名稱(即在上一步中建立的網域名称)。
  • BETTER_AUTH_SECRET 和 SYNC_TOKEN_SECRET:請使用此 線上金鑰產生工具 或在終端機中執行兩次 openssl rand -hex 32 來產生高強度的隨機金鑰。
  • AUTH_ALLOWED_EMAILS:允許註冊並建立帳號的電子信箱列表(用英文逗號分隔)。
将网域添加至 Caddyfile

有關如何將 Cloudflare DNS 模組整合到 Caddy 中並使用 Docker 容器啟動的詳細設定方法,請參閱我們的 自建 Buzz 協作平台文章。

在自建工作區中設定帶有 Cloudflare DNS API 權杖的 Caddy,實現 SSL/TLS 憑證的自動申請與管理

自建指南

自建 Block 旗下 Buzz 協作平台:輕鬆構建人類與 AI 智能體高效協同工作的全新共享工作空間

學習如何在 Docker 容器中設定 Caddy 反向代理,並利用 Cloudflare DNS Challenge 自動申請和管理 SSL/TLS 憑證。

12 分鐘閱讀

在您的 Caddyfile 中添加 SYNCH_DOMAIN 設定,並將其反向代理指向 8787 連接埠(Synch 容器內部執行的連接埠):

{
  acme_dns cloudflare {env.CLOUDFLARE_API_TOKEN}
}

{$SYNCH_DOMAIN} {
  encode zstd gzip
  reverse_proxy host.docker.internal:8787
}

啟動容器:

docker compose up -d

執行以下 curl 命令以驗證服務的可用性:

curl https://synch.pafor.me/health

將 Obsidian 用戶端連接至您的 Synch 伺服器

在 Obsidian 中安裝 Synch 插件

打開 Obsidian 的「設定」(Settings),導覽至「第三方外掛」(Community plugins),然后點擊 「瀏覽」(Browse) 按鈕:

搜尋並安裝 'Synchrun' 外掛:

安裝完成後,打開 'Synchrun' 外掛設定,並啟用 「使用自建伺服器」(Use a self-hosted server)。隨後,在 「伺服器 URL」(Server URL) 欄位中輸入 https://synch.pafor.me,並點擊 「儲存」(Save)。

點擊 「在當前裝置上登入」(Sign in on this device) 按鈕。接著,使用您在 .env 中 AUTH_ALLOWED_EMAILS 列表中指定的信箱地址進行註冊,註冊成功後您将看到以下授權頁面:

點擊 「允許 Obsidian 登入」(Allow Obsidian sign-in) 按鈕:

點擊 「返回 Obsidian」(Return to Obsidian) 按鈕,隨後點擊 「建立筆記庫」(Create vault):

輸入您自訂的筆記庫名稱與高強度密碼來建立遠端筆記庫。

同步過程將立即開始,根據您的筆記庫檔案大小,這可能會需要一些時間。同步完成後,介面將顯示您所使用的總儲存空間。

使用 Ignis 實現基於瀏覽器的 Obsidian 存取

Ignis 透過將 Obsidian 的 Electron API 替換為 Web API,使得 Obsidian 的 JavaScript 程式碼能够直接在標準網頁瀏覽器中執行。您所有的 Markdown 筆記和附件都將直接儲存在託管伺服器的本地檔案系統中。

不過,相比於獨立執行的 Obsidian 桌面用戶端,網頁端還存在一些局限性。由於瀏覽器沙箱環境的限制,某些依賴於 Electron 或 Node.js 特有 API 的功能或第三方外掛將無法正常運作。詳情請參閱 Ignis 官方文件中的 局限性說明 以及 外掛相容性列表。

部署 Ignis

我們將使用 Docker 在 VPS 上安裝 Ignis,並將其對應掛載到本地的 ./vaults 資料夾中。隨後,我們將在伺服器上透過 Synch CLI 命令列用戶端將該本地目錄與我們之前設定的遠端同步筆記庫進行即時同步。

由於 Ignis 本身沒有內建的身份驗證機制,為了確保隱私,我們必須將其安全地隱藏在 Cloudflare Zero Trust 私有網路中。

建立 DNS 記錄

將網域添加至 Caddyfile

在您的 Caddyfile 中以相同的方式為 obsidian.pafor.me 設定反向代理:

{$OBSIDIAN_DOMAIN} {
  encode zstd gzip
  reverse_proxy host.docker.internal:9898
}

使用 Docker 啟動 Ignis

在 VPS 上將以下 Docker Compose 設定儲存為 ignis-docker-compose.yml:

services:
  ignis:
    image: nobbe/ignis:latest
    ports:
      - "9898:8080"
    environment:
      # match these to your host user (run: id)
      - PUID=1000
      - PGID=1000
      - WS_ORIGINS=https://obsidian.pafor.me
    volumes:
      - ./vaults:/vaults
      - ./data:/app/data
      - obsidian-app:/app/obsidian-app
    restart: unless-stopped

volumes:
  obsidian-app:
  • 在主機端使用 9898 連接埠,因為 8080 是一個非常常用且容易衝突的連接埠。
  • 在您的 VPS 上執行 id 命令,獲取目前主機使用者的 UID 和 GID,並將其填寫到設定檔中,以確保檔案系統具備正確的讀寫權限。
  • 設定 WS_ORIGINS,僅允許來自您指定網域的 WebSocket 連線,提高安全性。

啟動 Ignis 容器:

docker compose -f ignis-docker-compose.yml up -d

當您在網頁瀏覽器中存取您的網域名稱時,將會彈出 'Vault Manager'(筆記庫管理器)。由於此時資料夾為空,它不會顯示任何本地筆記庫。在下一節中,我們將設定 'Synch CLI',從我們之前設定的遠端同步伺服器中拉取筆記。

解決 Docker 帶來的防火牆失效問題

預設情況下,Docker 會自動在系統底層插入自己的 DNAT 與 FORWARD 鏈規則,直接將外部公網流量轉發至作用中的容器連接埠。這會完全繞過 Ubuntu 預設的 UFW 或 iptables INPUT 鏈防火牆保護。為了阻止外部未經授權的存取並保持容器的絕對私有,我們需要手動將以下規則新增至 iptables 中的 DOCKER-USER 鏈:

# 阻斷所有外部公網流量的直接存取
sudo iptables -I DOCKER-USER -i ext_if -j DROP 

# 僅允許來自您的 Cloudflare WARP 用戶端私有 IP 的存取流量
sudo iptables -I DOCKER-USER -i ext_if -s 100.96.0.10 -j ACCEPT

設定 Synch CLI 命令列同步工具

Synch CLI 是一款無介面的命令列工具,即使在没有安裝 Obsidian 桌面應用的遠端伺服器上,它也能讓本地目錄與遠端筆記庫进行即時同步。

從您之前克隆的 synch 倉庫源碼中建置 Synch CLI。建置過程需要 Node.js >= 22.5(因為 CLI 依賴於 node:sqlite 以及 fetch、WebSocket 和 WebCrypto 等全域瀏覽器原生 API)和 pnpm(由於整個倉庫是一個使用了 pnpm@10.33.0 版本管理器的 pnpm 工作區):

# Check versions
node --version   # must be >= 22.5
pnpm --version

# In the repos root
pnpm install

# Build the CLI bundle
pnpm -C apps/cli build

# After a successful build you have `apps/cli/dist/synch.js`. Make it executable and put it on your PATH
chmod +x apps/cli/dist/synch.js
ln -sf "$PWD/apps/cli/dist/synch.js" "$HOME/.local/bin/synch"

# Verification
synch --help

由於 Synch CLI 執行在与您的 Synch 遠端同步伺服端相同的 VPS 上,它能够直接自動連線至本地的 API 服務連接埠。如果您將它們部署在不同的伺服器上,請執行 synch login --api-url <remote-synch-api-url> 来手動定義您的遠端目標 API 端點。

在您的 VPS 終端機中執行 synch login 命令,您將獲得一個用於身份驗證的登入 URL:

使用與您在 Obsidian 桌面端 Synchrun 插件中註冊的相同信箱地址,透過該網頁連結進行登入授權。

執行 synch vault connect --vault ~/vaults/<vaultname> --vault-id asadqe-7b29-4677-fsad-234asdafasd 來將您 VPS 上的本地筆記庫目錄與遠端自建伺服器上的筆記庫進行關聯:

您可以透過打開桌面端 Obsidian 中的 Synchrun 外掛設定,點擊 「管理遠端筆記庫」(Manage remote vaults) 來找到您的遠端筆記庫 ID。該操作會打開一個網頁並列出您所有的遠端筆記庫,每個庫旁邊都附帶有一個 GUID 格式的唯一識別碼(例如:123e4567-e89b-12d3-a456-426614174000):

在提示時輸入您的筆記庫密碼以確立關聯。關聯成功後,執行 synch sync --vault ~/vaults/<vault-name> 來進行您的首次全量同步。首次同步根據您的檔案大小,可能會耗費一些時間。

為了讓同步全自動進行,我們可以設定並啟用一個 systemd 系統守護服務,在背景持續執行 synch watch 監聽檔案變化,以確保 VPS 上的筆記在系統開機時即可實現毫秒級自動同步:

sudo tee /etc/systemd/system/synch-watch.service <<'EOF'
[Unit]
Description=Synch vault watcher
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
User=<username>
ExecStart=/home/<username>/.local/bin/synch watch --vault /home/<username>/vaults/<vault-name>
WorkingDirectory=/home/<username>/vaults
Environment="PATH=/home/<username>/.local/bin:/home/<username>/.cargo/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
Environment="HOME=/home/<username>"
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable --now synch-watch.service

現在,在瀏覽器中打開 obsidian.pafor.me,您會發現其使用者介面和排版版面與桌面端原生 App 幾乎完全一致:

點擊左下角的設定圖示可以發現,除了需要手動重新安裝第三方社群外掛外,幾乎所有的 Obsidian 核心設定與功能均已完美保留:

為了測試整個同步閉環,您可以透過 Ignis 網頁端直接新增一篇筆記:

該筆記會立即被同步回您的 Obsidian 桌面用戶端。需要注意的是,空白資料夾不會在 Ignis 網頁端中顯示。

在行動端手機瀏覽器上存取 obsidian.pafor.me 的實際效果:

當您在 Ignis 網頁端中刪除筆記時,它們會被安全地移至本地筆記庫的 ~/vaults/<vault-name>/.trash 垃圾桶資料夾中,以防誤刪。

自建 Obsidian 同步服務的一些結語

透過將 Synch 與 Ignis 結合,您可以使用完全處於自己掌控之下的 VPS 伺服器硬體,無縫地實現 Obsidian 筆記庫的多端同步與網頁端存取。而將這些服務整體託管於 Cloudflare Zero Trust 私有網路之中,又為您提供了極致的安全物理邊界,從根本上阻断了公網暴露帶來的安全隱患。

當然,Ignis 的初衷並不是為了完全替代本地的 Obsidian 桌面用戶端。相反,它更像是一個極其便利的臨時橋梁,供您在沒有攜帶主力電腦時,能夠隨時隨地透過任意瀏覽器快速存取和編輯自己的筆記。對於日常高強度的寫作與重度筆記庫管理,本地原生用戶端仍然是更加舒適、高效的選擇。

由於 Synch 採用了堅固的端到端加密機制,您的遠端筆記庫密碼必須具備足夠強的複雜度以抵禦暴力破解攻擊。同時,請務必牢記該密碼,因為同步伺服端不會儲存任何未加密的筆記庫金鑰。一旦遺忘該密碼,您的全部筆記資料將徹底無法復原。此外,由於所有資料均保存在您的自建 VPS 上,您需要自行承擔並妥善做好伺服器的主機安全防護、以及自動快照與備份管理。

儘管 Synch 內建了加密歷史版本管理和已刪除檔案復原機制,能為您規避絕大多數意外資料遺失,但為了萬一失,我們依然強烈建議您在第三方實體介質上定期保留一份獨立的 Obsidian 筆記庫離線備份。

References

相關文章