---
title: "如何在多台设备之间安全地同步 Obsidian 本地知识库"
description: "本文详细介绍如何利用开源工具 Synch 与 Ignis 在您的 VPS 上搭建私有同步服务器，从而在多台电脑、手机以及平板设备之间安全地同步您的 Obsidian 知识库。我们还将所有服务全部部署在 Cloudflare Zero Trust 私有网络中，从而完全阻断来自公网的恶意扫描与未授权访问，保障数据隐私安全。"
canonical_url: "https://techvoyage.dev/zh/article/sync-obsidian-across-devices"
last_updated: "2026-10-20T09:53:55.131Z"
---

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`：请使用此 [在线秘钥生成工具](/zh/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** 命令行客户端将该本地目录与我们之前设置 of 远程同步知识库进行实时同步。

由于 **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 remote 虚拟同步服务端相同的 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** 的初衷 spiritual 并客套不是为了完全替代本地的 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/)
