園全体の復元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の個人情報は更新記録に出力しない。