コンテンツにスキップ

園全体の復元UI:配備記録(2026-09-21)

状態:2026-09-21 07:09:44 JST、本番反映完了。配備サービスのcompleteに加え、本番のcommit・image・Composeハッシュを別途照合済み。

  • ユーザーはモック試用後、「OK、実機に反映してください」と承認。
  • 本番基準:f6f24938c3ad963c1b53203914a5cdd5aead2ad3。
  • 配備済み:66471bffb6eb3bba0b1783a498b84dad7fbaade6。
  • push先:codex/restore-ui-20260921-production。
  • 開発ブランチはbackup format 2を含むため、その全体を本番へ上書きしない。今回の機能は形式1の現行本番専用ブランチに実装。

完了した検証

復元ランタイム12件、既存のバックアップ・設定57件を通過。実アプリ子プロセス、gateway、backup-worker、restore-workerを使い、ログイン・CSRF拒否・再認証・WebSocket・利用停止・復元・再ログイン・進捗参照権限を架空データで検証した。配備ヘルパーは正常系と3種類の失敗からの復帰、設定保持、余分な権限の拒否、バックアップ待機を検証した。Ruffと差分の書式チェックも通過。

新規実装画面のローカルブラウザー確認はブラウザー側で開けず、完了していない。合意済みモックは前段で画面幅と正常・異常操作を確認済み。実装後の画面遷移と入力条件は実HTTP処理による通し検証で確認している。

実機で実行する内容

固定版のビルド、ネットワークを無効にしたコンテナで架空データの復元・切り戻し検証、現行DBコピーで既存機能・スキーマの検査、保存済みバックアップの追加検査を行う。成功後に短時間の利用停止、バックアップ待機、ZFS snapshotとDB退避、新サービスの起動、既存データ・添付・定期実行設定の保持を検査して再開する。失敗時は旧アプリ・旧設定・旧backup-workerを再開する。

この配備で本番データを過去のバックアップへ復元することはない。復元機能を追加し、実際の復元は管理者の画面操作で行う。

初回配備の結果

2026-09-21 05:41 JSTに配備サービスを開始。実機の隔離コンテナでの通し復元・切り戻しテスト、現行DBコピーの検証、既存バックアップ2件の追加検査は成功した。05:48 JST、Compose設定の保持確認で停止した。

原因はDocker Compose v2.38.1が既存appの未指定commandを明示的なnullとして正規化すること。比較処理が復元用commandを取り除いた後に元のnullを戻さず、項目なしとの差を変更と誤判定していた。修正はこの比較処理だけで、アプリのcommitとCompose候補ファイルは初回と同一。

架空の設定値を使い実機のComposeで問題を再現し、修正後にCONFIG_COMPARISON_OKを確認した。既存環境値の改変やDockerソケット追加を拒否する検査、正常系と失敗時の旧版復帰の検査も通過。初回の本番アプリ・設定・deployment.jsonのハッシュは変更されていない。

本番反映の結果

修正版 /home/truenas_admin/restore-ui-20260921-66471bf-r2 で、07:03 JSTに開始。隔離検証と設定比較を通過し、07:09:44 JSTに完了した。アプリ・gateway・backup-worker・restore-workerの正常性と公開用tunnelの再開を確認済み。旧起動コマンドを再実行しない。

  • 本番イメージ:sha256:cf5ad500b3e014a275cfaa6f1b035ff2ce28e46d95a9d9ae7e92f9e7b7b83950。
  • 本番Compose:a15583b8d1edf8b23827986068b6e95af2eba17992ef91c6ab212cf128a2db3b。
  • deployment.json:8afa383f5d70023a4679539957855b0db289b7d74e3fb7d1bd555699d7828d12。
  • 既存DBの72テーブルと添付8ファイルの保持を検査。既存ログインと設定も保持。
  • 定期バックアップは有効・毎日02:00 JSTを維持。画面から実際に復元した場合は、合意仕様どおり無効となる。
  • 直前退避:before-restore-ui-20260920T220324Z。同時点のruntime ZFS snapshotと主DB・施設文例DBの退避を保存。

管理者は「設定 → バックアップ・復元 → 復元元を選ぶ」から利用する。実行前に対象・影響を確認し、管理者パスワードで再認証する。

完了記録は修正版ディレクトリの status.json、ローカルの .local-dev/truenas-restore-ui-20260921-retry1/verified-completion.json と live-after.json に保持。初回停止の記録も残している。ログ・展開済み設定・DBの個人情報は更新記録に出力しない。