起因
最近obsidian的remotely save同步玩腻了,每次都要手动太麻烦了,而且它是根据文件的新旧来处理差异的,要是同步插件的话,bug更多了。
后来刷论坛的时候发现了Self-hosted LiveSync,看了一下非常优美,可以实现实时同步,同步的速度也很快,就是需要一个服务器,这是官方的例图

这个项目部署还是有点麻烦的,但是网上和坛里的教程都不是那么完整,要么就是比较旧的,所以我部署后打算简单做个教程并说明一些踩坑点。
前提条件
- 一台服务器
- 一个域名
原理
通过 CouchDB 作为后端数据库,在多个设备之间实现实时同步、冲突解决 和 历史版本保存。
-
CouchDB 是一个 同步笔记的中转站。
-
插件相当于一个「上传/下载客户端」,不断地 检测本地文件变化 → 更新数据库 → 从数据库拉取最新内容。
-
最终效果:实现了官方一样的实时同步,但数据完全掌握在自己手里。
部署过程
第一步docker部署CouchDB数据库
- docker-compose配置
services:
couchdb:
image: couchdb:latest
container_name: couchdb-for-ols
user: 5984:5984
environment:
- COUCHDB_USER=user_name #输入账号
- COUCHDB_PASSWORD=passport #输入密码
volumes:
- ./couchdb-data:/opt/couchdb/data
- ./couchdb-etc:/opt/couchdb/etc/local.d
ports:
- 5984:5984
restart: unless-stopped
注意:创建挂载目录并修改权限,否则couchDB无法读写,docker会启动失败
mkdir -p ./couchdb-data ./couchdb-etc
sudo chown -R 5984:5984 ./couchdb-data ./couchdb-etc
- 拉取运行容器
docker-compose up -d - 现在可以通过
http://ip:5984/_utils来访问数据库了
接下来初始化数据库
- 官方给了一键脚本,也可以手动操作但是很麻烦
# 添加环境变量
export hostname=localhost:5984
# 之前docker-compose.yml配置里设置的账号密码
export username=user_name
export password=passport
# 执行脚本
curl -s https://raw.githubusercontent.com/vrtmrz/obsidian-livesync/main/utils/couchdb/couchdb-init.sh | bash
- 结果如下时,初始化完成。
-- Configuring CouchDB by REST APIs... -->
{"ok":true}
""
""
""
""
""
""
""
""
""
<-- Configuring CouchDB by REST APIs Done!
- 在CouchDB中创建一个数据库
- 进入
http://ip:5894/_utils并输入账号密码登入 - 进入
Databases,点击Create Database创建一个数据库,名称自起如obsidian-notes Partitioning分区选择第一个Non-partitioned
- 进入
配置nginx反向代理
如果仅在局域网内使用且仅使用电脑端设备,可以跳过此步骤。
要实现移动端同步的话则需要配置反向代理配置ssl证书。
- 反向代理正常配置就好了,官网有基础的配置 obsidian-livesync/docs/troubleshooting.md at main · vrtmrz/obsidian-livesync · GitHub
- 我的nginx配置如下
server {
listen 80;
server_name 反代域名;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
server_name 反代域名;
ssl_certificate 证书路径;
ssl_certificate_key 密钥路径;
location / {
proxy_pass http://127.0.0.1:5984;
proxy_redirect off;
proxy_buffering off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
client_max_body_size 0;
}
- 再者懒得弄配置也可以通过宝塔、1panel、nginx proxy manager等一键反代,我就不细讲了
Obsidian客户端 Self-hosted Livesync 插件设置
- 前往社区下载 Self-hosted Livesync 插件并启用,先去设置切换一下中文
- 点击卫星按钮
进入远程配置
- 远程类型:CouchDB
- 服务器URI:https://你反代的域名(使用移动端同步)或 http://ip:5984(只在局域网内使用且仅使用电脑端同步)
- 用户名:CouchDB账号
- 密码:CouchDB密码
- 数据库名称:创建的CouchDB数据库名称如
obsidian-notes - 点击测试数据库连接,出现
Connect to 数据库名称,则连接成功 - 再点击下面的check检查按钮,全是绿勾勾则成功,有错误就选择fix修正
- 下方
Property Encryption设置一个密码开启端对端加密
- 再切换到同步设置中选择同步模式LiveSync就是实时同步
- 如果要同步插件、设置、主题的话
- 进入self-hosted livesync中启用高级功能,上方会出现一个插头
- 点击它进入后先设置设备名称,所有同步设备都要统一名称,之后就能开启自定义同步了
- 点击下方的
Open,可以查看已经上传的设置配置 - 如何将已上传的插件同步到其他设备我研究了好一会
- 首先点击
Maintenance mode - 然后将你要选择同步的插件的
-符号切换成设备名称 - 这时右边出现了一个勾,点击它或者点上面的
Apply All Selected就能实现同步该插件了
- 首先点击
Obsidian 客户端使用注意
-
第一次同步:建议选 “以本地文档为准”,它会自动重构数据库,不然容易混乱。
-
多设备:新设备尽量用空仓库开始,不要直接在已有 vault 上开同步,否则容易出现差异。
-
插件同步:确实有 bug,插件/主题/设置我也建议用 Git 来维护,而不是完全依赖 Livesync。

