Files
42_124/CT124_ObsidianLiveSync操作手冊_20260710.md
Timmy 2a054f4d17 新增 CT124 Obsidian LiveSync 操作手冊
CT124 部署 CouchDB 3.5 當 obsidian-livesync 同步後端(/opt/livesync,
:5984 僅 LAN),套用外掛要求的 require_valid_user/CORS/size 上限,建 obsidiandb。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-10 14:49:22 +08:00

91 lines
4.7 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# CT124 Obsidian LiveSync(自架 CouchDB 同步後端)— 操作手冊
> 主機:CT124192.168.42.124Ubuntu 24.04 LXC | 位置:`/opt/livesync`
> 用途:給 [obsidian-livesync](https://github.com/vrtmrz/obsidian-livesync) 外掛用的自架即時同步後端(CouchDB),多裝置同步 Obsidian vault
---
## 一、基本資訊
- 版本:**CouchDB 3.5**`couchdb:3.5`,實跑 3.5.2)。obsidian-livesync **外掛本身**裝在各裝置的 Obsidian「社群外掛」,不在這台。
- 容器:`livesync_couchdb`(`restart: unless-stopped`,network `livesync_default`)
- 埠:`5984 → 5984`(**僅 LAN,純 HTTP,無對外、不走 NPM**)
- 資料庫(給 Obsidian 用):`obsidiandb`;系統 DB `_users`/`_replicator`/`_global_changes` 已建
- 帳密:CouchDB 管理員 `livesync` / 密碼在 `/opt/livesync/.env`(`COUCHDB_PASSWORD`,亦存密碼管理器)
- **未掛 Watchtower**:DB 不做自動更新,避免主版本跳動弄壞資料;更新一律手動(見四)。
- 官方:https://github.com/vrtmrz/obsidian-livesync | CouchDB 設定文件:`docs/setup_own_server.md`
## 二、操作
```bash
cd /opt/livesync
docker compose up -d # 啟動 / 套用設定
docker compose ps
docker compose logs -f couchdb
curl -sf http://127.0.0.1:5984/_up && echo OK # 健康檢查
```
## 三、Obsidian 外掛設定(各裝置)
1. Obsidian → 設定 → 社群外掛 → 搜尋 **Self-hosted LiveSync** → 安裝並啟用。
2. 外掛設定用 **Setup wizard / Remote Database**,填:
- URI:`http://192.168.42.124:5984`(內網)
 或跨網段經 Headscale tailnet:`http://ip-192-168-42-124.internal.lotimmy.com:5984`
- Username / Password:見 `/opt/livesync/.env`
- Database name:`obsidiandb`
- **End-to-End Encryption**:建議開啟並設 passphrase(資料在 CouchDB 內即為密文;各裝置要填同一組 passphrase)。
3. 先在一台把 vault 推上去(Initialize / Rebuild everything),其餘裝置再 `Fetch` 拉下來。
## 四、資料與備份 / 更新
| 項目 | 位置 |
|---|---|
| CouchDB 資料 | `./data`(→ 容器 `/opt/couchdb/data`) |
| CouchDB 設定(持久化) | `./local.d/docker.ini`(REST 改的設定寫在這) |
| 帳密 | `./.env` |
```bash
# 備份(檔案層,停服務較保險)
cd /opt/livesync && docker compose stop \
&& tar -czf livesync-data-$(date +%F).tar.gz data local.d .env docker-compose.yml \
&& docker compose start
# 更新(手動;先確認有近期備份)
cd /opt/livesync
# 視需要改 docker-compose.yml 的 image tag,再:
docker compose pull && docker compose up -d
```
> obsidian-livesync 長期使用會累積歷史修訂,DB 會膨脹。在外掛內定期執行 **Compact database** 或 **Rebuild everything** 可回收空間。
## 五、初始化設定(重建時參考)
新容器起來後,曾對 CouchDB 套用 obsidian-livesync 要求的參數(node `_local`),重建時照跑:
```bash
cd /opt/livesync; set -a; . ./.env; set +a
COUCH=http://127.0.0.1:5984; AUTH="$COUCHDB_USER:$COUCHDB_PASSWORD"
for db in _users _replicator _global_changes; do curl -s -u "$AUTH" -X PUT "$COUCH/$db"; done
put(){ curl -s -u "$AUTH" -X PUT "$COUCH/_node/_local/_config/$1" -H "Content-Type: application/json" -d "$2"; }
put chttpd/require_valid_user '"true"'
put chttpd_auth/require_valid_user '"true"'
put httpd/enable_cors '"true"'
put chttpd/enable_cors '"true"'
put chttpd/max_http_request_size '"4294967296"'
put couchdb/max_document_size '"50000000"'
put cors/credentials '"true"'
put cors/origins '"app://obsidian.md,capacitor://localhost,http://localhost"'
curl -s -u "$AUTH" -X PUT "$COUCH/obsidiandb"
```
驗證:匿名 `curl :5984/obsidiandb` 應回 **401**,帶帳密應回 **200**
## 六、注意事項
- **僅 LAN、純 HTTP**:密碼以明文在網路上傳輸,只在信任的內網/Headscale tailnet 使用。務必在外掛開啟 E2E 加密,vault 內容才不會以明文落地 CouchDB。
- **手機同步的坑**:Obsidian **手機版要求後端有「有效 SSL 憑證」**,純 HTTP 或自簽多半連不上。
- 本台 Tailscale 接的是自架 **Headscale**(tailnet 網域 `internal.lotimmy.com`),**不支援** `tailscale cert`/`tailscale serve --https`(無憑證簽發)。因此桌面版可直接用(HTTP over LAN/tailnet),**手機版無法只靠 tailnet 走通**。
- 要支援手機,需把 `:5984` 掛到 **NPM 反代 + 真實憑證的網域**(如 `couchdb.lotimmy.com`)——這會讓服務**對外**,與目前「僅 LAN」的取捨相反,要時再開。NPM 反代需 `client_max_body_size` 放大、關 `proxy_buffering`
- **不要**把 `couchdb:3.5` 改成 `:latest` 自動更新:CouchDB 主版本升級可能需要遷移,DB 應手動、有備份地升。
- 這台的 Docker 若掛,連鎖影響見 [`CT124_故障復原_20260529.md`](CT124_故障復原_20260529.md);但本服務僅 LAN、不經 NPM,不受 443/NPM 影響。