バックアップと復旧

このページ

選択したコンテンツデータのオフラインコピーが必要なときは JSON バックアップを使います。EmDash はそのファイルをインポートできません。復旧計画には生のデータベースバックアップまたはポイントインタイムリカバリと、メディアバイナリの別コピーが必要です。

サイトのコンテンツ、設定、メディアを新しい EmDash サイト(別のデータベース上でも)にコピーするには、代わりに サイトパッケージ を使います。

サイトが暗号化されたプラグイン設定を保存している場合は、完全な EMDASH_ENCRYPTION_KEY ローテーションリストを別のシークレットマネージャーバックアップに保管してください。キーはデータベース、D1 Time Travel、SQL ダンプ、JSON エクスポートには決して保存されません。

バックアップに含まれるもの

JSON バックアップには次が含まれます。

  • 下書き、予約投稿、ゴミ箱内の項目を含むすべてのコンテンツエントリ
  • コンテンツモデルを構成するコレクションとフィールドの定義
  • タクソノミー定義、用語、各エントリに割り当てられた用語
  • メニューとメニュー項目、セクション、ウィジェット領域とウィジェット、SEO レコード、リビジョン履歴、メディア メタデータ、データベース移行履歴
  • タイトル、タグライン、URL、ロケール、ロゴ、表示設定、ソーシャルプロフィール、 SEO デフォルトなどのサイト設定。これらは site: 設定グループと emdash:site_title、 emdash:site_tagline、emdash:locale 設定から来ます。

次を含む他のすべてのデータベーステーブルは省略されます。

  • ユーザーアカウント、セッション、パスキー、OAuth データ、API トークン、その他の認証データ
  • プラグインストレージとプラグイン設定(プラグインシークレットを含む)
  • コメントとリアクション、リダイレクトと 404 ログ、バイライン、コンテンツリレーションと参照、監査ログ、レート制限、スケジュールタスクの状態
  • メディアフォルダ、メディアの使用場所の記録、未完了または進行中のアップロード、およびメディア ファイル自体
  • セットアップ時に記録されたデプロイ URL(emdash:site_url)、プレビュー署名シークレット、 バックアップスケジュールを含むその他のサイトオプション

バックアップは EmDash のプレビューシステムと同じスナップショット形式の JSON ファイルで、作成した EmDash リリースでバージョン付けされます。

ワンクリックダウンロード

管理画面の Settings → Backups で、Download backup ボタンが新しいバックアップを生成し、JSON ファイルとしてダウンロードします。管理者ロールが必要です。

ダウンロードは検査やカスタムツール向けです。一括インポート、スキーマ変更、 大規模アップグレードの前に、以下のいずれかのオプションで復元可能なデータベースバックアップを作成してください。サイトを 別の EmDash サイトへ移すには、Settings → Transfer で サイトパッケージ をエクスポートします。

ストレージへの自動バックアップ

サイトにストレージバックエンド(Cloudflare の R2、S3、またはローカルストレージ)が設定されている場合、日次の自動バックアップを有効にできます。

  1. 管理画面で Settings → Backups を開きます。

  2. Daily automatic backups をオンにします。

  3. 保持するバックアップ数を選びます(1–30)。古いアーカイブは自動的に整理されます。

  4. 保存します。バックアップは EmDash のスケジュールされたメンテナンスの一部として実行されます。追加の cron 設定は不要です。

アーカイブはバケットの backups/ プレフィックス下に emdash-backup-<timestamp>-<random>.json として保存されます。管理画面の Stored Backups 一覧で個別アーカイブのダウンロードや削除ができ、Back up now はオンデマンドで作成します。

自動バックアップはスケジュールされたメンテナンス tick(予約公開と同じ仕組み)に相乗りします。Cloudflare では Worker の cron トリガー、Node では組み込みスケジューラです。デプロイに cron トリガーが設定されていない場合は、代わりに Back up now またはダウンロードボタンを使ってください。

メディアオブジェクトのバックアップと復元

R2 および S3 互換バケットは、データベースに加えてオブジェクトレベルのバックアップが必要です。次の AWS CLI 例は、EmDash の backups/ アーカイブを含むすべてのオブジェクトをローカルバックアップディレクトリにコピーします。AWS S3 では --endpoint-url を省略します。

aws s3 sync s3://emdash-media ./emdash-media-backup \
  --endpoint-url https://<account-id>.r2.cloudflarestorage.com

定例バックアップジョブには読み取り専用のバケット資格情報を使います。バックアップは本番アカウントまたは障害ドメインの外に保存し、同時に作成したデータベースバックアップまたは Time Travel ポイントを記録します。

リクエストを処理中の本番を上書きするのではなく、空の復旧バケットに復元します。

aws s3 sync ./emdash-media-backup s3://emdash-media-recovery \
  --endpoint-url https://<account-id>.r2.cloudflarestorage.com

復元ジョブには復旧バケットのみへの書き込みアクセスを与えます。非本番デプロイをそのバケットに向け、既知のメディア URL をいくつか開き、使い捨てファイルをアップロードして削除します。復元したデータベースとメディアセットが一緒にチェックを通過したあとにのみ、本番バインディングまたはバケット設定を切り替えます。

Time Travel で D1 データベースを復旧する

リスクのある操作の前に、Time Travel に現在のブックマークを問い合わせ、デプロイまたは変更記録とともに記録します。

npx wrangler d1 time-travel info my-database

復旧が必要な場合は、サイトへの書き込みを止め、破壊的な復元コマンドを実行する前に利用可能な復元ポイントを確認します。

npx wrangler d1 time-travel restore my-database --timestamp=2026-07-08T13:00:00Z

Time Travel はコンテンツ、ユーザー、設定、プラグインデータ、移行レコードを含むデータベース全体を復元します。R2 メディアオブジェクトや EMDASH_ENCRYPTION_KEY は復元しません。プラグイン連携をテストする前に、復旧したプラグイン設定が参照するすべての暗号化キーを復元してください。コマンド完了後、復元したデータベースに一致するアプリケーションバージョンをデプロイし、トラフィックを再開し、サインイン、コンテンツ読み取り、スキーマ変更、暗号化されたプラグイン設定、書き込みを検証します。

詳細は D1 Time Travel ドキュメント を参照してください。

オフサイト D1 ダンプを作成する

生データベース(ユーザーと認証テーブルを含む)の完全な SQL ダンプには Wrangler を使います。

npx wrangler d1 export my-database --remote --output=backup.sql

SQL ファイルを一致するアプリケーションバージョン、同時に作成したメディアバックアップ、別途保存した EMDASH_ENCRYPTION_KEY ローテーションリストのコピーと一緒に保管します。新しくプロビジョニングした空の D1 データベースにダンプをインポートし、ランタイムキーを復元し、非本番バインディングをそのデータベースに更新してサイトを検証し、復旧をテストします。

空の復旧データベースへのインポートは次のコマンドです。

npx wrangler d1 execute my-recovery-database --remote --file=backup.sql

SQLite のバックアップと復旧

オフライン SQLite バックアップでは、データベースに書き込むすべてのプロセスを停止し、データベースファイルと隣の -wal および -shm ファイルをコピーします。-wal ファイルにはメインファイルにまだないコミット済み変更が含まれることがあります。一貫したオンラインバックアップには SQLite のバックアップコマンドを使います。

sqlite3 emdash.db ".backup backup.db"

ローカルのアップロードディレクトリまたは S3 互換バケットと、EMDASH_ENCRYPTION_KEY ローテーションリストは別にバックアップします。復旧では、すべてのサーバープロセスを停止し、破損したデータベースのコピーを残し、検証済みバックアップで置き換え、ランタイムキーと必要なメディアオブジェクトを復元し、一致するアプリケーションバージョンを起動します。トラフィックを再開する前に、サインイン、公開コンテンツ、暗号化されたプラグイン設定、編集、メディア読み取りを検証します。

JSON エクスポートではサイトを復元できない

EmDash には JSON 復元のための管理アクション、API エンドポイント、CLI コマンドがありません。上記のとおり D1 Time Travel、生の D1 SQL ダンプ、または SQLite データベースのコピーを使ってください。

新しい空の EmDash サイトにサイトのコンテンツを再構築するには、元のサイトがまだ利用可能なうちに サイトパッケージ をエクスポートし、新しいサイトにインポートします。サイトパッケージはユーザー、API トークン、プラグインデータ、シークレットを復元しないため、災害復旧用のデータベースバックアップの代わりにはなりません。