🍇

Obsidian Self-Hosted LiveSyncの構築

2024/05/27に公開

NotionからScrapboxに移行してはや2年。
Obsidianに関する話題をよく耳にするようになってきた。

過去、Scrapboxに出会ったばかりぐらいの頃、一度Obsidianを触ったが、同期のハードルが高く、諦めた。
しかし最近、友達がObsidianに移行したという話を聞いて、流されて自分も移行してみた。
まあその話はまた今度書くとして…

今回はObsidianの同期にまつわるお話。

そもそも、Obsidianはオフラインで動作するソフトウェアである。
データもオフライン、つまり自分の端末内に保存される。
複数の端末で同期をする場合、Obsidian Syncという有料サービスを契約する必要がある。

月額4ドル。
今のレートで大体620円。
あれ、思ったより安い…?

せっかく自前のサーバーを持っているのなら、この4ドルをケチりたい。
そんな思いでObsidian Self-Hosted LiveSyncを構築していこう。

Obsidian Self-Hosted LiveSyncとは

公式GitHub GitHub - vrtmrz/obsidian-livesync

READMEを読んでみよう。
ちなみにこのリポジトリは丁寧に日本語ドキュメントが用意されている。
嬉しいね。

Obsidianで利用可能なすべてのプラットフォームで使える、CouchDBをサーバに使用する、コミュニティ版の同期プラグイン

構想

自宅サーバーを持っているとはいえ、自宅への回線は一つしか引かれていない。
そんな環境で自分が通信に使うIPアドレスを大公開するのは、なんかちょっと…
的な思いから自分はリバースプロキシを利用している。

今回は以下の構想で構築を進めていこうと思う。
VPSから自宅Webサーバーにパケットを飛ばし、そこからSelf-Hosted LiveSyncにパケットを飛ばす。
要は2つのリバースプロキシを挟んだ環境での構築となる。

ユーザー -> VPS -> 自宅Webサーバー -> Self-Hosted LiveSync

この記事を参考にされる場合はお気をつけください。

構築

Fly.ioは使いません

ちなみにREADMEには、Fly.ioを使う方法が書かれている。
Fly.ioは無料でちょびっと使えるVPS的な、そんな感じのやつらしい。
いや、要らんけど。自前のサーバーあるし…

サーバーの用意

ProxmoxのCTを作成した。
スペックはこんな感じ。

OSはUbuntu 23.04 (GNU/Linux 6.5.11-7-pve x86_64)
仮想環境である必要は…特にありません。
実機環境でもOKです。

サーバーサイドの構築

Dockerのインストール

参考記事 Install Docker Engine on Ubuntu | Docker Docs

以下のコードを実行して、Dockerをインストールするための下準備をします。

# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

# Add the repository to Apt sources:
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update

こちらを実行してDockerの最新版をインストールします。

sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

一応動くかどうか確認。

sudo docker run hello-world

CouchDBのインストール

インストールとは言っても、Dockerのパッケージを落とすだけ。
ただ、local.iniファイルが必要になるらしい。

nano ./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

動かしてみる。

docker run --rm -it -e COUCHDB_USER=admin -e COUCHDB_PASSWORD=password -v ./local.ini:/opt/couchdb/etc/local.ini -p 5984:5984 couchdb

Webブラウザからアクセス。
http://{サーバーのIPアドレス}:5984/_utils#setup
User: admin
Pass: password


アクセスできたー。

CouchDBを常時稼働させる

Ctrl + Cで一旦終了させる。

初期設定のパスワードではあまりに脆弱なので、好きなものに変更しておこう。
ちなみに、この記事ではめんどくさいのでそのままにしておく。

-d --restart alwaysのオプションをつけて、バックグラウンドで常時稼働するようにしておこう。

docker run -d --restart always -e COUCHDB_USER=admin -e COUCHDB_PASSWORD=password -v .local.ini:/opt/couchdb/etc/local.ini -p 5984:5984 couchdb

リバースプロキシの構築

VPS側の設定

まずはCertbotで証明書を作成しよう。
hogehoge.comは実際に公開するときのドメイン。

certbot certonly --webroot -w /var/www/html -d hogehoge.com

このVPSには、元々自分のホームページを公開するためにNginxが入っている。
ここにコンフィグを追加しよう。

server {
    listen 80;
    listen [::]:80;
    server_name hogehoge.com;

    location / {
        include /etc/nginx/proxy_params;

        proxy_pass      http://fugafuga.com;
        proxy_redirect  off;
    }
}

server {
    listen 443 ssl;
    listen [::]:443 ssl;
    server_name hogehoge.com;

    location / {
        include /etc/nginx/proxy_params;

        proxy_connect_timeout 75s;

        proxy_pass      https://fugafuga.com;
        proxy_redirect  off;
    }

    client_max_body_size 10G;

    ssl_certificate /etc/letsencrypt/live/hogehoge.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/hogehoge.com/privkey.pem;

    add_header  X-Robots-Tag "noindex, nofollow, nosnippet, noarchive";
}

fugafuga.comは自宅のIPアドレスと紐づけられたドメイン。

自宅Webサーバーの設定

こちらも証明書を作成しよう。

certbot certonly --webroot -w /var/www/html -d hogehoge.com

前もってリバースプロキシを設定したため、問題なく作成ができるだろう。

こちらも同じくNginxが入っているので、コンフィグをいじろう。

server {
    listen 80;
    listen [::]:80;

    server_name hogehoge.com;

    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    listen [::]:443 ssl;

    server_name hogehoge.com;

    location / {
       include /etc/nginx/proxy_params;

        proxy_connect_timeout 75;

        proxy_pass http://192.168.1.1:5984;
        proxy_redirect off;
    }

    
    client_max_body_size 10G;

    ssl_certificate /etc/letsencrypt/live/hogehoge.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/hogehoge.com/privkey.pem;

    add_header  X-Robots-Tag "noindex, nofollow, nosnippet, noarchive";
}

192.168.1.1はSelf-Hosted LiveSyncが動いているサーバーのIPアドレス。

Obsidian側の設定

Pluginのインストール

Obsidianの設定からコミュニティプラグインを開き、閲覧ボタンを押す。

self-hostedと入力すればプラグインがヒットするはずなので、クリックしてインストールを押した後、有効化しよう。


Pluginを有効化するとこのようなダイアログが出てきますが、Dismissで消しちゃいましょう。

Pluginのセットアップ

有効化が終わるとオプションボタンが出てきます。押しましょう。

Enable LiveSync~の横にあるEnableボタンを押して、LiveSyncを有効にします。

Enableを押すと「Obsidianを再起動しろ」という旨の案内が出るので、「Yes, restart immediately」を押して再起動しましょう。

データベースへの接続

再起動が終わったらもう一度設定を開き、衛生マーク🛰️のタブを開きましょう。
開いたら「URL」「ユーザー名」「パスワード」を入力し、Database nameは「Obsidian」と入力してください。

「Test」ボタンを押すことで自分の設定(ドメイン、パスワード等)が間違っていないかチェックができます。
問題がなければ以下のようなメッセージが出ます。

ちなみに、問題があるとこのように表示されます。

データベースの設定

次に、Checkボタンを押してください。

このボタンを押すとデータベースの設定が正しいかどうかチェックをしてくれます。

デフォルトだといくつか問題が出てくるかと思います。
その場合、以下のように表示されます。

問題があるとビックリマーク❗️とFIXボタンが表示されます。
上から順番にFixボタンを押していってください。

Fixが完了すると、全てにチェックマーク✔️が表示されます。

設定が終わったらApplyを押しましょう。

データの機密性設定

End-to-End Encryptionというデータベース暗号化のための設定です。
個人情報、パスワードやトークンをObsidianに記録している場合、こちらの設定を強く推奨します。

End-to-End Encryption

暗号化を有効化するか否かを選択できます。

Passphrase

データベースを暗号化するためのパスフレーズ(パスワード)です。
他の端末を設定する際に必要になるので、忘れないでください。

Path Obfuscation

ファイル名の暗号化を行うか否かの設定です。
現在は安定しているため、こちらも推奨されます。

Syncの設定

隣の同期設定タブ🔁を開いてください。

上部プリセットからLiveSyncを選んでください。

Applyを押すと、データベースの構築が自動的に行われます。

自動的に、Copy setup URIが開き、Setup URIを暗号化するパスフレーズを聞かれます。
Setup URIとは2台目以降の端末での設定を一発で済ませることのできる魔法の呪文です。

お好きなパスワードを入れてください。
先ほどのものと同じでも構いません。

2台目以降の設定

Pluginをインストールした後、Setup Wizardを開き、Use the copied setup URIのUseボタンを押します。

先ほどコピーした魔法の呪文を貼り付けてください。

もしパスフレーズを聞かれたら設定したものを入力してください。

そしてその後、下記のように答えてください。

  • Importing LiveSync's conf, OK? に Yes
  • How would you like to set it up? に Set it up as secondary or subsequent device
    これで設定が反映され、同期が開始されます。
GitHubで編集を提案

Discussion