不使用第三方软件实现Obsidian多平台实时同步

这篇文章涉及服务器配置、docker 技术,当然都是很初级的使用

相信很多人跟我一样,不喜欢使用第三方软件来同步 Obsidian 。每次要打开两个软件,很麻烦。这种情况在手机上最为明显。

这也是我为什么从 9 月多就接触了 Obsidian 但是一没有最为主力的原因。虽然印象笔记已经非常的不好用,但是他的同步真的非常的方便。

直到最近在翻看 Obsidian 的插件的时候接触到了这个插件 Self-hosted LiveSync(虽然也有一款支持 WebDav 的插件,但是试了一下连不上服务器,作者说目前 WebDav 还在测试中)这个插件真的非常的棒 :+1:t2:。实现了无感同步,甚至可以多平台实时同步。
引用一张作者的图:

搭建服务器端

Self-hosted LiveSync 使用的是CouchDB数据库,这是一个开源的具有版本控制的文档数据库。

你可使用 IBM 提供的 CouchDB 数据库,这里有作者写的教程 obsidian-livesync/setup_cloudant.md at main · vrtmrz/obsidian-livesync · GitHub

我们这里还是直接自己搭建,我是在家里的群辉 NAS 上搭建的,如果你没有 NAS 也可以在腾讯云、阿里云等云服务上搭建。优先推荐在 NAS 上搭建。

安装 docker

群辉直接再套件商店安装。云服务器用户使用下面的命令

docker version > /dev/null || curl -fsSL get.docker.com | bash
service docker restart

安装数据库

首先创建配置文件
local.ini

[couchdb]
single_node=true

[chttpd]
require_valid_user = true

[chttpd_auth]
require_valid_user = true
authentication_redirect = /_utils/session.html

[httpd]
WWW-Authenticate = Basic realm="couchdb"
enable_cors = true

[cors]
origins = app://obsidian.md,capacitor://localhost,http://localhost
credentials = true
headers = accept, authorization, content-type, origin, referer
methods = GET, PUT, POST, HEAD, DELETE
max_age = 3600

配置文件创建完成后,就可以启动 CouchDB :

docker run --rm -it -e COUCHDB_USER=admin -e COUCHDB_PASSWORD=password -v /opt/couchdb/db:/opt/couchdb/data -v /opt/couchdb/local.ini:/opt/couchdb/etc/local.ini -p 6900:5984 couchdb

其中:
COUCHDB_USER 后面的是你的密码
COUCHDB_USER 后面的是你的用户名
/opt/couchdb/local.ini 是配置文件的路径
/opt/couchdb/db 是数据库的路径
-p 6900:5984 前面的 6900 是暴露在外的端口。

以上的所有配置都是可以修改的。可以改成你自己的配置,云服务器请提前在安全组里放行相应的端口

群辉这么配置:
重启或者关闭 NAS 后自动启动

配置文件和数据库路径


用户名和密码

端口配置

访问以下网址,如果能打开则表示 CouchDB 已经启动:

http://你的 IP:你的端口

比如 http://127.0.0.1:6900 打开网站,账号密码就是上面设置的。

显示的内容是一个 JSON 字符串。这是正常的:

群辉无需其他设置。云服务器用户再次执行(注意替换端口、账号密码):

docker run -d --restart always  -e COUCHDB_USER=admin -e COUCHDB_PASSWORD=password -v /opt/couchdb/db:/opt/couchdb/data -v /opt/couchdb/local.ini:/opt/couchdb/etc/local.ini -p 6900:5984 couchdb

让这个镜像在后台运行,并且自动启动。

后端部分暂时就配置完成了。

配置插件

以下是桌面端 Obsidian 的配置,手机上还需要其他配置:

安装插件后,打开填写各项,URL 就是上面那个网址。database name 这里填写你的数据库名字。没有回自动创建,所以随便填就行。

端到端加密,如果你只需要同步文章,可以关闭。如果需要同步文章、插件、配置,那么必须打开

设置你的客户端和 Vault 的名字。我的理解是设置一个标示,跟其他 Vault 做区分。

这样配置完成之后,已经可以在桌面端相互同步了。

配置 Https

因为手机上的限制,想要在手机上使用同步功能还需要配置 https。

域名

虽然 IP 也可以申请 https 但是考虑到成本问题,最方便的还是使用域名,.com 应该是最便宜的。

反向代理服务端

使用云服务搭建的同学,推荐使用宝塔面板。安装宝塔面板

安装这里我就不多做介绍了。能看到这里我相信都能独立安装的。

使用 NAS 的同学,这里可能有点麻烦,你可以使用 DDNS 或者群辉自己提供的 QC ,如果有条件的也可以是使用 frp 等等。总之能连接到你 NAS 的办法都可以。

这里我自己用的是 FRP。

宝塔面板你可以这么操作:

  • 新建一个网站,并填写你的网站,如果是没有备案的域名,记得不要使用 80 端口。
  • 申请证书。

这里截图说一下:

建议申请 Let’s Encrypt 证书,申请简单、自动续期。

(emmm 应该都能看懂吧)

反向代理:

目标 URL 后面,的端口地址改成你自己设置的就可以了。前面的 IP 地址不需要修改。

配置完成后访问:

https://域名:端口(如果有) 正常情况下应该会打开一个和上面一样的网站。

参照上面桌面端的配置方法,只需要修改一下 URL 就好了。

不建议在手机上使用 LiveSync 可能会比较耗电。

补充一下群辉 NAS 的配置:

在安全里新增 域名证书。这里的域名就是你 FRP DDNS 等用到的证书

新增证书后一定要点击配置,将新增的证书应用到域名上。

然后使用群辉内置的反向代理

通常这么设置,域名填写你证书的额域名即可

之后就可以正常使用了。

23 个赞

非常好的文章!对那些需要免费同步的人很有帮助(借助IBM的免费服务,搭配此插件)。

经过多次踩坑,最后也找到了使用WebDav的方法。

fyears/remotely-save (github.com)

配合 go-webdav。下面给出一下我的配置文件。具体咋用可以直接看github README.md就可以了。(有手就行~

address: 0.0.0.0
port: 30001 # webdav listening port
auth: true
tls: false
cert: cert.pem
key: key.pem
prefix: /

# Default user settings (will be merged)
scope: .
modify: true
rules: []

# CORS configuration
cors:
  enabled: true
  credentials: true
  allowed_headers:
    - Authorization
    - Origin
    - X-Requested-With
    - Content-Type
    - Accept
    - DNT
    - X-CustomHeader
    - Keep-Alive,User-Agent
    - X-Requested-With
    - If-Modified-Since,Cache-Control
    - Content-Range
    - Range
    - Depth
    - Content-Length
  allowed_hosts:
    - app://obsidian.md
  allowed_methods:
    - GET
    - HEAD
    - POST
    - PUT
    - OPTIONS
    - MOVE
    - DELETE
    - COPY
    - LOCK
    - UNLOCK  
    - PROPFIND
    - MKCOL
  exposed_headers:
    - Content-Length
    - Content-Range


users:
  - username: user1
    password: password1
    scope: /data/obsidian
  - username: user2
    password: password2
    scope: /data/zotero

然后再Obsidian里面安装插件,然后进行配置。

1 个赞

之前试过这个插件。但是不知道为什么 连不上群晖的NAS 上的 WebDav Server 后来呢接触了这个。就没折腾了。

那就是我说的踩坑问题了,主要是作者,针对同源策略这个地方写的点问题。

而且群晖的WebDav没测试过,可以通过 ctrl+shift+i 调出开发者面板调试一下。

但是总体思路只能尝试 webdav去迁就这个插件。

找到问题了群晖的 WebDav 禁用了CORS 。目前似乎无解。只能群晖里再用docker开个 WebDav 服务

remotely-save 可以使用对象存储来同步,但没有自动同步有点麻烦,也没有同步的快捷键

使用阿里云轻量应用服务器成功同步,几个点需要注意:

  • 一开始使用宝塔面板的docker管理器安装couchdb,绑定域名添加反向代理都正常,数据库的操作面板正常,但是ob插件端无法连接服务器。使用原作者提供的方式命令行重装则成功了
  • 建议不同vault保管箱存在不同的数据库中,一个vault对应一个database
  • 如插件开发者所说,这是同步插件而非备份插件,云端的文件不是直接以md格式存储的,不能直接在服务器端进行修改操作。可以配合坚果云同步PC端文件进行更改。
  • 另外也不要同时使用多个平台上打开同步功能的ob,会跳出错误警告
1 个赞

我是用移动云平台的对象存储进行同步,存储的是.md格式,但配置文件是隐藏文件夹所以无法同步,另外感觉删除同步还是有点问题,有时候在A设备删除了的文件,B设备同步,会把B设备上已经删除的文件同步到云端,

还真是,
①我在A设备删除文件,然后在A同步,云端存储桶标记该文件为删除
②在B设备不删除该文件并进行同步,然后云端会再次把该文件重新上传
emmm,人麻了

GitHub上作者说:

"deletion" operation can only be triggered from local device. It’s because of the “minimal intrusive design”. May be changed in the future.

希望以后能改进吧,那这样删除文件就有点麻烦了。

如果要删除某个文件,那就得在每个本地设备手动删除该文件……这也太难受了

是的,感觉这个插件潜力很大

我都想换这个livesync了,但是我没有域名……

不知道.xyx域名可不可以,之前腾讯云做活动撸了个10年的

最好不要用插件作者给的docker 创建方式。因为这个方式它的数据库文件是默认存在docker 里面的,没有放在外面做持久化。你docker 重启或者服务器重启之后,数据就没有了。

随便买一个呗,最便宜的几块钱一年。

随便都行,只要是域名就行。不过国内的话,可能有的时候还需要备案。

谢谢提醒,不过电脑平板加坚果云备份,这个插件主要就用来同步

已经买了,想问下我现在有个域名和国内的云服务器(都在阿里云买的),然后我可不可以不备案来实现https访问?

国内的不行。必须备案。如果有香港,或者国外的可以不备案