【要約】1行の変更でStrapiの本番DBを吹き飛ばした話 [Qiita_Trend] | Summary by TechDistill
> Source: Qiita_Trend
Execute Primary Source
// Problem
開発者が本番環境のStrapi管理画面でスキーマ変更を行った際、デプロイによってデータが消失する問題に直面した。
- ・本番環境が
NODE_ENV=developmentで動作していた。 - ・管理画面での変更が、Git管理外のサーバー上のファイル(
schema.json)にのみ反映されていた。 - ・デプロイ時の
--forcepush により、サーバー上の変更がGitの古い状態に上書きされた。 - ・Strapiの起動プロセスが、古いコードに合わせてDBのテーブルやカラムを削除した。
DROP TABLE 等が実行され、本番データが消失した。// Approach
開発者は、事故のメカニズムを特定し、スキーマ管理とデプロイフローの改善というアプローチを採用した。
- ・スキーマ変更フローの厳格化:ローカルで変更を行い、
schema.jsonをGit経由でデプロイする。 - ・実行モードの固定:本番環境では
NODE_ENV=productionを指定し、スキーマ編集をロックする。 - ・デプロイプロセスの改善:
--forcepush の使用を再検討し、デプロイ前のDBバックアップを自動化する。 - ・運用ルールの徹底:本番管理画面はコンテンツ入力専用とし、構造変更は開発工程に組み込むことで、コードとDBの不整合を物理的に防ぐ。
// Result
開発者は、事故のメカニズムを解明し、Strapiの正しい運用モデルを確立することで再発防止を図った。
- ・本番環境でのスキーマ変更を不可能にし、意図しないDB操作を防止する。
- ・DBバックアップの自動化により、万が一の際のリスクを低減する。
- ・一部のデータは消失したが、運用フローの改善により再発を防止した。
Senior Engineer Insight
> Strapiの「スキーマはコードである」という設計思想を軽視したことが致命傷である。管理画面を「DBエディタ」と誤認してはならない。本番環境では、コードを唯一の正解(Single Source of Truth)とし、環境変数によるモード制御を徹底すべきだ。また、CI/CDにおける
--force の使用は、状態を持つサーバーに対しては極めて高いリスクを伴う。スキーマ変更は必ずローカルで行い、Gitを通じてデプロイするフローを遵守せよ。