さくらクラウドのスクリプトで作ったマストドンのデータをバックアップしたかったのと、それを別の環境にロードしたかったので、その試行錯誤をご紹介。
#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
###おしまい。