Docker版Misskeyのデータをバックアップする
Dockerを使って構築したMisskey のデータをバックアップする手順を忘れないようにメモしておきます。
本番環境を停止してバックアップを取得する手順のため、ユーザー影響(サービス断)が発生します。
前提条件
- Ubuntu 22.04
- Docker 20.10.22
- Docker Compose v2.14.1
- Postgresql 15.1
- Misskey v13.7.0
- Misskey、Postgresql含め一式Dockerで構築してあること
データのバックアップ
Misskeyのdocker composeがあるディレクトリへ移動し、Misskeyのコンテナを停止します。
docker compose down
docker composeのディレクトリをtar.gzで圧縮し1つ上の階層にバックアップ misskey_backup.tgz
を作成します。
sudo tar -zvcf ../misskey_backup.tgz .
バックアップを終えたら、Misskeyコンテナを起動します。
docker compose up -d
これでバックアップは終わりです。
データのリストア
データのリストアはバックアップファイルのtar.gzを解凍し、 docker compose up -d
すれば完了です。
-C
で解凍先を指定します。(今回は misskey_restore
というディレクトリにバックアップを解凍します。)
mkdir ../misskey_restore
sudo tar -xzvf ./misskey_backup.tgz -C ./misskey_restore
cd ./misskey_restore
docker compose up -d
バックアップの自動化
cronを使ってバックアップを自動化するサンプルです。
まず、以下のシェルスクリプト backup_misskey.sh
を用意します。
DIR
はMisskeyのdocker-compose.ymlが設置してあるディレクトリを記載してください。
BKDIR
はバックアップを保存するディレクトリを記載してください。
#!/bin/bash
DIR=/var/www/misskey/
BKDIR=/home/ubuntu/backup/
FILE=misskey_`date '+%Y-%m-%d'`
docker compose -f ${DIR}/docker-compose.yml down
tar -zvcf ${BKDIR}/${FILE}.tgz -C ${DIR}/ .
docker compose -f ${DIR}/docker-compose.yml up -d
次にroot権限になり、 crontab -e
してから以下を記載します。
編集が完了したら :wq
で保存してください。
これで、毎週金曜日の午前3時5分にMisskeyのバックアップを行なってくれます。
5 3 * * 5 /home/ubuntu/backup_misskey.sh >> /home/ubuntu/backup_misskey.log 2>&1
あとがき
とても簡易な方法ですが、Misskeyのバックアップ方法について記載しました。
オンラインでバックアップを取得する方法(Postgresqlコンテナでdumpをとるetc)もありますが、
個人的には(DBとアップロードされたファイルの)不整合が怖いのでこちらを採用しています。
(もっと賢いやり方があれば教えてください。)
そうそう。生成されたバックアップファイルがリストアできることを確認することをお勧めします。
動作確認(試験)はしっかりやった方がいいです。いざという時バックアップがうまく取れてなかったら悲しいですしね。
取得したバックアップはオブジェクトストーレジなど別の場所に転送するといいです。
それでは。