使用 Docker 自托管部署 Obsidian LiveSync 服务,获得端到端加密的多设备实时同步服务支持的详细指南。
原文链接:https://blog.dejavu.moe/posts/selfhosting-obsidian-livesync-service-guide/
序
Obsidian LiveSync 是一款面向 Obsidian 用户的同步解决方案,无需依靠官方付费同步服务就能获得不错的实时同步体验,支持自动冲突处理、端到端加密,使我们完全掌控自己的数据和基础设施。
它支持使用自托管数据库 (Apache CouchDB) 、对象存储 (S3、B2、R2 等) 或 WebRTC P2P(实验性)来同步数据。对于对象存储和 P2P 同步,只需在插件里配置即可,无需服务端支持。
Apache CouchDB 是一个使用 JSON 作为存储格式,JavaScript 作为查询语言的 NoSQL 数据库,很适合作为 Obsidian 的存储。下面的自托管部署 LiveSync 服务,本质上就是部署一个单节点运行的 CouchDB 数据库。
部署 LiveSync 服务
先决条件
- 已安装 Docker CE
- 已安装 Docker Compose
- Nginx 或其他用于反向代理服务器
- SSL/TLS 证书提供 HTTPS 访问(必需的)
开始部署
准备一个文件夹,用于 LiveSync 容器数据持久化
mkdir obsidian-livesync && cd $
# 准备 Docker 绑定卷
mkdir -p {data,local.d}
sudo chown -R 1000:1000 {data,local.d}
新建一个 compose.yml 模板
vim compose.yml
写入内容
services:
couchdb:
image: couchdb:3.5
container_name: obsidian-livesync
user: 1000:1000
restart: unless-stopped
environment:
- TZ=Asia/Shanghai
- COUCHDB_USER= # 设置用户名
- COUCHDB_PASSWORD= # 设置一个强密码
volumes:
- ./data:/opt/couchdb/data
- ./local.d:/opt/couchdb/etc/local.d
ports:
- '127.0.0.1:5984:5984'
启动服务
sudo docker compose up -d
初始化数据库
使用官方脚本对数据库进行初始化,注意替换用户名和密码
curl -s https://raw.githubusercontent.com/vrtmrz/obsidian-livesync/main/utils/couchdb/couchdb-init.sh | hostname=http://127.0.0.1:5984 username= password= bash
建议初始化后重启下容器
sudo docker compose down && sudo docker compose up -d
OK,现在 CouchDB 数据库已经准备就绪。
反向代理
我使用 Nginx 设置反向代理访问,下面是一个示例配置文件:
server {
listen 80;
listen [::]:80;
server_name ob-livesync.your.domain;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
listen [::]:443 ssl;
http2 on;
server_name ob-livesync.your.domain;
ssl_certificate /path/to/cert/ob-livesync.your.domain.pem;
ssl_certificate_key /path/to/cert/ob-livesync.your.domain.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ecdh_curve X25519:P-256:P-384;
ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-CHACHA20-POLY1305:ECDHE AES128:RSA AES128:ECDHE AES256:RSA AES256';
ssl_prefer_server_ciphers off;
ssl_session_timeout 1d;
ssl_session_cache shared:MozSSL:10m;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
access_log /var/log/nginx/ob-livesync.your.domain.access.log;
error_log /var/log/nginx/ob-livesync.your.domain.error.log;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "no-referrer-when-downgrade" always;
add_header Content-Security-Policy "default-src 'self' http: https: data: blob: 'unsafe-inline'" always;
client_max_body_size 4G;
proxy_read_timeout 3600s;
proxy_send_timeout 3600s;
location / {
proxy_pass http://127.0.0.1:5984;
proxy_http_version 1.1;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $realip_remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_redirect off;
}
}
检查 Nginx 配置
sudo nginx -t
没问题的话,重新加载配置
sudo nginx -s reload
除了 Nginx,也可以使用一些更加方便的反向代理方案,通常情况下他们提供 HTTPS 访问也更加方便:
- 使用 Traefik 的 Compose 模板
- 使用 Caddy 的反向代理配置
- 使用 Cloudflare Tunnel 直接访问,只需在
127.0.0.1:5984监听 HTTP/TCP 服务即可
登录仪表盘
访问 https://ob-livesync.your.domain/_utils/ 可以查看 Apache CouchDB 仪表盘,首先检查下安装设置是否正确

新建一个数据库,比如 obsidian,这不是必需的步骤,插件本身可以执行该操作

服务端配置就结束了,下面我们开始配置 Obsidian 客户端插件。
Obsidian 配置
安装插件
安装并启用 Self-hosted LiveSync 插件

配置插件
对于首台设备,选择设置新的同步服务

手动输入服务器信息

可选端到端加密和文件信息混淆,这在保护数据隐私很有效,同时也为以后把自己「锁在外面」埋下了隐患,请妥善保存 E2E 加密密钥。

选择 CouchDB 数据库

按照实际信息填写

测试正确,继续下一步

目前远程服务器仍然是一个空的数据库,直接用本地覆盖服务器

实时同步
这是 LiveSync 的核心功能了,启用实时同步方案

其他设备的 Obsidian 安装好同步插件,复制 URI 或使用手机扫描二维码,直接同步设置。
注意:二维码是非加密的,请注意扫码软件隐私安全,建议使用系统扫码器。

同步插件
打开「隐藏文件」同步,设置好排除路径,可以同步插件、主题和设置。

结语
Obsidian LiveSync 提供了非常棒的同步方案,但插件设置稍显复杂,建议仔细阅读项目说明文档,确保充分理解其作用后再配置。
根据 GitHub 和 Reddit 上的用户反馈,因误操作或其他因素,可能导致服务器数据库发生不可逆的损毁。因此,切勿将所有数据依赖单一方案;对重要数据,建议配置多重或手动备份机制,这样才最保险。

支持,但是这东西有时候也抽风。所以我选择upnote 了
感谢分享
不错,支持优秀mjj