Docker 部署 Obsidian LiveSync 实时同步服务指南

使用 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 访问也更加方便:

登录仪表盘

访问 https://ob-livesync.your.domain/_utils/ 可以查看 Apache CouchDB 仪表盘,首先检查下安装设置是否正确

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

服务端配置就结束了,下面我们开始配置 Obsidian 客户端插件。

Obsidian 配置

安装插件

安装并启用 Self-hosted LiveSync 插件

配置插件

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

手动输入服务器信息

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

选择 CouchDB 数据库

按照实际信息填写

测试正确,继续下一步

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

实时同步

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

其他设备的 Obsidian 安装好同步插件,复制 URI 或使用手机扫描二维码,直接同步设置。

注意:二维码是非加密的,请注意扫码软件隐私安全,建议使用系统扫码器。

同步插件

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

结语

Obsidian LiveSync 提供了非常棒的同步方案,但插件设置稍显复杂,建议仔细阅读项目说明文档,确保充分理解其作用后再配置。

根据 GitHub 和 Reddit 上的用户反馈,因误操作或其他因素,可能导致服务器数据库发生不可逆的损毁。因此,切勿将所有数据依赖单一方案;对重要数据,建议配置多重或手动备份机制,这样才最保险。

点赞
  1. duyaoo说道:

    支持,但是这东西有时候也抽风。所以我选择upnote 了

  2. 江鸟说道:

    感谢分享

  3. AlterEgo说道:

    不错,支持优秀mjj

发表回复

电子邮件地址不会被公开。必填项已用 * 标注

×
订阅图标按钮