さくらクラウドのスクリプトで作ったマストドンのデータをバックアップしたかったのと、それを別の環境にロードしたかったので、その試行錯誤をご紹介。
1.さくらクラウドのVMでの作業
#su - mastodon
ポスグレバックアップ
$cd /home/mastodon/live
$pg_dump > backup_postgres-db.sql
画像などのバックアップ
$cd /home/mastodon/live/public
$tar zcf backup_public-system.tar.gz system
Redisデータベースファイルのバックアップ
#cp /var/lib/redis/dump.rdb backup_redis_dump.rdb
2.移行先での作業
一般的なDockerで動くmastodon環境にロード(リストア)しました。自分はGCPにubuntuのVMを作って、そこにDockerを入れたものを、別URLで動くようにしておきました。
nginxを止めておく
#nginx -s stop
docker確認 コンテナIDをメモる。(→メモらなくても大丈夫ですね)
#docker ps
→ #docker ps -q -f name=mastodon_db_1
dockerコンテナにバックアップしたDBファイルをコピーする。
バックアップしたbackup_postgres-db.sqlはVMにコピっておく。
#docker cp backup_postgres-db.sql {コンテナID}:/home/db_backup.sql
→ #docker cp backup_postgres-db.sql $(docker ps -q -f name=mastodon_db_1):/home/db_backup.sql
dockerコンテナに入る
#docker exec -it mastodon_db_1 bash
ポスグレに入る
bash-4.3# psql -U postgres
mastodonユーザー(ロール)を作る。
さくらスクリプトで作られたポスグレがmastodonっていうユーザで動いていたので、ロールを作りました。
postgres=# create role mastodon with login superuser;
テーブルを全部消す
postgres=# drop schema public cascade;
postgres=# create schema public;
確認
postgres=# \l
データベースのオーナーをmastodonにする
postgres=# alter database postgres owner to mastodon;
確認
postgres=# \l
ポスグレから抜ける
postgres=# \q
バックアップしたデータを読み込み
bash-4.3# cd /home
bash-4.3# psql -U mastodon -d postgres < db_backup.sql
ポスグレに入る
bash-4.3# psql -U postgres
データベースのオーナーをpostgresに戻す
postgres=# alter database postgres owner to postgres;
確認
postgres=# \l
postgres=# \d
ポスグレから抜ける
postgres=# \q
dockerコンテナから抜ける
bash-4.3# exit
画像など及びRedisDBをリストア
バックアップしたbackup_public-system.tar.gzやbackup_redis_dump.rdbはVMにコピっておく。
#cd public
#tar xvzf backup_public-system.tar.gz
#cd ../redis
#cp backup_redis_dump.rdb dump.rdb
#chown systemd-timesync:systemd-journal dump.rdb
nginx起動
#nginx