インスタンスをバックアップ・復元する

KolleK内部には、自動バックアップの仕組みはありません。データを守るのは運用者の仕事であり、このページがその手順です。また今のところ、これは「すべてをエクスポートするにはどうすればよいか」という問いへの、コレクションデータをバックアップするがコレクター側の視点で説明している内容とはまた別の、実質的な答えでもあります。

完全なバックアップとは何か

3つの要素があり、そのすべてが重要です。

  1. データベース(db-dataボリューム)。アカウント、コレクション、アイテム、コピー、履歴を含むすべてのレコード。
  2. ストレージボリューム(storage-data)。アップロードされたすべての写真と書類。
  3. アプリケーションキー.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ジョブで自動化し、複数世代を保持しましょう。一度も復元したことのないバックアップは、希望的観測であって計画とは言えません。

復元する

新しいマシンでは、次の順序で復元します。

  1. Dockerでインストールに従って同じKolleKのバージョンをインストールしますが、新しいキーを生成する代わりに、バックアップからAPP_KEY(とAPP_PREVIOUS_KEYS)を設定します。
  2. ボリュームが作成されるように一度スタックを起動し、その後データベースのダンプを読み込みます。
docker compose exec -T mysql mysql -u root -p"$DB_ROOT_PASSWORD" "$DB_DATABASE" < kollek-backup.sql
  1. ストレージのアーカイブをストレージボリュームに展開します。
docker run --rm -v kollek_storage-data:/data -v "$PWD":/backup alpine tar xzf /backup/kollek-storage.tar.gz -C /data
  1. docker compose up -dでスタックを再起動し、サインインして確認します。

すべてを削除してしまうコマンド

警告

docker compose down -vは、名前付きボリュームを削除します。つまりデータベースとアップロードされたすべてのファイルが消えます。本番のインスタンスでは-vフラグを絶対に使わないでください。単にdocker compose downとするだけであれば安全で、ボリュームはそのまま残ります。

次に読むべきもの

KolleK のドキュメント このページを GitHub で編集
このページは役に立ちましたか?