Obsidian の Self-hosted LiveSync を使ってみた

2023-08-28

はじめに

Obsidian を windows、mac、iPhone 間で同期させたかったが、公式が提供している Obsidian sync はお金がかかるので、コミュニティープラグインとして提供されていて無料で使える Self-hosted LiveSync を使ってみた。 VPS を借りているので、独自のCouchDBのセットアップを試してみた。ただし、今回は Docker は使わず CouchDB を直接立てた。

使ってみた

CouchDB のドキュメント に従い CouchDB をインストールする。 うちで借りている VPS の OS は Ubuntu なので、下記コマンドを実行。

sudo apt update && sudo apt install -y curl apt-transport-https gnupg
curl https://couchdb.apache.org/repo/keys.asc | gpg --dearmor | sudo tee /usr/share/keyrings/couchdb-archive-keyring.gpg >/dev/null 2>&1
source /etc/os-release
echo "deb [signed-by=/usr/share/keyrings/couchdb-archive-keyring.gpg] https://apache.jfrog.io/artifactory/couchdb-deb/ ${VERSION_CODENAME} main" \
    | sudo tee /etc/apt/sources.list.d/couchdb.list >/dev/null
sudo apt update
sudo apt install -y couchdb

途中 single node か clusters にするか聞かれたが、とりあえず single node にした。また、Erlang magic cookie とか admin のパスワードとかを設定するよう求められたが、適当に設定。

インストールできたら、プラグインの方のドキュメントに local.ini の設定がある ので、/opt/couchdb/etc/local.ini の内容をその通りに書き換える。

で、下記コマンドで動作確認。Basic 認証にはさっき設定した admin の情報を使う。

curl -X GET 127.0.0.1:5984 -H "Authorization: Basic hogehoge"

ちゃんと立ってたら、下記コマンドで DB を作成(ここでDBを作成しなくてもプラグインの設定時に作成される気もする......)。

curl -X PUT 127.0.0.1:5984/myobsidianvault -H "Authorization: Basic hogehoge"

今回は nginx の後ろで動かしたかったので、nginx.conf に下記のような設定を追加。ドキュメントの Reverse proxing with nginxに設定例がいくつかあったので、それを参考に書く。個人的な都合で https://domain.com/couchdb/dbname みたいにサブディレクトリでアクセスさせたかったので、今回はその例を参考にした。 ドキュメントの例のまんまだと 500 番を返されたので、ChatGPT 先生に直してもらったら動いた(rewrite ^ $request_uri; を消した)。

location /couchdb {
    rewrite ^/couchdb/(.*) /$1 break;
    proxy_pass http://localhost:5984;
    proxy_redirect off;
    proxy_buffering off;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

で、あとは Obdisian に Self-hosted LiveSync のプラグインを入れて、プラグインの設定画面の Setup wizard 画面から、上記で立てた CouchDB に接続するように設定すればちゃんと動いた。

今回の場合、nginx の方ですでにドメインが設定してあったので、iPhone からもプラグインの設定をすればそのまま動いた。

別端末で編集した内容が2、3秒くらいで同期されていい感じ。

https://kogad.net/posts/feed.xml