Mastodon サーバーのバックアップをする
VPS も大して触ったことがなかった人間が建てたお一人さまMastodon サーバーもいよいよ4ヶ月が経過しました。我ながらよくこんなに続けたな〜って思ってます。最初のほうはわりとドタバタしていたものの最近では非常に安定した運用ができています。ですが、1つ大きな問題が発覚しました。バックアップをしていない。
今のところ大きな問題は起きていないのでバックアップの必要性は無いものの、何かトラブルが起きたりもしくは別のサーバー会社に乗り換えようとなったときにバックアップが無いと困るのでちゃんとしようと思いました。
目次
余談
5月1日に Mastodon 公式ブログで公開された記事によると、検索機能の改善と引用機能の実装が予定されているそうです。どっちも気にしてた機能なので楽しみです。風の噂によると、少なくとも引用機能は 4.2.0 から実装されるという話があるのですが実際にはどうなるのでしょう。期待して待ちたいと思います。
この記事ですること
- リストアに必要なファイルのバックアップ
- 新しいサーバーにリストア
この記事でしないこと
- ローカルに保存されているメディアのバックアップ
- メディアは S3 に保存している前提で進めます
- バックアップの自動化
- リストアで力尽きたので体力が回復したら書きます
- といっても、バックアップして S3 にぶん投げるスクリプトを定期的に動かすだけなので難しくないと思います
バックアップが必要なデータ
リストアに必要なデータは以下の通りです。
- PostgreSQL データベース
- メインで使うデータベース
- 絶対にバックアップしないと死ぬ、メインのデータベースなのでバックアップもリストアも時間がかかる
- Redis データベース
- キャッシュで使うデータベース
- Redis のデータはもし消えたとしても無害らしいけどバックアップしろって書いてあるからバックアップする
- Mastodon の設定ファイル
- ドメインとかシークレットキーとか入ってる
- これも絶対にバックアップする、ファイルに書かれているシークレットキーを紛失するといろいろ面倒らしい
- nginx の設定ファイル
- Web サーバー用の設定
- 公式の説明にはバックアップするべきとは書いてないけど、実際にリストアした感じではバックアップしたほうが楽だと思う
バックアップ方法
バックアップ自体は、単刀直入に言えばコピーするだけです。何ならバックアップよりリストアが本番まである。
PostgreSQL データベース
pg_dumpall
でダンプして gzip で固めます。
# sudo -u postgres pg_dumpall | gzip -c > mastodon.gz
Redis データベース
/var/lib/redis/dump.rdb
をコピーします。
Mastodon の設定ファイル
/home/mastodon/live/.env.production
をコピーします。
nginx の設定ファイル
/etc/nginx/sites-available
に入っている設定ファイルをコピーします。
リストア方法
事前準備
公式のインストール手順の Installing Ruby まで終わらせます。
バックアップしたデータを転送する
s3cmd やら scp やら使って、バックアップしたファイルをサーバーに転送します。
PostgreSQL データベースを復元する
展開して復元します。
# gzip -c -d mastodon.gz > mastodon.sql
# sudo -u postgres psql -f mastodon.sql
Redis データベースを復元する
一度、Redis サーバーを止めてバックアップしたファイルを元の位置に配置して再び動かします。
# systemctl stop redis-server
# cp dump.rdb /var/lib/redis/
# systemctl start redis-server
Mastodon の設定をする
基本的には公式のインストール手順の Setting up Mastodon で大丈夫ですが、Generating a configuration は実行しないでください。
代わりに、アセットファイルのコンパイルと(念のために)データベースのマイグレーションをして、root に戻って設定ファイルの復元をします。
$ RAILS_ENV=production bundle exec rails db:migrate
$ RAILS_ENV=production bundle exec rails assets:precompile
$ exit
# cp .env.production /home/mastodon/live/
# chown mastodon /home/mastodon/live/.env.production
nginx の設定をする
バックアップ済みのファイルを /etc/nginx/sites-available
にコピーして nginx を再起動します。
# cp mastodon /etc/nginx/sites-available/
# cp s3 /etc/nginx/sites-available/
# systemctl reload nginx
SSL 証明書 〜 起動用ファイルの作成
公式のインストール手順通りです。
まとめ
一度、この方法でバックアップからリストアまでしましたが環境差があるかもしれないので、もし Mastodon サーバーを持っていれば一度試しに別のサーバーにリストアするといいかもしれません(その場合、連合許可モードで設定することを強く推奨します)。もし間違っているところを見つけたら教えてくれると嬉しいです。