---
title: "如何在多台裝置之間安全地同步 Obsidian 本地筆記庫"
description: "本文詳細介紹如何利用開源工具 Synch 與 Ignis 在您的 VPS 上搭建私有同步伺服器，從而在多台電腦、手機以及平板裝置之間安全地同步您的 Obsidian 筆記庫。我們還將所有服務全部部署在 Cloudflare Zero Trust 私有網路中，從而完全阻斷來自公網的惡意掃描與未授權存取，保障數據隱私安全。"
canonical_url: "https://techvoyage.dev/tw/article/sync-obsidian-across-devices"
last_updated: "2026-10-20T09:53:55.197Z"
---

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

![跨多裝置同步的 Obsidian 本地筆記庫的插圖](https://inimages.techvoyage.dev/articles/Sync%20Obsidian%20Across%20Devices/obsidian-multi-device-sync-illustration.webp)市面上有許多針對 Obsidian 的同步方案，但在衝突處理、加密和數據自主權方面，它們或多或少都做出了一些妥協。[Synch](https://github.com/hjinco/synch) 是一款開源應用，它可以在自建伺服器上實現具備端到端加密和衝突解決機制的 Obsidian 筆記庫同步。

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

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

![使用 Cloudflare Zero Trust 安全網路同步 Obsidian 的架構圖](https://inimages.techvoyage.dev/articles/Sync%20Obsidian%20Across%20Devices/obsidian-sync-cloudflare-zero-trust-architecture.webp)<article-card description="學習如何使用 Cloudflare WARP 和 Zero Trust 安全地在全網範圍內暴露和存取您的 Hermes Agent，而無需在防火牆上開啟任何入站連接埠。" image="https://inimages.techvoyage.dev/articles/Exposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP/EN-Exposing-Hermes-Agent-to-Private-Network-Using-Cloudflare-WARP.webp" image-alt="使用 Cloudflare Zero Trust 和 WARP 隧道安全地將 Hermes Agent 暴露到私有網路中" label="相關指南" min-read="8" title="如何使用 Cloudflare WARP 私密地公開暴露 Hermes Agent" to="/article/exposing-hermes-agent-to-private-network-using-cloudflare-warp">



</article-card>

## 使用 Synch 安全同步 Obsidian 筆記庫

**Synch** 提供以下特性：

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

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

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

### 在您的 VPS 上部署 Synch

#### 建立網域名稱解析

在 Cloudflare 中建立一條 A 記錄，並將其代理狀態設定為**僅限 DNS**（繞過 Cloudflare CDN）。

![在 Cloudflare 中為 Synch 同步伺服器設定 DNS A 記錄](https://inimages.techvoyage.dev/articles/Sync%20Obsidian%20Across%20Devices/cloudflare-dns-a-record-synch-server.webp)#### 在 Ubuntu 上使用 Docker 安裝 Synch

##### 克隆倉庫

```bash
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`：請使用此 [線上金鑰產生工具](/tw/tools/secret-key-hex) 或在終端機中執行兩次 `openssl rand -hex 32` 來產生高強度的隨機金鑰。
- `AUTH_ALLOWED_EMAILS`：允許註冊並建立帳號的電子信箱列表（用英文逗號分隔）。

##### 将网域添加至 Caddyfile

有關如何將 Cloudflare DNS 模組整合到 Caddy 中並使用 Docker 容器啟動的詳細設定方法，請參閱我們的 [自建 Buzz 協作平台文章](/article/self-hosting-buzz-as-the-workspace-where-ai-agents-become-colleagues#_4-enable-https-with-caddy)。

<article-card description="學習如何在 Docker 容器中設定 Caddy 反向代理，並利用 Cloudflare DNS Challenge 自動申請和管理 SSL/TLS 憑證。" image="https://inimages.techvoyage.dev/articles/Self-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues/EN-Self-Hosting-Buzz-As-The-Workspace-Where-AI-Agents-Become-Colleagues.webp" image-alt="在自建工作區中設定帶有 Cloudflare DNS API 權杖的 Caddy，實現 SSL/TLS 憑證的自動申請與管理" label="自建指南" min-read="12" title="自建 Block 旗下 Buzz 協作平台：輕鬆構建人類與 AI 智能體高效協同工作的全新共享工作空間" to="/article/self-hosting-buzz-as-the-workspace-where-ai-agents-become-colleagues#_4-enable-https-with-caddy">



</article-card>

在您的 Caddyfile 中添加 `SYNCH_DOMAIN` 設定，並將其反向代理指向 8787 連接埠（Synch 容器內部執行的連接埠）：

```json
{
  acme_dns cloudflare {env.CLOUDFLARE_API_TOKEN}
}

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

啟動容器：

```bash
docker compose up -d
```

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

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

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

#### 在 Obsidian 中安裝 Synch 插件

打開 Obsidian 的「設定」（Settings），導覽至「第三方外掛」（Community plugins），然后點擊 **「瀏覽」（Browse）** 按鈕：

![在 Obsidian 設定中瀏覽第三方社群外掛](https://inimages.techvoyage.dev/articles/Sync%20Obsidian%20Across%20Devices/obsidian-community-plugins-browse.webp)搜尋並安裝 **'Synchrun'** 外掛：
![在 Obsidian 中安裝 Synchrun 同步外掛](https://inimages.techvoyage.dev/articles/Sync%20Obsidian%20Across%20Devices/obsidian-install-synchrun-plugin.webp)

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

![在 Synchrun 外掛設定中配置您的自建伺服器 URL](https://inimages.techvoyage.dev/articles/Sync%20Obsidian%20Across%20Devices/obsidian-synchrun-plugin-settings-self-hosted.webp)點擊 **「在當前裝置上登入」（Sign in on this device）** 按鈕。接著，使用您在 `.env` 中 `AUTH_ALLOWED_EMAILS` 列表中指定的信箱地址進行註冊，註冊成功後您将看到以下授權頁面：

![Synchrun 外掛的帳號授權登入頁面](https://inimages.techvoyage.dev/articles/Sync%20Obsidian%20Across%20Devices/synchrun-account-authorization-page.webp)點擊 **「允許 Obsidian 登入」（Allow Obsidian sign-in）** 按鈕：

![允許 Obsidian 透過 Synch 登入](https://inimages.techvoyage.dev/articles/Sync%20Obsidian%20Across%20Devices/synchrun-allow-obsidian-signin.webp)點擊 **「返回 Obsidian」（Return to Obsidian）** 按鈕，隨後點擊 **「建立筆記庫」（Create vault）**：
![在 Synchrun 中建立新的遠端同步筆記庫](https://inimages.techvoyage.dev/articles/Sync%20Obsidian%20Across%20Devices/obsidian-synchrun-create-remote-vault.webp)

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

![為 Obsidian 遠端筆記庫設定高強度安全密碼](https://inimages.techvoyage.dev/articles/Sync%20Obsidian%20Across%20Devices/obsidian-synchrun-vault-password-setup.webp)同步過程將立即開始，根據您的筆記庫檔案大小，這可能會需要一些時間。同步完成後，介面將顯示您所使用的總儲存空間。

![Synchrun 同步完成並顯示所使用的總儲存空間](https://inimages.techvoyage.dev/articles/Sync%20Obsidian%20Across%20Devices/obsidian-synchrun-sync-completed-storage.webp)## 使用 Ignis 實現基於瀏覽器的 Obsidian 存取

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

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

### 部署 Ignis

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

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

#### 建立 DNS 記錄

![在 Cloudflare 中為 Ignis 網頁端設定 DNS A 記錄](https://inimages.techvoyage.dev/articles/Sync%20Obsidian%20Across%20Devices/cloudflare-dns-a-record-ignis.webp)#### 將網域添加至 Caddyfile

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

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

#### 使用 Docker 啟動 Ignis

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

```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** 容器：

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

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

![Ignis 網頁用戶端中當前為空的筆記庫管理器](https://inimages.techvoyage.dev/articles/Sync%20Obsidian%20Across%20Devices/ignis-vault-manager-empty.webp)#### 解決 Docker 帶來的防火牆失效問題

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

```bash
# 阻斷所有外部公網流量的直接存取
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 工作區）：

```bash
# 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 端點。

![在終端機中輸入自訂 API URL 執行 synch login 登入指令](https://inimages.techvoyage.dev/articles/Sync%20Obsidian%20Across%20Devices/synch-login-api-url-terminal.webp)

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

![終端機輸出顯示的 Synch CLI 認證 URL](https://inimages.techvoyage.dev/articles/Sync%20Obsidian%20Across%20Devices/synch-login-auth-url-terminal.webp)

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

![Synch CLI 授權網頁端登入成功](https://inimages.techvoyage.dev/articles/Sync%20Obsidian%20Across%20Devices/synch-web-login-success.webp)

執行 `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`）：

![在 Synchrun 外掛中管理遠端筆記庫](https://inimages.techvoyage.dev/articles/Sync%20Obsidian%20Across%20Devices/synchrun-manage-remote-vaults.webp)![在 Synchrun 中定位唯一的遠端筆記庫 ID](https://inimages.techvoyage.dev/articles/Sync%20Obsidian%20Across%20Devices/synchrun-remote-vault-id.webp)

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

![Synch CLI 中顯示首次拉取同步筆記庫的進度](https://inimages.techvoyage.dev/articles/Sync%20Obsidian%20Across%20Devices/synch-cli-initial-sync-progress.webp)

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

```bash
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 網頁介面](https://inimages.techvoyage.dev/articles/Sync%20Obsidian%20Across%20Devices/ignis-web-interface-desktop-view.webp)點擊左下角的設定圖示可以發現，除了需要手動重新安裝第三方社群外掛外，幾乎所有的 Obsidian 核心設定與功能均已完美保留：

![Ignis 網頁介面中的社群第三方外掛設定](https://inimages.techvoyage.dev/articles/Sync%20Obsidian%20Across%20Devices/ignis-settings-community-plugins.webp)為了測試整個同步閉環，您可以透過 Ignis 網頁端直接新增一篇筆記：

![透過 Ignis 網頁介面新增一篇 Markdown 筆記](https://inimages.techvoyage.dev/articles/Sync%20Obsidian%20Across%20Devices/ignis-create-new-note-web.webp)該筆記會立即被同步回您的 Obsidian 桌面用戶端。需要注意的是，空白資料夾不會在 **Ignis** 網頁端中顯示。

![新建立的筆記已成功同步到本地 Obsidian 桌面用戶端](https://inimages.techvoyage.dev/articles/Sync%20Obsidian%20Across%20Devices/obsidian-desktop-synced-note.webp)在行動端手機瀏覽器上存取 `obsidian.pafor.me` 的實際效果：

![在行動端手機瀏覽器上存取 Ignis 網頁用戶端的側邊欄選單](https://inimages.techvoyage.dev/articles/Sync%20Obsidian%20Across%20Devices/ignis-mobile-view-sidebar.webp)![在行動端手機瀏覽器上存取 Ignis 網頁用戶端的 Markdown 編輯器](https://inimages.techvoyage.dev/articles/Sync%20Obsidian%20Across%20Devices/ignis-mobile-view-editor.webp)

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

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

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

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

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

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

## References

- [Synch Deploy with Docker Compose](https://synch.run/self-hosting-docker/)
- [Ignis Deploy with Docker](https://ignis.thiefling.com/docs/server/deploy/)
- [How does end-to-end encryption work in Synch?](https://synch.run/blog/encryption-and-decryption/)
