Cloudflare を使わずに Synch をセルフホスト
Docker Compose または systemd で自分のハードウェア上に Synch サーバーを実行できます。Cloudflare やサードパーティサービスは必要ありません。
Cloudflare をまったく使いたくない場合、Synch のサーバーは通常の Node.js プロセスとしても実行できます。このガイドでは、ホームラボの NAS、小規模な VPS、Incus/LXC コンテナなど、長時間稼働するプロセスを実行してポートを公開できる自分のハードウェア上で、Docker Compose または systemd を使って Synch を実行する方法を説明します。
データはすべてディスクに保存されます。vault ごとに SQLite ファイルが 1 つ作成され、アカウントと vault のメタデータ用に小さなアプリデータベースが追加されます。D1、Durable Objects、R2 は必要ありません。自分で管理するディレクトリにファイルを保存するだけです。
無料の Cloudflare アカウントにデプロイしたい場合は、Cloudflare セルフホスティングガイドを参照してください。
デプロイ前の準備
どちらの方法でも、Obsidian を使うデバイスからサーバーに接続できる必要があります。ローカルネットワーク内だけで使うことも、外出先から同期できるようインターネット経由で使うこともできます。後者の場合は reverse proxy の背後に TLS を設定してください。サーバー自体は通常の HTTP のみを使用します。
Docker Compose でデプロイ
Docker と Docker Compose をインストールしておく必要があります。
-
リポジトリを clone して API ディレクトリに移動します。
git clone https://github.com/hjinco/synch.git cd synch/apps/api -
サンプル環境ファイルをコピーします。
cp .env.example .env -
.envを編集して、次の値を設定します。-
PUBLIC_URL- クライアントがこのサーバーに接続するためのアドレスです。LAN ではhttp://192.168.1.50:8787、reverse proxy の背後ではhttps://synch.your-domain.exampleなどを使えます。スキームとポートを含めて正確に一致させてください。受信リクエストの origin の検証に使われます。 -
BETTER_AUTH_SECRETとSYNC_TOKEN_SECRET- 互いに独立した 2 つのランダムな secret です。それぞれ次のコマンドで生成します。openssl rand -hex 32 -
AUTH_ALLOWED_EMAILS(必須)- アカウント作成を許可する正確なメールアドレスをカンマ区切りで指定します。AUTH_ALLOWED_EMAILS=you@example.com,family@example.com比較では大文字と小文字、および前後の空白を無視します。この設定は新規アカウントの作成だけを制限するため、リストからアドレスを削除しても既存ユーザーは引き続きサインインできます。
-
-
サーバーを起動します。
docker compose up -d
vault と blob のデータは、再起動やアップグレード後も synch-data Docker ボリュームに保持されます。新しいホストへ移行する場合は、このボリュームと .env ファイルを一緒にコピーしてください。
Blob ストレージ
デフォルトでは、暗号化されたファイルの内容は同じデータボリューム内のディスクに保存されます。AWS S3、MinIO、R2 などの S3 互換バケットを使う場合は、起動前に .env の BLOB_STORAGE=s3 ブロックのコメントを外して値を入力してください。
アップグレード
git pull
docker compose up -d --build
データベースのマイグレーションは起動時に自動で実行されます。
Docker なしで systemd を実行
サーバーは単純な Node.js プロセス(src/self-host.ts)で、tsx を使って実行します。Docker は便利な選択肢ですが必須ではありません。すでに VM(Incus/LXC コンテナなど)を使っていて、Docker を依存関係として追加したくない場合に適した方法です。
Debian/Ubuntu では、install.sh が以下の手順を自動化します。リポジトリを clone して cd apps/api && sudo ./install.sh を実行してください。git pull 後の更新や再起動のために再実行しても安全です。手動で設定する場合は次の手順に従います。
-
Node.js 24 とビルドツールチェーンをインストールします。使用している VM のアーキテクチャや libc に合う prebuilt バイナリがない場合、
better-sqlite3のネイティブモジュールをビルドするために必要です。# Debian/Ubuntu sudo apt install -y nodejs python3 make g++ sudo corepack enable -
リポジトリを clone して production 依存関係をインストールします。
git clone https://github.com/hjinco/synch.git /opt/synch cd /opt/synch/apps/api pnpm install --frozen-lockfile --filter @synch/api... --prod -
.env.exampleを.envにコピーし、上記の Docker Compose の手順と同じ値を設定します。 -
systemd unit の例をインストールして起動します。
sudo useradd --system --home /var/lib/synch-api --create-home synch sudo cp synch-api.service.example /etc/systemd/system/synch-api.service # /opt/synch や synch ユーザーを使わない場合は unit のパス/User/Group を編集してください。 sudo systemctl daemon-reload sudo systemctl enable --now synch-api -
起動していることを確認します。
curl http://localhost:8787/health sudo journalctl -u synch-api -f
アップグレード(systemd)
cd /opt/synch
git pull
cd apps/api
pnpm install --frozen-lockfile --filter @synch/api... --prod
sudo systemctl restart synch-api
localhost のみにバインド
デフォルトでは、サーバーは 0.0.0.0(すべてのインターフェース)で待ち受けます。Docker Compose がポート公開を行うにはこの設定が必要です。systemd でのデプロイをローカルの reverse proxy(例: tailscale serve、nginx、Caddy)の背後で実行し、サーバーに LAN や公開インターフェースから直接アクセスされたくない場合は、.env に HOST=127.0.0.1 を設定してください。systemd unit の例と install.sh では、すでにこの設定が使われています。
変更後は、PUBLIC_URL をクライアントが実際に接続するアドレス(127.0.0.1 ではなく reverse proxy のアドレス)に更新して、サービスを再起動してください。PUBLIC_URL は better-auth が受信リクエストの origin を検証するために使います。
Obsidian を接続
- Obsidian を開きます。
- Settings に移動します。
- Synch 設定を開きます。
- Self-hosted server にサーバーの
PUBLIC_URLを貼り付けます。末尾に/は付けないでください。 - Save をクリックします。
- 通常どおりサインインと vault の設定を続けます。