
今回は Obsidian の Self-hosted LiveSync を Google Cloud の Compute Engine 上に構築してみたのでやり方を紹介します。 公式では Fly.io を利用する方法がおすすめされており、そちらの方が的簡単に構築できると思います。
が、今回は Google Cloud の勉強も兼ねているので、あえて Compute Engine を使ってみました。
なぜ Self-hosted LiveSync を使うのか
もともとは GitHub で同期をしていましたのですが、
スマホから使うときに不安定なことがあったり、PCから使う場合でも Sync のタイミングで入力がおかしくなったりしていました。
全体的にはそこまで困ってなかったのですが、LiveSync の存在を知って試してみたくなり、今回試してみることにしました。
Self-hosted LiveSync についての概要
Obsidian Self-hosted LiveSync は、Obsidian のノートを複数のデバイス間で同期するためのプラグインです。 公式の Obsidian Sync の代替として、自分自身のサーバー上にデータを保存することができます。
Google Cloud Compute Engine での構築手順
Warning 注意 Claude (AI) に教えてもらいながらやってみたので、もし真似する場合は自己責任でお願いします。
0. 前提
- Google Cloud のアカウントを作成しておく
- Google Cloud CLI をインストールしておく
- Google Cloud のプロジェクトを作成しておく
1. Compute Engineインスタンスの作成
無料枠に収まるように、最小限のインスタンスを作成します。 (多分収まってるはずですが、まだ未確認)
無料枠については以下の公式ドキュメントを参照してください。 データ転送に関しては、無料枠の対象外なので注意が必要です。
# 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 update
sudo 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 update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io
# Dockerサービスを開始し、自動起動を有効化
sudo systemctl start docker
sudo systemctl enable docker
# 現在のユーザーをdockerグループに追加(再ログインが必要)
sudo usermod -aG docker $USER
# CouchDBのデータ保存用ディレクトリを作成
sudo mkdir -p /opt/couchdb/data
sudo mkdir -p /opt/couchdb/etc
# CouchDBの設定ファイルを作成
cat << 'EOF' | sudo tee /opt/couchdb/etc/local.ini
[couchdb]
single_node=true
[chttpd]
port = 5984
bind_address = 0.0.0.0
[couch_httpd_auth]
require_valid_user = false
[httpd]
enable_cors = true
[cors]
origins = *
credentials = true
methods = GET, PUT, POST, HEAD, DELETE
headers = accept, authorization, content-type, origin, referer, x-csrf-token
EOF
# ディレクトリの権限を設定
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 ps
4. 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 couchdb
5. システムデータベースとObsidianデータベースの作成
# システムデータベースを作成
curl -X PUT http://admin:${COUCHDB_PASSWORD}@127.0.0.1:5984/_users
curl -X PUT http://admin:${COUCHDB_PASSWORD}@127.0.0.1:5984/_replicator
curl -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 の手順に従って設定を行います。
Remote Database connection の部分で、以下のように設定します。
項目 | 値 |
---|---|
Server URI | https://your-domain.com/couchdb/ |
Username | admin |
Password | {CouchDB のパスワード} |
Database Name | obsidian |
手順書に従いそのまま2台目以降もセットアップします。
完成
このように、同期されます。
おわりに
今日やったばかりで、そもそも無料枠に収まっているのかすら不安です。 データ転送も大した金額にならないと踏んでいるのです、実際どの程度になるのかはあまり考えてません。 そのあたりと使用感を含めて、1ヶ月後くらいに追記しようと思います。
GCS に画像アップロードするのも近々やろうと思います。 アップロード自体は簡単なんですが、普通にやると誰でも閲覧可能な状態になってしまうので、 そのあたりの設定をどうするか考え中です。