
自ホスト型SynchとIgnisを導入しObsidian保管庫を複数デバイス間で安全に同期する方法
Cloudflare Zero Trust環境において、自ホスト型のSynchとIgnisを導入し、複数デバイス間でObsidianの保管庫(Vault)を安全に同期・暗号化するとともに、ウェブブラウザ経由でノートを安全に閲覧・編集するための、強固なプライベートネットワーク構築手順を詳しく解説します。
目次
Obsidianは、ローカルファースト(ローカル優先)のナレッジ管理アプリです。すべてのノートはデバイス上のMarkdownファイルとして保存され、完全にユーザー自身の管理下に置かれます。しかし、ノートパソコン、スマートフォン、その他のデバイスで同じ保管庫(Vault)を共有したかったり、外出先からウェブブラウザ経由でアクセスしたかったりすることも少なくありません。

Obsidian向けにはいくつかの同期ソリューションが提供されていますが、コンフリクト(衝突)の処理、暗号化、またはデータの所有権(データ主権)などの面で、何らかのトレードオフを伴うのが一般的です。Synchは、セルフホスト(自ホスト)サーバーを用いて、エンドツーエンド(端対端)の暗号化と自動コンフリクト処理を両立させながらObsidianの保管庫を同期できるオープンソースのアプリケーションです。
Obsidianのローカルファーストなアプローチはほとんどの場面で完璧に機能しますが、状況によってはウェブブラウザからリモートで保管庫にアクセスしたい場合もあります。Ignisは、オープンソースのウェブクライアントであり、ウェブブラウザ上でObsidianをデスクトップアプリに近い形式で実行できるため、場所を問わず保管庫の閲覧・編集が可能です。
このガイドでは、VPS(仮想専用サーバー)上にSynchとIgnisをセットアップし、これらを公開インターネットにさらすのではなく、**Cloudflare Zero Trust**のプライベートネットワーク内で安全にホストする手順を紹介します。


関連記事
Cloudflare WARPでHermesエージェントをプライベートに公開する方法
インバウンド用のファイアウォールポートを開放することなく、Cloudflare WARPとZero Trustを用いて、Hermesエージェントをグローバルから安全に公開・アクセスする方法を解説します。
8分で読めるSynchによるObsidian保管庫の安全な同期
Synchには以下の特徴があります:
- 変更が検出されると、即座に保管庫を同期
- アップロード前に保管庫のデータを暗号化
- バージョン履歴(履歴管理)からの復元が可能
- 自動コンフリクト処理を搭載
Synchは、デバイス上でランダムな32バイトの保管庫キー(Vault Key)を生成し、これを用いてデータを暗号化します。リモート保管庫を作成する際に、保管庫パスワードを設定します。このパスワードは保管庫キーを保護するために使用され、サーバー上に安全に保管され、他のデバイスでロックを解除する際に必要となります。
コンフリクトの解決は、サーバー上ではなく、お使いのクライアントデバイス上で行われる点に注意してください。2つのデバイスが同じノートを同時に編集した場合、サーバーは最初に到着したバージョンを保持し、もう一方のデバイスを「古い(バージョン不一致)」状態としてマークします。古い状態のデバイスは、最終的なマージ後のノートをアップロードする前に、ローカルの変更内容に新しいバージョンを自動的にマージ(統合)します。
VPSへのSynchの導入
ドメイン名の作成
CloudflareでAレコードを作成し、プロキシステータスを 「DNSのみ(DNS only)」(CloudflareのCDNをバイパスする設定)に設定します。

Ubuntu上でDockerを用いたSynchのインストール
リポジトリのクローン
git clone https://github.com/hjinco/synch.git
# APIフォルダに移動
cd synch/apps/api
# 環境変数ファイルのサンプルをコピー
cp .env.example .env
.env ファイルの設定
PUBLIC_URL=synch.pafor.me: Synchサーバーの公開ドメイン名(前のステップで作成したドメイン名)を入力します。BETTER_AUTH_SECRETとSYNC_TOKEN_SECRET: このオンライン秘密鍵生成ツールを使用するか、ターミナルでopenssl rand -hex 32を2回実行して安全な鍵を生成します。AUTH_ALLOWED_EMAILS: アカウント作成とサインアップを許可するメールアドレスをカンマ区切りで指定します。
Caddyfileへのドメインの追加
Cloudflare DNSモジュールをCaddyに統合し、コンテナ内で起動する方法の詳細については、こちらのセルフホストBuzzに関する記事をご参照ください。

セルフホストガイド
Block製Buzzを自己ホスト:人とAIエージェントが自律的に協働する次世代共有ワークスペースの構築
Dockerコンテナ内のCaddyが、Cloudflare DNS認証チャレンジを用いてSSL/TLS証明書を自動的に発行・更新するように構成する方法を学びます。
12分で読めるCaddyfileに SYNCH_DOMAIN ディレクティブを追加し、ポート 8787(Synchコンテナが使用するポート)を指定します:
{
acme_dns cloudflare {env.CLOUDFLARE_API_TOKEN}
}
{$SYNCH_DOMAIN} {
encode zstd gzip
reverse_proxy host.docker.internal:8787
}
コンテナを起動します:
docker compose up -d
次の curl コマンドを実行して、稼働状況を確認します:
curl https://synch.pafor.me/health
ObsidianとSynchサーバーの接続
ObsidianへのSynchプラグインのインストール
Obsidianの設定を開き、**「コミュニティプラグイン」に移動して、「閲覧(Browse)」**ボタンをクリックします:

検索バーで 「Synchrun」 を探し、インストールします:

「Synchrun」 のインストール完了後、プラグインの設定を開き、**「Use a self-hosted server(自ホストサーバーを使用)」を有効にします。次に、「Server URL」フィールドに https://synch.pafor.me を入力し、「Save」**をクリックします。

**「Account」**項目内にある 「Sign in on this device(このデバイスでサインイン)」 ボタンをクリックします。続いて、.env ファイルの AUTH_ALLOWED_EMAILS リストに指定したメールアドレスを使ってサインアップ(アカウント登録)を行います。完了後、以下の認証ページにリダイレクトされます:

「Allow Obsidian sign-in(Obsidianへのサインインを許可)」 ボタンをクリックします:

「Return to Obsidian(Obsidianに戻る)」 ボタンをクリックし、次に 「Create vault(保管庫の作成)」 をクリックします:

リモート保管庫の名前と安全なパスワードを入力して作成します。

これで自動的に同期処理が開始されます。お使いの保管庫の容量によって完了までにかかる時間は異なります。同期完了後、ストレージの総使用量が表示されます。

IgnisによるブラウザベースのObsidianアクセス
Ignisは、Obsidianが使用するElectron APIをWeb APIに置き換えることで、標準的なウェブブラウザ上で直接ObsidianのJavaScriptコードを実行可能にするツールです。すべてのMarkdownファイルと添付ファイルは、ホストサーバー上のファイルシステムに直接保存されます。
ただし、スタンドアロン型のObsidianデスクトップアプリと比較して、いくつかの制限事項が存在します。ブラウザ環境に直接対応する機能がないElectron APIやNode.js APIに依存する一部の機能やサードパーティ製プラグインは動作しません。詳細な互換性については、Ignis公式の Limitations(制限事項) および Plugin compatibility(プラグイン互換性) ガイドをご参照ください。
Ignisのセットアップ
今回はDockerを使用し、VPS上に Ignis をインストールして、ローカルの ./vaults フォルダにマウントします。この保管庫ディレクトリは、先ほど設定したリモート保管庫から最新のノートデータを取得するために、Synch CLIを用いてバックグラウンドで自動同期されます。
また、Ignisには標準でユーザー認証機能が備わっていないため、外部からの不正アクセスを防ぐために、**Cloudflare Zero Trust**のプライベートネットワークの背後に隠して安全を確保します。
DNSレコードの作成

Caddyfileへのドメイン追加
synch.pafor.me と同様に、Caddyfileに obsidian.pafor.me を追加します:
{$OBSIDIAN_DOMAIN} {
encode zstd gzip
reverse_proxy host.docker.internal:9898
}
Dockerを使用したIgnisの起動
以下の docker-compose yml の内容を ignis-docker-compose.yml としてVPS上に保存します:
services:
ignis:
image: nobbe/ignis:latest
ports:
- "9898:8080"
environment:
# お使いのホストユーザーのUID/GIDに合わせて構成してください (確認コマンド: id)
- PUID=1000
- PGID=1000
- WS_ORIGINS=https://obsidian.pafor.me
volumes:
- ./vaults:/vaults
- ./data:/app/data
- obsidian-app:/app/obsidian-app
restart: unless-stopped
volumes:
obsidian-app:
- ポート
8080は他のサービスと競合しやすいため、ホスト側では9898を使用します。 - VPS上で
idコマンドを実行し、お使いのホストユーザーのUIDとGIDを確認・設定して、適切なファイルシステム権限が適用されるようにします。 WS_ORIGINSを設定し、指定した独自ドメインのみからWebSocket接続を受け入れるよう制限します。
Ignis のコンテナを起動します:
docker compose -f ignis-docker-compose.yml up -d
ウェブブラウザで設定したドメインにアクセスすると、**「Vault Manager(保管庫マネージャー)」**が表示されます。まだ保管庫が作成されていないため、画面は空の状態です。次のセクションで、リモート保管庫とデータを同期するために Synch CLI の設定を行います。

ファイアウォールに関する注意点
Dockerの標準仕様として、コンテナを起動すると自動的にDNATおよびFORWARDルールがiptablesへ挿入され、外部からの通信がダイレクトに対象コンテナへルーティングされます。この挙動は、Ubuntuに標準搭載されているUFWやiptablesの INPUT チェーンによる制御をバイパスしてしまいます。コンテナを完全にプライベート化し、不要な通信を遮断するために、手動で以下のルールを iptables に適用します:
# 外部公開インターフェースからのトラフィックをすべて拒否
sudo iptables -I DOCKER-USER -i ext_if -j DROP
# 許可する特定のCloudflare WARPクライアントのプライベートIPからのみアクセスを許可
sudo iptables -I DOCKER-USER -i ext_if -s 100.96.0.10 -j ACCEPT
Synch CLIのセットアップ
Synch CLIは、グラフィカルなUIを持たない(CUI用の)ツールであり、デスクトップ版のアプリケーション一式をインストールすることなく、リモートサーバー上で直接Obsidianの保管庫フォルダを同期させることができます。
先ほどクローンした synch リポジトリから、Synch CLIをビルドします。ビルドには、Node.js >= 22.5(CLIが内部で node:sqlite や、fetch, WebSocket, WebCrypto などのブラウザ互換APIに依存しているため)および pnpm(リポジトリがバージョン 10.33.0 のpnpmワークスペースとして管理されているため)が必要です:
# バージョンの確認
node --version # 22.5以上であることを確認
pnpm --version
# リポジトリのルートディレクトリで
pnpm install
# CLIのビルドを実行
pnpm -C apps/cli build
# ビルドに成功すると、`apps/cli/dist/synch.js` が生成されます。実行権限を付与し、パスの通った場所に配置します
chmod +x apps/cli/dist/synch.js
ln -sf "$PWD/apps/cli/dist/synch.js" "$HOME/.local/bin/synch"
# 正しく導入されたか確認
synch --help
ビルドしたSynch CLIは、リモートのSynch保管庫が稼働しているのと同じVPS上で実行するため、ローカルのAPIサーバーに直接接続できます。もし別の独立したサーバーから同期を設定する場合は、synch login --api-url <リモートのSynchのAPIのURL> を実行してあらかじめ接続先を定義しておきます。

ターミナルで synch login を実行すると、認証用URLが提示されます:

デスクトップ版ObsidianのSynchrunプラグインに登録したのと同じメールアドレスを用いて、提示されたウェブページからログインします。

ログイン後、synch vault connect --vault ~/vaults/<保管庫名> --vault-id asadqe-7b29-4677-fsad-234asdafasd を実行して、VPS上のローカルディレクトリとリモートの保管庫を紐づけます。
リモート保管庫のID(Vault ID)は、デスクトップ版プラグインの 「Synchrun」 設定画面の 「Manage remote vaults(リモート保管庫の管理)」 から確認可能です。クリックするとウェブページが開き、固有のGUID(例: 123e4567-e89b-12d3-a456-426614174000)が設定された保管庫一覧が表示されます:


プロンプトの指示に従って保管庫のパスワードを入力すると、接続が確立されます。その後、synch sync --vault ~/vaults/<保管庫名> を実行して最初の同期処理(イニシャル同期)を行います。初回はデータ量に応じて数分〜数十分ほどかかる場合があります。

この同期処理を常時自動化するために、システム起動時にバックグラウンドで synch watch が自動実行され、変更を即座に反映できるように、systemdのサービスユニットを作成して有効化します:
sudo tee /etc/systemd/system/synch-watch.service <<'EOF'
[Unit]
Description=Synch vault watcher
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=<username>
ExecStart=/home/<username>/.local/bin/synch watch --vault /home/<username>/vaults/<vault-name>
WorkingDirectory=/home/<username>/vaults
Environment="PATH=/home/<username>/.local/bin:/home/<username>/.cargo/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
Environment="HOME=/home/<username>"
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable --now synch-watch.service
ブラウザで obsidian.pafor.me にアクセスしてみましょう。以下のように、デスクトップ版とほとんど見分けがつかない美しいインターフェースとノートレイアウトが表示されます:

設定アイコンを開くと、ほぼすべての基本設定がそのまま引き継がれていることが確認できます。ただし、コミュニティプラグインについては、ブラウザ側で必要に応じて個別に再インストールを行う必要があります:

動作テストとして、このウェブ画面側から新しくノートを1枚追加してみます:

作成すると、即座にデスクトップ側のObsidianアプリにも同期され反映されることが確認できます。なお、中身が空のフォルダは Ignis の画面上には表示されない仕様になっています。

スマートフォンなどのモバイルブラウザから obsidian.pafor.me にアクセスした場合の表示:


また、Ignis上で不要になったノートを削除した場合、そのノートはローカル保管庫内の ~/vaults/<保管庫名>/.trash フォルダへ安全に移動(ゴミ箱行き)となります。
自己ホスト型保管庫に関するまとめ
オープンソースの Synch と Ignis を組み合わせることで、自分が完全に管理・所有するインフラ上で、メインのObsidian保管庫をデバイスを選ばず安全に同期・活用できるようになります。また、これらのサービスを Cloudflare Zero Trust の閉域プライベートネットワーク内に配置することで、あなたの大切な個人ノートを公開インターネットの脅威から完全に隔離・保護することが可能です。
なお、Ignisはデスクトップ版のローカルアプリを100%代替することを狙って作られたものではありません。あくまで「手元に普段のパソコンがない時や、他環境のブラウザからノートを一時的に確認・編集したい場合」に重宝する、軽量かつ機動性に優れたウェブクライアントとしての役割を担います。普段のノート記述や細かなカスタマイズ、プラグインの本格的な利用には、引き続きObsidianのネイティブアプリを主軸として活用するのが最善です。
最後に、Synchはエンドツーエンドで強力に暗号化されているため、ブルートフォース(総当たり)攻撃からノートを守るためには、十分に強固なリモート保管庫パスワードの設定が必須です。万が一パスワードを紛失した場合、サーバー側には復号された 保管庫キー は一切保存されていないため、データを復元することは絶対に不可能です。VPSのインスタンスのセキュリティ管理、および自動スナップショットやバックアップのメンテナンスも、怠らず適切に行ってください。
Synchの履歴管理機能やゴミ箱への退避機能によって、誤操作によるデータ消失の大半は防げますが、大切なナレッジを守るためにも、Obsidian保管庫全体の独立したバックアップを別途定期的に取得しておくことを強くお勧めします。
参考リンク
関連記事

AIとエージェント
Cloudflare WARPでHermes Agentをプライベートネットワークに公開する方法
ファイアウォールのインバウンドポートを開くことなく、Cloudflare WARPとZero Trustを使用してグローバルかつ安全にHermes Agentへアクセスし、プライベートネットワークに公開する方法を詳しく解説します。
5分で読める
Cloudflare
CloudflareとModel Context Protocolによる永続的自己ホスト型AIメモリシステム
CloudflareとSecond Brain、MCPを使用して、永続的で自己ホスト型のAIメモリシステムを構築する方法を学びます。ClaudeやGemini、Obsidianでコンテキストを共有しましょう。
38分で読める
セキュリティ
MacのMDM構成プロファイルを用いて複数のCloudflare WARP組織を切り替える設定手順ガイド
Macで.mobileconfigファイルを用いて、複数のCloudflare WARP組織環境を設定し、ユーザーUI上で簡単に切り替える方法をステップバイステップで分かりやすく解説します。システム管理者向けに、MDM構成プロファイルの作成、インストール、切り替え動作確認まで網羅した完全な実践設定ガイドです。
2分で読める
前の記事
Block製Buzzを自己ホスト:人とAIエージェントが自律的に協働する次世代共有ワークスペースの構築
Blockが開発したAI協働スペース「Buzz」のNostrリレーを、Cloudflare DNSを介してUbuntu VPS上に自己ホストする方法を解説します。暗号鍵による安全な認証のもと、人間と各種AIエージェントがチャンネルやプロジェクトの履歴を共有し、自律的に連携するセキュアな作業環境を構築しましょう。

次の記事
Cloudflare WARPでHermes Agentをプライベートネットワークに公開する方法
ファイアウォールのインバウンドポートを開くことなく、Cloudflare WARPとZero Trustを使用してグローバルかつ安全にHermes Agentへアクセスし、プライベートネットワークに公開する方法を詳しく解説します。