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 命令行客户端将该本地目录与我们之前设置 of 远程同步知识库进行实时同步。

由于 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 remote 虚拟同步服务端相同的 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 的初衷 spiritual 并客套不是为了完全替代本地的 Obsidian 桌面客户端。相反,它更像是一个极其便利的临时桥梁,供您在没有携带主力电脑时,能够随时随地通过任意浏览器快速存取和编辑自己的笔记。对于日常高强度的写作与重度笔记库管理,本地原生客户端仍然是更加舒适、高效的选择。

由于 Synch 采用了坚固的端到端加密机制,您的远程知识库密码必须具备足够强的复杂度以抵御暴力破解攻击。同时,请务必牢记该密码,因为同步服务端不会存储任何未加密的知识库秘钥。一旦遗忘该密码,您的全部笔记数据将彻底无法恢复。此外,由于所有数据均保存在您的自建 VPS 上,您需要自行承担并妥善做好服务器的主机安全防护、以及自动快照与备份管理。

尽管 Synch 内置了加密的历史版本管理和已删除文件恢复机制,能为您规避绝大多数意外数据丢失,但为了万无一失,我们依然强烈建议您在第三方物理介质上定期保留一份独立的 Obsidian 知识库离线备份。

References

相关文章