Docker版Misskeyのデータをバックアップする

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のコンテナを停止します。

1
docker compose down

docker composeのディレクトリをtar.gzで圧縮し1つ上の階層にバックアップ misskey_backup.tgz を作成します。

1
sudo tar -zvcf ../misskey_backup.tgz .

バックアップを終えたら、Misskeyコンテナを起動します。

1
docker compose up -d

これでバックアップは終わりです。

データのリストア

データのリストアはバックアップファイルのtar.gzを解凍し、 docker compose up -d すれば完了です。

-C で解凍先を指定します。(今回は misskey_restore というディレクトリにバックアップを解凍します。)

1
2
3
4
5
6
7
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 はバックアップを保存するディレクトリを記載してください。

1
2
3
4
5
6
7
8
9
#!/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のバックアップを行なってくれます。

1
5 3 * * 5 /home/ubuntu/backup_misskey.sh >> /home/ubuntu/backup_misskey.log 2>&1

あとがき

とても簡易な方法ですが、Misskeyのバックアップ方法について記載しました。
オンラインでバックアップを取得する方法(Postgresqlコンテナでdumpをとるetc)もありますが、 個人的には(DBとアップロードされたファイルの)不整合が怖いのでこちらを採用しています。
(もっと賢いやり方があれば教えてください。)

そうそう。生成されたバックアップファイルがリストアできることを確認することをお勧めします。
動作確認(試験)はしっかりやった方がいいです。いざという時バックアップがうまく取れてなかったら悲しいですしね。

取得したバックアップはオブジェクトストーレジなど別の場所に転送するといいです。

それでは。

comments powered by Disqus
Built with Hugo
テーマ StackJimmy によって設計されています。