Skip to content

数据掌握在自己手中:使用 CouchDB 自建 Obsidian 实时同步

毛佳国

📌 核心速览 (TL;DR)

Self-hosted LiveSync + CouchDB 是 Obsidian 跨端同步的最强自建方案:延迟约 200–500 ms(远优于 iCloud/坚果云的分钟级延迟),端对端加密(E2E),完全私有,数据掌握在自己手中。

核心组件:CouchDB 3.x(Docker 部署)+ Nginx HTTPS 反代 + Obsidian Self-hosted LiveSync 插件。全部开源免费,无需订阅。


Obsidian 凭借其 本地优先 (Local first) 和纯 Markdown 格式的强大哲学,在笔记软件领域一骑绝尘。它的最大卖点就是你的数据不需要保存在某个服务商的闭源云端里。

但在享受数据绝对掌控权的同时,如何优雅地在 PC 和手机端实现无缝同步,成了许多用户的痛点。官方的 Obsidian Sync 体验很好,但价格也不差($8/月);而使用 iCloud/OneDrive/坚果云,在移动端往往遇到严重的延迟,甚至时不时因为多端编辑产生文件冲突,让人抓狂。

这时候,如果你有一台 24 小时开机的 NAS 或云服务器,利用 Self-hosted LiveSync 插件 + 自建 CouchDB,就是你最好的选择——免费、私有,最重要的是,真正的实时级别修改同步。


LiveSync 方案的原理

Obsidian-livesync 这个开源插件使用了一个非常有意思的设计模式:

[Mac Obsidian] ─── PouchDB ─── HTTPS ──►
                                         CouchDB (你的服务器)
[iPhone Obsidian] ─ PouchDB ─ HTTPS ──►

CouchDB 是一个以 JSON 为文档基础的 NoSQL 数据库,其杀手锏是**多主复制(Multi-Master Replication)**同步协议。在 LiveSync 架构下,每一台装有 Obsidian 的设备上都运行一个微型数据库(PouchDB),它们都与你自建在服务器上的中心 CouchDB 保持长连接。

你修改笔记的每一个键盘敲击动作,都会立刻转化成增量数据同步到大后方服务器,再广播给别的在线客户端。一旦离线修改,在上线后也会进行高效率、自带冲突处理的合并。


第一步:Docker Compose 部署 CouchDB

找一个你的服务器目录(如 /opt/obsidian-sync/),创建 compose.yml:

services:
  couchdb:
    image: couchdb:3.3
    container_name: obsidian-couchdb
    restart: unless-stopped
    ports:
      - "127.0.0.1:5984:5984" # 仅监听本地回环,不直接暴露公网
    volumes:
      - ./data:/opt/couchdb/data
      - ./etc:/opt/couchdb/etc/local.d
    environment:
      - COUCHDB_USER=admin
      - COUCHDB_PASSWORD=your_super_strong_password_here

⚠️ 安全要点:端口绑定到 127.0.0.1:5984 而非 0.0.0.0:5984,防止 CouchDB 直接暴露在公网。所有外部访问通过 Nginx HTTPS 反代进行。

启动数据库:

docker compose up -d

初始化单节点模式(CouchDB 3.x 需要手动完成初始化):

curl -X POST \
  http://admin:your_super_strong_password_here@localhost:5984/_cluster_setup \
  -H "Content-Type: application/json" \
  -d '{"action": "enable_single_node", "bind_address": "0.0.0.0"}'

第二步:Nginx HTTPS 反向代理

由于 CouchDB 需要暴露给移动端连接,必须通过 Nginx 套上一层 HTTPS。以下是推荐的 Nginx 配置(适用于 Nginx Proxy Manager 的 Advanced 模式,或直接写入 /etc/nginx/conf.d/obsidian.conf):

server {
    listen 443 ssl http2;
    server_name obsidian.yourdomain.com;

    ssl_certificate     /path/to/fullchain.pem;
    ssl_certificate_key /path/to/privkey.pem;

    # CORS 配置(Obsidian 移动端需要)
    add_header Access-Control-Allow-Origin  "*"  always;
    add_header Access-Control-Allow-Methods "GET, PUT, POST, HEAD, DELETE, OPTIONS" always;
    add_header Access-Control-Allow-Headers "accept, authorization, content-type, origin, referer" always;

    # 处理 OPTIONS 预检请求
    if ($request_method = OPTIONS) {
        return 204;
    }

    location / {
        proxy_pass         http://127.0.0.1:5984;
        proxy_http_version 1.1;
        proxy_set_header   Host              $host;
        proxy_set_header   X-Real-IP         $remote_addr;
        proxy_set_header   X-Forwarded-For   $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Proto $scheme;
        # 支持 CouchDB 长轮询 / _changes feed
        proxy_read_timeout 600s;
        proxy_buffering    off;
    }
}

💡 Let’s Encrypt 证书:使用 Certbot 申请免费证书:certbot --nginx -d obsidian.yourdomain.com


第三步:开启端对端加密(E2E)

Self-hosted LiveSync 支持在同步到 CouchDB 之前对笔记内容进行客户端加密,即使服务器被攻击,攻击者只能看到加密后的密文。

在 Obsidian LiveSync 插件设置中:

  1. 开启 End-to-end encryption;
  2. 输入你的加密密码(必须在所有设备上保持一致);
  3. 点击 Test E2E Encryption 确认加密正常工作。

⚠️ 密码丢失 = 数据永久无法恢复。请将加密密码保存在密码管理器(1Password / Bitwarden)中。


第四步:在 Obsidian 中配置 LiveSync

万事俱备,最后回到你手边的设备:

  1. 在 Obsidian 社区插件搜索 Self-hosted LiveSync 并安装;
  2. 打开插件设置 → 选择 CouchDB;
  3. 填写配置:
    • URI:https://obsidian.yourdomain.com
    • Database name:自己起名(如 my-vault)
    • Username:admin
    • Password:你设置的 CouchDB 密码
  4. 点击 Test Database Connection → 成功后点击 Rebuild Everything;
  5. 在另一台设备的空 Vault 同样操作,从远端拉取完整笔记库。

性能与方案对比

同步方案延迟隐私冲突处理费用
Obsidian Sync(官方)< 1 s✅ E2E✅ 自动$8/月
iCloud1–5 分钟❌ 云端⚠️ 偶冲突免费/订阅
坚果云 WebDAV1–10 分钟❌ 云端❌ 手动免费/订阅
Self-hosted LiveSync200–500 ms✅ E2E✅ 自动免费

❓ 常见问题与 AI 快问快答 (FAQ)

Q:CouchDB 需要多少服务器资源?

A:CouchDB 本身极轻量,一个个人笔记库(< 10,000 条笔记)的 CouchDB 实例通常只需约 100–200 MB RAM,适合跑在 1 核 1 GB 的轻量 VPS 或家里的 NAS(群晖/威联通)上。

Q:我的笔记库很大(几 GB 图片),适合 LiveSync 吗?

A:LiveSync 主要同步 Markdown 文本内容,不推荐用于大量图片/附件的同步(CouchDB 存大文件效率不高)。建议图片通过 iCloud 或 Syncthing 同步,仅用 LiveSync 同步纯文本笔记。

Q:离线编辑后冲突怎么处理?

A:LiveSync 使用 CouchDB 的 MVCC(多版本并发控制)机制,能自动检测并在插件内以弹窗形式提示你选择保留哪个版本,不会静默覆盖。这比 iCloud 的随机覆盖要友好得多。

Q:Self-hosted LiveSync 插件活跃维护吗?

A:是的。插件由 vrtmrz(日本开发者)维护,截至 2026 年 GitHub 上有 4k+ ⭐,更新非常活跃,每 1–2 个月有新版本发布,支持最新版 Obsidian。

Q:除了 CouchDB,还有其他自建同步方案吗?

A:有,但体验各有取舍:① Syncthing:局域网/跨设备直接文件同步,但延迟高于 LiveSync,且不支持在线冲突合并;② Remotely Save(Obsidian 插件):支持 S3/Backblaze R2/OneDrive,成本低但延迟比 LiveSync 高;③ Obsidian Git:用 Git 做版本控制同步,适合纯文本极客但对手机端体验不友好。综合评估,LiveSync + CouchDB 仍是隐私 + 实时性 + 成本的最优解。

上一篇
在 Homelab 中部署 Ollama:2026 年零门槛运行私有大语言模型与 Open WebUI 全指南
下一篇
拥抱 NixOS:用代码定义你的全部 Homelab 服务器