
如何在多台设备之间安全地同步 Obsidian 本地知识库
本文详细介绍如何利用开源工具 Synch 与 Ignis 在您的 VPS 上搭建私有同步服务器,从而在多台电脑、手机以及平板设备之间安全地同步您的 Obsidian 知识库。我们还将所有服务全部部署在 Cloudflare Zero Trust 私有网络中,从而完全阻断来自公网的恶意扫描与未授权访问,保障数据隐私安全。
目录
Obsidian 是一款本地优先的知识管理应用。每一个笔记在设备上都是一个本地 Markdown 文件,并完全处于您的掌控之中。然而,我们通常希望在笔记本电脑、手机和其他设备上共享同一个本地知识库,或者希望在某些时候能够通过网页浏览器远程访问它。

市面上有很多针对 Obsidian 的同步方案,但在冲突处理、加密和数据自主权方面,它们或多或少都做出了一些妥协。Synch 是一款开源应用,它可以在自建服务器上实现具备端到端加密和冲突解决机制的 Obsidian 知识库同步。
虽然 Obsidian 的本地优先方案在绝大多数情况下都能完美工作,但在某些场景下,我们可能仍需要通过网页浏览器远程访问并编辑笔记。Ignis 是一款开源应用,它能够在网页浏览器中以接近原生的体验运行 Obsidian,让您能够直接读取和编辑知识库。
在本文中,我们将在一台 VPS(虚拟专用服务器)上部署 Synch 和 Ignis,并将它们安全地托管在 Cloudflare Zero Trust 私有网络中,而无需将它们直接暴露在公网上。


相关指南
如何使用 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 协作平台文章。

自建指南
自建 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
相关文章

AI 与智能体
教程:使用 Cloudflare WARP 安全地将 Hermes Agent 暴露至私有网络
本文深入探讨如何使用 Cloudflare WARP 与 Zero Trust 技术,在完全不需要开启任何防火墙入站端口的情况下,安全地将您的 Hermes Agent 暴露到私有网络中,从而实现全球范围内的安全访问。这为您构建专属私有远程 AI 基础设施打下坚实基础。
5 分钟阅读
Cloudflare
基于Cloudflare Workers与MCP协议构建个人专属的AI持久化记忆系统,解决Context空白痛点
学习如何利用Cloudflare Workers、Vectorize与MCP协议构建自托管的AI持久化记忆系统(Second Brain)。在Claude、Gemini和Obsidian之间实现多Agent上下文共享。
35 分钟阅读
安全
使用MDM配置文件在macOS上无缝切换与配置多个Cloudflare WARP零信任组织的完整指南
本指南将详细介绍如何在macOS系统上,通过使用MDM .mobileconfig配置文件,实现多个Cloudflare WARP零信任组织或账户之间的无缝切换。本文为企业IT系统管理员提供了一套完整的、可直接落地部署的操作指南与配置步骤模板,帮助企业轻松管理并确保终端用户的网络安全与合规审计要求。
2 分钟阅读
上一篇
自建 Block 旗下 Buzz 协作平台:轻松构建人类与 AI 智能体高效协同工作的全新共享工作空间
本教程将手把手带您在 Ubuntu VPS 上部署自托管的 Block 旗下 Nostr 中继服务 Buzz,并配置 Cloudflare DNS 安全网络。我们将帮助您搭建起一个安全性的共享工作空间,让您的团队成员与多个 AI 智能体(如 Claude、Kimi)能够基于加密身份进行高效沟通、共享项目上下文并实现无缝协作。

下一篇
教程:使用 Cloudflare WARP 安全地将 Hermes Agent 暴露至私有网络
本文深入探讨如何使用 Cloudflare WARP 与 Zero Trust 技术,在完全不需要开启任何防火墙入站端口的情况下,安全地将您的 Hermes Agent 暴露到私有网络中,从而实现全球范围内的安全访问。这为您构建专属私有远程 AI 基础设施打下坚实基础。