Obsidian多端同步插件LiveSync
网友 Leo 和 Paco反馈,群晖升级到 DSM7.2 ,注册表可以搜索镜像,根据 Leo 贴的 /var/packages/Docker/etc/dockerd.json 的内容,DSM7.2 应该是使用了 https://docker.nju.edu.cn 作为注册表镜像,但老苏测试过下面几种情况都不行,有需要的可以自己实际测试
- 上海:
DSM6.2.3和DSM6.1.7; - 深圳:
DSM7.1.1;
本文应网友
Mr.Chow的要求折腾;
这个需求有一段时间了,一方面老苏自用的方案是 Obsidian + syncthing,另一方面通过 cloudflare Tunnel 反代的域名连接时,一直有问题,就这么一直搁置了。最近老苏折腾了通过 https 访问 Tailscale 网络后, 正好可以用来试验一下
文章传送门:用自定义域名访问tailscale节点
什么是 Obsidian LiveSync ?
Obsidian LiveSync是一个社区实现的Obsidian笔记同步插件。使用CouchDB数据库作为同步的中间服务器,能够在所有兼容Obsidian的平台上使用。需要注意的是,Obsidian LiveSync与官方的Obsidian Sync不兼容。
什么是 CouchDB ?
Apache CouchDB是一个开源数据库,专注于易用性和成为 “完全拥抱web的数据库”。它是一个使用JSON作为存储格式,JavaScript作为查询语言,MapReduce和HTTP作为API的面向文档的NoSQL数据库。

前期准备
将下面的内容保存到 local.ini 文件
源文件来自:https://github.com/vrtmrz/self-hosted-livesync-server/blob/main/conf/local.ini,老苏测试验证时有微调,但其实可能并没有起作用,应该可以用官方的原始的版本;
1 | [couchdb] |
这个文件要放入 couchdb 目录
安装 CouchDB
在群晖上以 Docker 方式安装。
Web GUI 安装
在注册表中搜索 couchdb ,选择第一个 couchdb,版本选择 latest。
本文写作时,
latest版本对应为3.3.2;

卷
在 docker 文件夹中,创建一个新文件夹 couchdb,并在其中建一个子文件夹 data,将前面准备的 local.ini 放入 couchdb 目录

| 文件夹 | 装载路径 | 说明 |
|---|---|---|
docker/couchdb/data |
/opt/couchdb/db |
存放数据库 |
docker/couchdb/local.ini |
/opt/couchdb/etc/local.ini |
配置文件 |

端口
本地端口不冲突就行,不确定的话可以用命令查一下
1 | # 查看端口占用 |
| 本地端口 | 容器端口 |
|---|---|
5984 |
5984 |
默认开了 3 个端口

但实际上 4369 和 9100 用于集群部署,只有 5984 是 CouchDB 的主要端口,用于提供 HTTP API 和 Web 界面。无论是单机模式还是集群模式,都使用这个端口,所以老苏把不用的端口删掉了

环境
| 可变 | 值 |
|---|---|
COUCHDB_USER |
用户 |
COUCHDB_PASSWORD |
密码 |

docker cli 安装
如果你熟悉命令行,可能用 docker cli 更快捷
1 | # 新建文件夹 couchdb |

在 FileStation 中打开 local.ini,将上面的内容粘贴进去

接下来就可以用 docker-cli启动了
1 | # 运行容器 |

docker-compose 安装
也可以用 docker-compose 安装,将下面的内容保存为 docker-compose.yml 文件
1 | version: '3' |
将 docker-compose.yml 和 local.ini 放入当前目录,然后一键启动
1 | # 一键启动 |

修改 local.ini
每次容器启动之后,local.ini 的文件所有者都会变成 5984:5984。这是 docker 镜像的限制,请修改文件所有者或者赋予写权限后再编辑 local.ini

编辑权限,勾选 写入 权限

之后就有 w 权限了

每次重启之后,如果想要修改 local.ini 文件,都要重复上面的操作
运行
在浏览器中输入 http://群晖IP:5984 就能看到登录界面

输入前面设置的 COUCHDB_USER 和 COUCHDB_PASSWORD 的值,会看到一行 JSON
1 | {"couchdb":"Welcome","version":"3.3.2","git_sha":"11a234070","uuid":"f151341b0599adeb5deacd59baa02074","features":["access-ready","partitioned","pluggable-storage-engines","reshard","scheduler"],"vendor":{"name":"The Apache Software Foundation"}} |

在浏览器中输入 http://群晖IP:5984/_utils/

可以修改 CORS等参数设置

反向代理
如果只有PC端需要同步,使用 http 协议即可,但是如果移动端也要同步,则需要使用 https 协议,所以反代是必须的
假设我们要使用的域名是
https://ol.laosu.ml
开始尝试过 cloudflared + npm 方案,但在同步测试时,会报错

在调试界面能看到下面的日志,但没找到解决办法
1 | acess to fetch at 'https://ol.laosu.ml/test/' from origin 'app://obsidian.md' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled. |
下面采用的是 tailscale + npm方案

没问题的话可以都勾上

客户端插件
【注意】:在进行下面的操作前,记得先备份好笔记,备份好笔记,备份好笔记~~~
老苏只测试了
windows版的Obsidian客户端,其他平台的未验证,尤其是手机端未验证,因为老苏习惯把图片和附件也放在obsidian库中,所以整个资料库有30G以上;
在插件市场搜索 livesync

安装完成后,还需要启用插件

局域网使用,URI 使用 http://群晖IP:5984
- Usename:对应
COUCHDB_USER的值; - Password:对应
COUCHDB_PASSWORD的值; - Database Name:随便填;

互联网使用,URI 使用前面反代的域名https://ol.laosu.ml即可

Device name 是用来区分不同的终端的,启用同步

同步状态将显示在状态栏

可以在数据库中查看 test 库

进入库能查看记录

小结
虽然网上很少权威的评测,但是从网上能找到的资料看,在插入大量数据时, CouchDB 比 RDBMS(例如 MySQL)慢很多,主要原因是 CouchDB 使用 HTTP 协议来操作数据库,可能会造成网络性能略差。
参考文档
vrtmrz/obsidian-livesync
地址:https://github.com/vrtmrz/obsidian-livesyncvrtmrz/self-hosted-livesync-server
地址:https://github.com/vrtmrz/self-hosted-livesync-serverobsidian-livesync/docs/setup_own_server_cn.md at main · vrtmrz/obsidian-livesync · GitHub
地址:https://github.com/vrtmrz/obsidian-livesync/blob/main/docs/setup_own_server_cn.md不使用第三方软件实现Obsidian多平台实时同步 - 经验分享 - Obsidian 中文论坛
地址:https://forum-zh.obsidian.md/t/topic/2811Obsidian 与 CouchDB 的同步配置 - StarryVoid - Blog
地址:https://blog.starryvoid.com/archives/1164.html