网友 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,老苏测试验证时有微调,但其实可能并没有起作用,应该可以用官方的原始的版本;
[couchdb]
single_node=true
max_document_size = 50000000
[chttpd]
require_valid_user = true
max_http_request_size = 4294967296
[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, cache-control, x-requested-with
methods = GET, PUT, POST, HEAD, DELETE, OPTIONS
max_age = 3600
这个文件要放入 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 | 配置文件 |
端口
本地端口不冲突就行,不确定的话可以用命令查一下
# 查看端口占用
netstat -tunlp | grep 端口号
本地端口 | 容器端口 |
---|---|
5984 | 5984 |
默认开了 3
个端口
但实际上 4369
和 9100
用于集群部署,只有 5984
是 CouchDB
的主要端口,用于提供 HTTP API
和 Web
界面。无论是单机模式还是集群模式,都使用这个端口,所以老苏把不用的端口删掉了
环境
可变 | 值 |
---|---|
COUCHDB_USER | 用户 |
COUCHDB_PASSWORD | 密码 |
docker cli 安装
如果你熟悉命令行,可能用 docker cli
更快捷
# 新建文件夹 couchdb
mkdir -p /volume1/docker/couchdb
# 进入 couchdb 目录
cd /volume1/docker/couchdb
# 创建 local.ini 文件
touchu local.ini
在 FileStation
中打开 local.ini
,将上面的内容粘贴进去
接下来就可以用 docker-cli
启动了
# 运行容器
docker run -d \
--restart unless-stopped \
--name couchdb \
-p 5984:5984 \
-v $(pwd)/local.ini:/opt/couchdb/etc/local.ini \
-v $(pwd)/data:/opt/couchdb/db \
-e COUCHDB_USER=admin \
-e COUCHDB_PASSWORD=password \
couchdb
docker-compose 安装
也可以用 docker-compose
安装,将下面的内容保存为 docker-compose.yml
文件
version: '3'
services:
couchdb:
image: couchdb
container_name: couchdb
restart: unless-stopped
ports:
- 5984:5984
volumes:
- ./local.ini:/opt/couchdb/etc/local.ini
- ./data:/opt/couchdb/db
environment:
- COUCHDB_USER=admin
- COUCHDB_PASSWORD=password
将 docker-compose.yml
和 local.ini
放入当前目录,然后一键启动
# 一键启动
docker-compose up -d
修改 local.ini
每次容器启动之后,local.ini
的文件所有者都会变成 5984:5984
。这是 docker
镜像的限制,请修改文件所有者或者赋予写权限后再编辑 local.ini
编辑权限,勾选 写入
权限
之后就有 w
权限了
每次重启之后,如果想要修改 local.ini
文件,都要重复上面的操作
运行
在浏览器中输入 http://群晖IP:5984
就能看到登录界面
输入前面设置的 COUCHDB_USER
和 COUCHDB_PASSWORD
的值,会看到一行 JSON
{"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
方案,但在同步测试时,会报错
在调试界面能看到下面的日志,但没找到解决办法
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-livesync
vrtmrz/self-hosted-livesync-server
地址:https://github.com/vrtmrz/self-hosted-livesync-server
obsidian-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/2811
Obsidian 与 CouchDB 的同步配置 - StarryVoid - Blog
地址:https://blog.starryvoid.com/archives/1164.html