--- title: "部署 Obsidian LiveSync 实时同步服务指南" source: "https://blog.dejavu.moe/posts/selfhosting-obsidian-livesync-service-guide/" author: - "[[Dejavu Moe]]" published: 2026-01-05 created: 2026-03-28 description: "使用 Docker 自托管部署 Obsidian LiveSync 服务,获得端到端加密的多设备实时同步服务支持的详细指南。" tags: - "clippings" rating: 4 --- ## 序 **[Obsidian LiveSync](https://github.com/vrtmrz/obsidian-livesync)** 是一款面向 Obsidian 用户的同步解决方案,无需依靠官方付费同步服务就能获得不错的实时同步体验,支持自动冲突处理、端到端加密,使我们完全掌控自己的数据和基础设施。 它支持使用自托管数据库 (Apache CouchDB) 、对象存储 (S3、B2、R2 等) 或 WebRTC P2P(实验性)来同步数据。对于对象存储和 P2P 同步,只需在插件里配置即可,无需服务端支持。 **[Apache CouchDB](https://couchdb.apache.org/)** 是一个使用 JSON 作为存储格式,JavaScript 作为查询语言的 NoSQL 数据库,很适合作为 Obsidian 的存储。下面的自托管部署 LiveSync 服务,本质上就是部署一个单节点运行的 CouchDB 数据库。 ## 部署 LiveSync 服务 ### 先决条件 - 已安装 Docker CE - 已安装 Docker Compose - Nginx 或其他用于反向代理服务器 - SSL/TLS 证书提供 HTTPS 访问(必需的) ### 开始部署 准备一个文件夹,用于 LiveSync 容器数据持久化 ```bash mkdir obsidian-livesync && cd $ # 准备 Docker 绑定卷 mkdir -p {data,local.d} sudo chown -R 1000:1000 {data,local.d} ``` 新建一个 `compose.yml` 模板 ```bash vim compose.yml ``` 写入内容 ```yaml 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' ``` 启动服务 ```bash sudo docker compose up -d ``` ### 初始化数据库 使用官方脚本对数据库进行初始化,注意替换用户名和密码 ```bash 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 ``` 建议初始化后重启下容器 ```bash sudo docker compose down && sudo docker compose up -d ``` OK,现在 CouchDB 数据库已经准备就绪。 ## 反向代理 我使用 Nginx 设置反向代理访问,下面是一个示例配置文件: ```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 配置 ```bash sudo nginx -t ``` 没问题的话,重新加载配置 ```bash sudo nginx -s reload ``` 除了 Nginx,也可以使用一些更加方便的反向代理方案,通常情况下他们提供 HTTPS 访问也更加方便: - [使用 Traefik 的 Compose 模板](https://github.com/vrtmrz/obsidian-livesync/blob/main/docker-compose.traefik.yml) - [使用 Caddy 的反向代理配置](https://github.com/vrtmrz/self-hosted-livesync-server) - [使用 Cloudflare Tunnel 直接访问](https://blog.dejavu.moe/posts/cloudflare-tunnel-access-uptime/#%e9%85%8d%e7%bd%ae-cloudflare-tunnel) ,只需在 `127.0.0.1:5984` 监听 HTTP/TCP 服务即可 ## 登录仪表盘 访问 `https://ob-livesync.your.domain/_utils/` 可以查看 Apache CouchDB 仪表盘,首先检查下安装设置是否正确 ![initDB.webp](https://blog.dejavu.moe/posts/selfhosting-obsidian-livesync-service-guide/initDB.webp) 新建一个数据库,比如 `obsidian` ,这不是必需的步骤,插件本身可以执行该操作 ![createDB.webp](https://blog.dejavu.moe/posts/selfhosting-obsidian-livesync-service-guide/createDB.webp) 服务端配置就结束了,下面我们开始配置 Obsidian 客户端插件。 ## Obsidian 配置 ### 安装插件 安装并启用 **Self-hosted LiveSync** 插件 ![install-plugin.webp](https://blog.dejavu.moe/posts/selfhosting-obsidian-livesync-service-guide/install-plugin.webp) ### 配置插件 对于首台设备,选择设置新的同步服务 ![first-time.webp](https://blog.dejavu.moe/posts/selfhosting-obsidian-livesync-service-guide/first-time.webp) 手动输入服务器信息 ![manually.webp](https://blog.dejavu.moe/posts/selfhosting-obsidian-livesync-service-guide/manually.webp) 可选端到端加密和文件信息混淆,这在保护数据隐私很有效,同时也为以后把自己「锁在外面」埋下了隐患,请妥善保存 E2E 加密密钥。 ![e2e.webp](https://blog.dejavu.moe/posts/selfhosting-obsidian-livesync-service-guide/e2e.webp) 选择 CouchDB 数据库 ![couchdb.webp](https://blog.dejavu.moe/posts/selfhosting-obsidian-livesync-service-guide/couchdb.webp) 按照实际信息填写 ![couchdb-setup.webp](https://blog.dejavu.moe/posts/selfhosting-obsidian-livesync-service-guide/couchdb-setup.webp) 测试正确,继续下一步 ![test-continue.webp](https://blog.dejavu.moe/posts/selfhosting-obsidian-livesync-service-guide/test-continue.webp) 目前远程服务器仍然是一个空的数据库,直接用本地覆盖服务器 ![override.webp](https://blog.dejavu.moe/posts/selfhosting-obsidian-livesync-service-guide/override.webp) ### 实时同步 这是 LiveSync 的核心功能了,启用实时同步方案 ![livesync.webp](https://blog.dejavu.moe/posts/selfhosting-obsidian-livesync-service-guide/livesync.webp) 其他设备的 Obsidian 安装好同步插件,复制 URI 或使用手机扫描二维码,直接同步设置。 > 注意:二维码是非加密的,请注意扫码软件隐私安全,建议使用系统扫码器。 ![sync-devices.webp](https://blog.dejavu.moe/posts/selfhosting-obsidian-livesync-service-guide/sync-devices.webp) ### 同步插件 打开「隐藏文件」同步,设置好排除路径,可以同步插件、主题和设置。 ![sync-hidden-files.webp](https://blog.dejavu.moe/posts/selfhosting-obsidian-livesync-service-guide/sync-hidden-files.webp) ### 结语 **Obsidian LiveSync** 提供了非常棒的同步方案,但插件设置稍显复杂,建议仔细阅读项目说明文档,确保充分理解其作用后再配置。 根据 GitHub 和 Reddit 上的用户反馈,因误操作或其他因素,可能导致服务器数据库发生不可逆的损毁。因此,切勿将所有数据依赖单一方案;对重要数据,建议配置多重或手动备份机制,这样才最保险。