Techvoyage
ホーム
セルフホストSynchとIgnisを使用し、Cloudflare Zero Trustプライベートネットワーク内で安全に複数デバイス間のObsidian保管庫を同期している図

自ホスト型SynchとIgnisを導入しObsidian保管庫を複数デバイス間で安全に同期する方法

Cloudflare Zero Trust環境において、自ホスト型のSynchとIgnisを導入し、複数デバイス間でObsidianの保管庫(Vault)を安全に同期・暗号化するとともに、ウェブブラウザ経由でノートを安全に閲覧・編集するための、強固なプライベートネットワーク構築手順を詳しく解説します。

Sep 15, 2026 - 7分で読める
目次

Obsidianは、ローカルファースト(ローカル優先)のナレッジ管理アプリです。すべてのノートはデバイス上のMarkdownファイルとして保存され、完全にユーザー自身の管理下に置かれます。しかし、ノートパソコン、スマートフォン、その他のデバイスで同じ保管庫(Vault)を共有したかったり、外出先からウェブブラウザ経由でアクセスしたかったりすることも少なくありません。

Obsidian向けにはいくつかの同期ソリューションが提供されていますが、コンフリクト(衝突)の処理、暗号化、またはデータの所有権(データ主権)などの面で、何らかのトレードオフを伴うのが一般的です。Synchは、セルフホスト(自ホスト)サーバーを用いて、エンドツーエンド(端対端)の暗号化と自動コンフリクト処理を両立させながらObsidianの保管庫を同期できるオープンソースのアプリケーションです。

Obsidianのローカルファーストなアプローチはほとんどの場面で完璧に機能しますが、状況によってはウェブブラウザからリモートで保管庫にアクセスしたい場合もあります。Ignisは、オープンソースのウェブクライアントであり、ウェブブラウザ上でObsidianをデスクトップアプリに近い形式で実行できるため、場所を問わず保管庫の閲覧・編集が可能です。

このガイドでは、VPS(仮想専用サーバー)上にSynchとIgnisをセットアップし、これらを公開インターネットにさらすのではなく、**Cloudflare Zero Trust**のプライベートネットワーク内で安全にホストする手順を紹介します。

Cloudflare Zero TrustとWARPトンネルを使用してHermesエージェントをプライベートネットワークに安全に公開する様子

関連記事

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に関する記事をご参照ください。

自己ホスト型ワークスペースにおいて、SSL/TLS証明書の自動生成のためにCloudflare DNS APIトークンを使用してCaddyを構成する構成図

セルフホストガイド

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保管庫全体の独立したバックアップを別途定期的に取得しておくことを強くお勧めします。

参考リンク

関連記事