インスタンスをバックアップ・復元する
KolleK内部には、自動バックアップの仕組みはありません。データを守るのは運用者の仕事であり、このページがその手順です。また今のところ、これは「すべてをエクスポートするにはどうすればよいか」という問いへの、コレクションデータをバックアップするがコレクター側の視点で説明している内容とはまた別の、実質的な答えでもあります。
完全なバックアップとは何か
3つの要素があり、そのすべてが重要です。
- データベース(
db-dataボリューム)。アカウント、コレクション、アイテム、コピー、履歴を含むすべてのレコード。 - ストレージボリューム(
storage-data)。アップロードされたすべての写真と書類。 - アプリケーションキー。
.env内のAPP_KEY(設定されていればAPP_PREVIOUS_KEYSも)。
警告
対応するアプリケーションキーのないバックアップは、バックアップとは言えません。暗号化されたフィールドは、書き込んだときのキーがなければ、読み取れない暗号文として復元されます。バックアップを取るたびに、そのキーも一緒に、あるいはそばに保管してください。アプリケーションキーと暗号化を参照してください。
バックアップを取る
データベースをダンプします。
docker compose exec mysql mysqldump -u root -p"$DB_ROOT_PASSWORD" "$DB_DATABASE" > kollek-backup.sql
ストレージボリュームをアーカイブします。
docker run --rm -v kollek_storage-data:/data -v "$PWD":/backup alpine tar czf /backup/kollek-storage.tar.gz -C /data .
両方のファイルと、.envのコピーを、サーバーの外のどこかにコピーしてください。夜間のcronジョブで自動化し、複数世代を保持しましょう。一度も復元したことのないバックアップは、希望的観測であって計画とは言えません。
復元する
新しいマシンでは、次の順序で復元します。
- Dockerでインストールに従って同じKolleKのバージョンをインストールしますが、新しいキーを生成する代わりに、バックアップから
APP_KEY(とAPP_PREVIOUS_KEYS)を設定します。 - ボリュームが作成されるように一度スタックを起動し、その後データベースのダンプを読み込みます。
docker compose exec -T mysql mysql -u root -p"$DB_ROOT_PASSWORD" "$DB_DATABASE" < kollek-backup.sql
- ストレージのアーカイブをストレージボリュームに展開します。
docker run --rm -v kollek_storage-data:/data -v "$PWD":/backup alpine tar xzf /backup/kollek-storage.tar.gz -C /data
docker compose up -dでスタックを再起動し、サインインして確認します。
すべてを削除してしまうコマンド
警告
docker compose down -vは、名前付きボリュームを削除します。つまりデータベースとアップロードされたすべてのファイルが消えます。本番のインスタンスでは-vフラグを絶対に使わないでください。単にdocker compose downとするだけであれば安全で、ボリュームはそのまま残ります。
次に読むべきもの
- アプリケーションキーと暗号化で、このキーが何を保護しているかを理解しましょう。
- コレクションデータをバックアップするで、コレクターがアプリ内から何をエクスポートできるかを確認しましょう。
KolleK のドキュメント
このページを GitHub で編集
このページは役に立ちましたか?