開発データを失う原因は、故障、誤削除(git resetやrm)、ランサムウェアの3つです。
はじめに
コードをGitHubにpushしているから、バックアップは大丈夫。
そう思っていませんか?
Gitで守れるのは、Gitで管理しているファイルだけです。
ローカルにしかない設定ファイル、データベースのダンプ、アップロードされた画像などは、リポジトリには入っていないことがほとんどです。この記事では、エンジニアが見落としやすいバックアップの穴と、その埋め方をまとめます。
データを失う3つの原因
- 物理的な故障:PCやディスクが壊れて、中のデータが取り出せなくなる
- 操作ミス:rmやgit reset --hard、上書き保存で、大事なファイルを消してしまう
- 不正アクセス:ランサムウェアなどに感染して、ファイルを暗号化される
特にランサムウェアは、ウイルス対策ソフトをすり抜けて感染することがあります。身代金を払っても、データが戻る保証はありません。そのため、被害に遭っても元に戻せるバックアップが、現実的な対策になります。
Gitで守れるもの、守れないもの
.envの扱い方
.envは、APIキーやパスワードなどの秘密情報をまとめて書いておくファイルです。
コードを直接書かずに済むので便利ですが、扱いには厳重注意が必要です。
Gitに入れない
.env
.gitignoreに.envと書いて、Gitの管理対象から外します。
API_KEY=XXXXXXXXXXXX
DB_PASSWORD=XXXXXXXXXXXX
代わりに、値を空にした.env.exampleをリポジトリに入れておくと、他の人にも必要な項目が伝わります。
誤ってコミットしてしまったら
公開リポジトリにpushしてしまった場合は、履歴を消す前に、そのキーを無効化して再発行してください。履歴から消しても、すでに誰かに読まれている可能性があるためです。
各サービスの管理画面で、キーの再発行方法を確認してください。
GitHubだけに頼らない
GitHubは便利ですが、それだけをバックアップにするのは避けたほうが安全です。
アカウントのトラブルやリポジトリの誤削除に備えて、次のような対策をおすすめします。
• アカウントに2段階認証を設定する
• 大事なリポジトリは、ローカルにもコピーを持つ
• ミラーを取って、別の場所に保管する
3-2-1ルールで保存場所を分ける
バックアップの考え方として、広く知られているのが「3-2-1ルール」です。
• コピーを3つ持つ(元データ+バックアップ2つ)
• 2種類の媒体に保存する(外付けHDDとクラウドなど)
• 1つは別の場所に置く
外付けHDDは高速で大容量、ネットワークがなくても使えます。クラウドは自動で同期でき、どこからでもアクセスできます。それぞれの得意なところを、組み合わせて使いましょう。
可能な限りバックアップは自動化
手動のバックアップは、どうしても忘れます。設定、同期、自動実行の3つを整えて、仕組みにしてしまいましょう♡
たとえば、作業フォルダを外付けディスクにコピーするだけなら、rsyncとcronで次のように書けます→
git clone --mirror https://github.com/ユーザー名/リポジトリ名.git
毎週決まった時間に作業フォルダをコピーする
# 毎日午前2時に作業フォルダをコピーする(例)
0 2 * * * rsync -a ~/work/ /mnt/backup/work/
ここでは、バックアップ元で消したファイルが、バックアップ先にも反映されないよう、--deleteは付けていません。誤って消したファイルを、バックアップ先から取り戻せるようにするためです。
バックアップをランサムウェアから守る
バックアップを取っても、メインのPCとつなぎっぱなしだと、感染したときにバックアップまで暗号化されるおそれがあります。
• 物理的に切り離す:バックアップ用のディスクは、使わないときはPCから外す
• 世代管理を有効にする:過去のバージョンに戻せるようにしておく
• 二重に守る:外付けHDDとクラウドを併用する
WordPressサイトのバックアップについて
WordPressサイトは、ファイルとデータベースの2つを守る必要があります。
私自身で運用しているサイトのバックアップはレンタルサーバーの他、プラグインで自動管理
まとめ
• Gitで守れるのは、Gitで管理しているファイルだけ
• .envは.gitignoreで除外し、別の安全な場所にバックアップする
• GitHubだけに頼らず、保存場所を分ける
• 自動化して、バックアップを習慣にする
• バックアップ先は、メインPCから切り離して守る
今日から、まずは.gitignoreと.envの確認から始めてみてください。
最後までお読み見ただきましてありがとうございました。
