Logo

Nola's Backyard

📖CouchDBとObsidian Self-hosted Live Syncを使ってみる

CouchDBとObsidian Self-hosted Live Syncを使ってみます。

# やる

# 参加する側

Pasted image 20260607223015

URIもらってぺたぺたするだけだった。

# 自分のやつ

やります。

無料の Google Cloud 機能とトライアル特典  |  Google Cloud Free Program  |  Google Cloud Documentation

Note

CouchDBはMVCCの文脈で贅沢なDBだが、Google Cloud Compute Engineが無料で30GB使えるのに対し、Obsidianはそこそこ小さいので、採用しても大丈夫そう。特に、大部分が画像ファイルとかだけど、更新されることはないから、MVCCに関与しない。

# CouchDBの準備

Google Cloud Compute EngineとTailscaleを使う。

VMインスタンスを作る。
無料にするために、

  • リージョンを us-west1 (オレゴン) にする
  • マシン構成を E2 / e2-micro にする
  • ブートディスクをこうする
    • x86_64にする
    • Pasted image 20260611222246

ネットワーキングの設定

Pasted image 20260611223138

Caution

ネットワークサービスティア を「スタンダード」にする。
Pasted image 20260613131459

これでいいらしい。

Pasted image 20260611223216

Caution

Tailscaleを使う前提ならこの2つのチェックは外した状態でよいかも。これは私のミス。


次、1GBだと足りないので、SSHで繋いで (サイトにある SSH ボタン) SWAP領域の設定をする。

sudo apt update && sudo apt upgrade -y
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

確認。

nzyc0216@obsidian:~$ free -h
               total        used        free      shared  buff/cache   available
Mem:           955Mi       415Mi       142Mi       1.0Mi       567Mi       540Mi
Swap:          2.0Gi          0B       2.0Gi

次、Dockerを入れる。

sudo apt install -y docker.io docker-compose-v2
sudo systemctl enable --now docker # サーバ起動時にDockerを起動する設定

最後、CouchDBの設定と起動。

mkdir -p ~/obsidian-sync && cd ~/obsidian-sync
sudo apt install -y vim # vimがなかったので入れる
vi compose.yml
services:
  couchdb:
    image: couchdb:3.3.3
    container_name: couchdb-sync
    restart: always
    logging:
      driver: "json-file"
      options:
        max-size: "10m"   # ログ1ファイルあたり10MBまで
        max-file: "3"     # 過去3ファイルまで残す(最大30MBに制限)
    environment:
      - COUCHDB_USER=nola
      - COUCHDB_PASSWORD=your_secure_password # ← 実際の強力なパスワードに!
    volumes:
      - ./data:/opt/couchdb/data
      - ./local.ini:/opt/couchdb/etc/local.ini
    ports:
      - "127.0.0.1:5984:5984" # 外部に直接公開せず、安全のためにローカルのみで受け付けます
vi local.ini
[couchdb]
single_node=true
max_document_size = 50000000

[chttpd]
require_valid_user = true
max_http_request_size = 4294967296

[chttpd_auth]
require_valid_user = true
authentication_redirect = /_utils/session.html

[httpd]
WWW-Authenticate = Basic realm="couchdb"
enable_cors = true

[cors]
origins = app://obsidian.md,capacitor://localhost,http://localhost
credentials = true
headers = accept, authorization, content-type, origin, referer
methods = GET, PUT, POST, HEAD, DELETE
max_age = 3600

起動。

sudo docker compose up -d

確認。

$ sudo docker ps
CONTAINER ID   IMAGE           COMMAND                  CREATED          STATUS          PORTS                                          NAMES
39904c9b3485   couchdb:3.3.3   "tini -- /docker-ent…"   25 seconds ago   Up 25 seconds   4369/tcp, 9100/tcp, 127.0.0.1:5984->5984/tcp   couchdb-sync

初期設定。

$ curl -X POST http://nola:your_secure_password@127.0.0.1:5984/_cluster_setup \
  -H "Content-Type: application/json" \
  -d '{"action": "finish_cluster"}'
$ curl -X PUT http://nola:【★パスワード】@127.0.0.1:5984/obsidian-vault

Tailscaleを入れる。

curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale up

確認。

tailscale ip -4

HTTPSを有効にする。

$ sudo tailscale serve --bg --https=443 http://127.0.0.1:5984
$ tailscale serve status
https://obsidian.tailc73153.ts.net (tailnet only)
|-- / proxy http://127.0.0.1:5984
Warning

Tailscale Funnelはオフにする。(この画像はしてないけど)

Pasted image 20260612002412

一緒にこれも外しておく。(Google Cloud Compute Engine側の設定)

Pasted image 20260612005024


自分のPCからSSHできるようにしておく。

手元のPCで、

pbcopy < ~/.ssh/id_ed25519.pub

として、Google Cloud Compute Engineで立てたVMに登録しておく。
ここの 編集 から、SSH認証鍵欄に追加する。

Pasted image 20260612004521

ただし、公開鍵の末尾はSSHでログインしたいユーザ名にしておく。(ここでは、すでに nzyc0216 として作業を進めていたため、それに揃えた)

ssh nzyc0216@obsidian.tailc73153.ts.net
Note

ドメインは tailscale serve status で出てくるやつ。


最後、Obsidian Self-hosted Live Syncの設定。

Pasted image 20260612003111


CouchDBのダッシュボード。

  • https://obsidian.tailc73153.ts.net/_utils/

iPhone側の設定をして終了しましょう。

Tailscaleはもう繋いであるので、Obsidian Self-hosted Live Syncの機能でQRコードを作り、iPhoneで新しく作ったVaultで読み込めば...?

できた!!!!

# 理解

flowchart TD
     通信のフロー
    User -->|① ノートを編集| App
    App ==>|② HTTPS 暗号化通信<br>Tailscale VPN 経由| TS
    TS -->|③ 内部リバースプロキシ| CouchDB
    CouchDB ==>|④ データの永続化| Disk

    %% 管理用ルート
    User -.->|Tailscale 経由で安全にログイン| VM
    style VM color:#000
    style GCP color:#000
    style ObsidianSync color:#000

# 没になったひとたち

SSL証明書が必要っぽかったり、自宅サーバに触れることになったり、結構面白そうですよ。