今回は Obsidian の Self-hosted LiveSync を Google Cloud の Compute Engine 上に構築してみたのでやり方を紹介します。 公式では Fly.io を利用する方法がおすすめされており、そちらの方が的簡単に構築できると思います。
が、今回は Google Cloud の勉強も兼ねているので、あえて Compute Engine を使ってみました。
なぜ Self-hosted LiveSync を使うのか
もともとは GitHub で同期をしていましたのですが、
スマホから使うときに不安定なことがあったり、PCから使う場合でも Sync のタイミングで入力がおかしくなったりしていました。
全体的にはそこまで困ってなかったのですが、LiveSync の存在を知って試してみたくなり、今回試してみることにしました。
Self-hosted LiveSync についての概要
Contribute to vrtmrz/obsidian-livesync development by creating an account on GitHub.
github.comObsidian Self-hosted LiveSync は、Obsidian のノートを複数のデバイス間で同期するためのプラグインです。 公式の Obsidian Sync の代替として、自分自身のサーバー上にデータを保存することができます。
Google Cloud Compute Engine での構築手順
WARNING
注意 Claude (AI) に教えてもらいながらやってみたので、もし真似する場合は自己責任でお願いします。
0. 前提
- Google Cloud のアカウントを作成しておく
- Google Cloud CLI をインストールしておく
- Google Cloud のプロジェクトを作成しておく
1. Compute Engineインスタンスの作成
無料枠に収まるように、最小限のインスタンスを作成します。 (多分収まってるはずですが、まだ未確認)
無料枠については以下の公式ドキュメントを参照してください。 データ転送に関しては、無料枠の対象外なので注意が必要です。
Learn about Google Cloud's free offerings and free trials, plus how to upgrade your account.
cloud.google.com# e2-microインスタンスの作成(無料枠対象)gcloud compute instances create couchdb-server \ --machine-type=e2-micro \ --zone=us-central1-a \ --image-family=debian-12 \ --image-project=debian-cloud \ --boot-disk-size=30GB \ --boot-disk-type=pd-standard \ --tags=http-server,https-server起動しっぱなしの運用を想定しているので、静的IP アドレスの取得は不要です。
2. ファイアウォールルールの設定
# HTTP(80)とHTTPS(443)ポートを開放gcloud compute firewall-rules create allow-http \ --allow=tcp:80 \ --target-tags=http-server \ --description="Allow HTTP traffic"
gcloud compute firewall-rules create allow-https \ --allow=tcp:443 \ --target-tags=https-server \ --description="Allow HTTPS traffic"
# CouchDB用のポート(5984)を開放gcloud compute firewall-rules create allow-couchdb \ --allow=tcp:5984 \ --target-tags=http-server \ --description="Allow CouchDB traffic"3. CouchDBのインストールと設定(Dockerを使用)
SSH でインスタンスに接続して、CouchDB をインストールします。
# SSHでインスタンスに接続gcloud compute ssh couchdb-server --zone=us-central1-a
# システムの更新 (upgrade はかなり時間がかかる)sudo apt-get updatesudo apt-get upgrade -y
# Dockerのインストールに必要なパッケージをインストールsudo apt-get install -y apt-transport-https ca-certificates curl gnupg lsb-release
# Dockerの公式GPGキーを追加curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# Dockerのリポジトリを追加echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# リポジトリを更新してDockerをインストールsudo apt-get updatesudo apt-get install -y docker-ce docker-ce-cli containerd.io
# Dockerサービスを開始し、自動起動を有効化sudo systemctl start dockersudo systemctl enable docker
# 現在のユーザーをdockerグループに追加(再ログインが必要)sudo usermod -aG docker $USER
# CouchDBのデータ保存用ディレクトリを作成sudo mkdir -p /opt/couchdb/datasudo mkdir -p /opt/couchdb/etc
# CouchDBの設定ファイルを作成cat << 'EOF' | sudo tee /opt/couchdb/etc/local.ini[couchdb]single_node=true
[chttpd]port = 5984bind_address = 0.0.0.0
[couch_httpd_auth]require_valid_user = false
[httpd]enable_cors = true
[cors]origins = *credentials = truemethods = GET, PUT, POST, HEAD, DELETEheaders = accept, authorization, content-type, origin, referer, x-csrf-tokenEOF
# ディレクトリの権限を設定sudo chown -R 5984:5984 /opt/couchdb
# CouchDBのDockerコンテナを実行# パスワードを環境変数として設定COUCHDB_PASSWORD="your_strong_password_here"
sudo docker run -d \ --name couchdb \ -p 5984:5984 \ -v /opt/couchdb/data:/opt/couchdb/data \ -v /opt/couchdb/etc/local.ini:/opt/couchdb/etc/local.ini \ -e COUCHDB_USER=admin \ -e COUCHDB_PASSWORD=${COUCHDB_PASSWORD} \ --restart always \ couchdb:latest
# コンテナのステータスを確認sudo docker ps4. CouchDBの動作確認
# CouchDBが正常に動作しているか確認curl http://localhost:5984
# 以下のような応答があれば成功# {"couchdb":"Welcome","version":"3.x.x","git_sha":"xxxxxxx","uuid":"xxxxx","features":[],"vendor":{"name":"The Apache Software Foundation"}}
# Dockerログの確認(問題がある場合)sudo docker logs couchdb5. システムデータベースとObsidianデータベースの作成
# システムデータベースを作成curl -X PUT http://admin:${COUCHDB_PASSWORD}@127.0.0.1:5984/_userscurl -X PUT http://admin:${COUCHDB_PASSWORD}@127.0.0.1:5984/_replicatorcurl -X PUT http://admin:${COUCHDB_PASSWORD}@127.0.0.1:5984/_global_changes
# Obsidian用のデータベースを作成curl -X PUT http://admin:${COUCHDB_PASSWORD}@127.0.0.1:5984/obsidian
# データベース一覧を確認curl -X GET http://admin:${COUCHDB_PASSWORD}@127.0.0.1:5984/_all_dbs# ["_global_changes","_replicator","_users","obsidian"]6. HTTPSの設定(Let’s Encrypt使用)
スマホからも使えるように、HTTPSで接続できるようにします。 PC オンリーの場合は、直接 IP アドレスでアクセスしても良いと思います。
このタイミングで、DNS を設定しておくと良いです。 私は、Cloudflare を使っているので、Cloudflare の DNS 設定をしておきました。
# IP アドレスを確認gcloud compute instances describe couchdb-server --format='get(networkInterfaces[0].accessConfigs[0].natIP)'| Type | Name | IP Address | TTL | Proxy status |
|---|---|---|---|---|
| A | your-domain.com | {IP アドレス} | Auto | DNS only |
後ほど、画像を GCS に保存してみたりしたいなと考えているので、ここでは https://your-domain.com/couchdb/ でアクセスできるように設定します。
GCS には https://your-domain.com/assets/ とかでアクセスできるようにしたいなと考えています。
# Certbotのインストールsudo apt-get install -y certbot python3-certbot-nginx
# Nginxのインストール(リバースプロキシとして使用)sudo apt-get install -y nginx
# Nginx設定sudo vi /etc/nginx/sites-available/couchdb
# 以下の内容を追加# server {# listen 80;# server_name your-domain.com; # ドメインを設定## client_max_body_size 100M; # 動画データなどに対応するため## location /couchdb/ {# rewrite ^/couchdb/(.*) /$1 break;# proxy_pass http://localhost:5984;# proxy_redirect off;# proxy_set_header Host $host;# proxy_set_header X-Real-IP $remote_addr;# proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;# }# }
# シンボリックリンクの作成sudo ln -s /etc/nginx/sites-available/couchdb /etc/nginx/sites-enabled/
# Nginx設定のテストsudo nginx -t
# Nginxの再起動sudo systemctl restart nginx
# CertbotでSSL証明書を取得sudo certbot --nginx -d your-domain.comここまでで、Google Cloud 上に CouchDB をインストールし、HTTPS でアクセスできるように設定しました。
次は、Obsidian の設定を行います。
Obsidian の設定
1. Obsidian LiveSync プラグインのインストール
Obsidian の設定画面から、Community plugins を開き、LiveSync プラグインをインストールします。
2. LiveSync の設定
基本的には Quick Setup の手順に従って設定を行います。
Contribute to vrtmrz/obsidian-livesync development by creating an account on GitHub.
github.comRemote Database connection の部分で、以下のように設定します。
| 項目 | 値 |
|---|---|
| Server URI | https://your-domain.com/couchdb/ |
| Username | admin |
| Password | {CouchDB のパスワード} |
| Database Name | obsidian |
手順書に従いそのまま2台目以降もセットアップします。
完成
このように、同期されます。
おわりに
今日やったばかりで、そもそも無料枠に収まっているのかすら不安です。 データ転送も大した金額にならないと踏んでいるのです、実際どの程度になるのかはあまり考えてません。 そのあたりと使用感を含めて、1ヶ月後くらいに追記しようと思います。
GCS に画像アップロードするのも近々やろうと思います。 アップロード自体は簡単なんですが、普通にやると誰でも閲覧可能な状態になってしまうので、 そのあたりの設定をどうするか考え中です。