巻き戻しの備え
このページで決めること:問題が起きたときに使う巻き戻しの仕組みを、どこまで用意しておくか
決める前に知っておくこと
EmDashのサイトで「戻したいもの」は、性質の違う6つに分けられます。それぞれ、戻す仕組みが別です。
| 戻したいもの | 起きること(例) | 使える仕組み | 提供元 | 戻せる範囲 |
|---|---|---|---|---|
| 1ページの本文 | 誤った内容を公開した | リビジョンから前の版を復元 | EmDash標準 | 保存された版 |
| 削除したページ | 誤って削除した | ゴミ箱から復元 | EmDash標準 | 「完全に削除」するまで |
| データベース全体(本文、スキーマ、設定、ユーザー、プラグインのデータ) | フィールドを削除した。大量の誤更新をした | D1のTime Travel(1分単位で過去の時点に戻す) | Cloudflare標準 | 有料プランで30日前まで、無料プランで7日前まで |
| 動いているコード | デプロイ後に表示が崩れた | Workersのロールバック(管理画面または wrangler rollback) |
Cloudflare標準 | 直近100版 |
| コードの元のファイル(ソース) | 改修を取り消して作り直したい | Gitのコミット履歴 | Gitのホスティング(GitHubなど) | 保管した全履歴 |
| 画像・ファイル | 差し替えた。削除した | バケットのオブジェクトを別の場所にコピーしておく | 自分で用意する | コピーした時点 |
各仕組みには、次の性質があります。
- リビジョンを復元すると、選んだ版の内容で新しいリビジョンが作られます。それまでのリビジョンは消えません。
- ゴミ箱に移したエントリーは、管理者が「完全に削除」を選択すると、リビジョンごと消えて元に戻せません。
- D1のTime Travelは、データベース全体を上書きして戻します。戻す前の状態に戻り直すためのブックマークも発行されます。R2のメディアファイルは戻りません。
- Workersのロールバックは、デプロイ済みのコードだけを戻します。D1、R2、KVなどつながっているリソースは変わりません。KVやR2のバインディングを削除した版には戻せません。
- EmDashのコアマイグレーション(本体更新時のデータベース構造の変更)は前にしか進まず、取り消す手順がありません。
- 管理画面の「設定」→「バックアップ」から取れるJSONのバックアップでは、サイトを復元できません。EmDashにはJSONから復元する機能がありません。
- Cloudflareに登録したシークレットは、登録後にWranglerや管理画面から値を読み出せません。
公式の推奨
- 一括投入、スキーマ変更、大きな更新の前には、JSONのバックアップではなく、復元できるデータベースのバックアップ(D1ならTime Travelの時点)を用意します。(公式「バックアップと復旧」)
- 危険な操作の前に、
npx wrangler d1 time-travel infoで現在のブックマークを取得し、デプロイや変更の記録と一緒に控えます。(公式「バックアップと復旧」) - データベースを戻すときは、先にサイトへの書き込みを止めます。戻したあとは、戻したデータベースに合う版のコードをデプロイし、ログイン、コンテンツの読み込み、書き込みを確認します。(公式「バックアップと復旧」)
- SQLダンプを、稼働中の本番データベースにそのまま実行してはいけません。空のD1データベースを新しく作って読み込み、確認してから本番のバインディングを切り替えます。(公式「バックアップと復旧」)
- R2やS3互換のバケットは、データベースとは別に、オブジェクト単位でバックアップします。バックアップは本番のアカウントや障害の範囲の外に置き、同じ時点のデータベースのバックアップやTime Travelの時点を記録します。(公式「バックアップと復旧」「メディアストレージの選択」)
- EmDashの更新で問題が出て、前の版のコードが更新後のデータベースを使えない場合は、書き込みを止め、更新前のデータベースとコードを一緒に戻します。(公式「EmDashのアップデート」)
別の選択肢が合う条件
記事の更新だけで運用し、コード・スキーマ・データベースの一括変更をしないサイトでは、Aの範囲で足りることもあります。コードの改修はするが、画像の差し替えが少なく、誤りにすぐ気づける体制なら、Bで運用する方法もあります。
根拠にした公式ページ
- バックアップと復旧(原文:https://docs.emdashcms.com/guides/backups/)
- コンテンツの作成と公開(原文:https://docs.emdashcms.com/guides/working-with-content/)
- コアDBマイグレーション(原文:https://docs.emdashcms.com/deployment/core-migrations/)
- EmDashのアップデート(原文:https://docs.emdashcms.com/deployment/updating/)
- メディアストレージの選択(原文:https://docs.emdashcms.com/deployment/storage/)
- シークレットとキーの管理(原文:https://docs.emdashcms.com/deployment/secrets/)
- D1のTime Travel(https://developers.cloudflare.com/d1/reference/time-travel/)
- Cloudflare Workersのロールバック(https://developers.cloudflare.com/workers/configuration/versions-and-deployments/rollbacks/)
- Cloudflare Workersのシークレット(https://developers.cloudflare.com/workers/configuration/secrets/)