mastodonサーバの移転を行いました
これまで自分専用のマストドンサーバ mtdn.zenmai.org を、Digital Oceanの VPS(シンガポールリージョン)に設置していましたが、ディスク容量の逼迫、恒常的なメモリ不足、VPSの値段などで、早晩の移転は必須というのが見えてきました。
このたび、先日契約した contabo のVPSに移転させましたので、ざっくりと手順などを。使用するコマンド等は公式を見ましょう。
事前準備
- 新サーバの基礎設定(vimだのシェルだのsshだのを、自分がストレスなく快適に操作できるようにしておく)
- DNSのTTLを短くしておく
- bundle install などでIPv6優先だと外部ファイル取得に失敗することが多いので不要ならIPv6を殺しておく(参考)
- 旧サーバは tootctrlを使って、メディアキャッシュなどを最小にしておく
新サーバでmastodonを構築
普通にまっさらなmastodonサーバを立てるつもりでやりましょう。検索するとネット上にはマストドンサーバ構築の記事がいろいろありますが、「初心忘るるべからず」です。まずは公式の情報を参照しましょう。
https://docs.joinmastodon.org/admin/install/
その上で、自分のマストドンサーバを構築したときに参照した記事があるならそれも参照しましょう。私の場合はここです。
https://ja.linux-console.net/?p=3603#gsc.tab=0
また構築作業はセットアップの直前までで終わりです。公式サイトの以下のコマンドは行いません。この直前で作業停止です。
RAILS_ENV=production bin/rails mastodon:setup
ここからさきは旧サーバからのリストアで対応します。
旧サーバを停止させてバックアップを取得
IT好きな方はついつい「ダウンタイムは最小に」と思ってしまいがちですが、他のユーザがいない「おひとりさまサーバ」の場合、安定稼働のためにはきっちりサービスを止めてバックアップしましょう。みなさん Twitter(現X)とかの争いばかりの世界に飽きて fediverseに来たんですよね。ユルくやりましょう。あと、mastodonはよくできています。数時間そこらサーバが停止しても、再開時に sidekickがよしなにしてくれます。
以下のバックアップを行いましょう(私の環境ではマストドンのホームは /var/www/mastodonです。適宜読み替えてください)。というか普段からこれはバックアップしておきましょう。
- mastodon設定ファイルの .env.production
cp -p /var/www/mastodon/.env.production /backupdir/
tar zcfv /backupdir/public_backup.tgz -C /var/www/mastodon public
cp -p /var/lib/redis/dump.rdb /backupdir/
cp -p /etc/nginx/sites-available/mastodon.conf /backupdir/
sudo -i -u postgres /backupdir/pg_dumpall
リストア作業
さてここからが本番。VPSで運用されている方は、新サーバ・旧サーバともにここでスナップショットをとっておきましょう。
- 旧サーバで取ったバックアップを、rsyncや scpですべて新サーバにコピーします
- .env.productionをコピー
cp -p backupdir/.env.production var/www/mastodon/.env.production
cp backupdir/public_backup.tgz /var/www/mastodon/
cd /var/www/mastodon
mv public public.origin
tar zxfv public_backup.tgz
cp -p backupdir/dump.rdb /var/lib/redis/dump.rdb
cp -p backupdir/mastodon.conf /etc/nginx/sites-available
cd /etc/nginx/sites-enabled
ln -s ../sites-available/mastodon.conf
psql -U postgres -f backupdir/pg_dumpall_mastodon
私の場合は新しい postgressが peer 認証モードになっていたのでそこを修正しました(参考)
sudo su - mastodon
cd /var/www/mastodon
RAILS_ENV=production bundle exec rails assets:precompile
新サーバでの稼働
以下を行います
- DNSの書き換え
- ssl証明書の取得
私の場合は letsEncriptの無料証明書を使っています。証明書が偽物の時点ではmastodonの webインターフェイスはきちんと見えませんのでご注意。
ここまでやったら公式インストール手順の systemctrlサービスの登録を行い、3つのサービスを起動しましょう。
systemctl enable --now mastodon-web mastodon-sidekiq mastodon-streaming
問題なく動いていれば、停止していた間のフォロー先サーバのトゥートがどっと流れてくると思います。
何かおかしかったら、リストア前に撮っておいたスナップショットでサーバを巻き戻してやり直しましょう。sidekickが頑張ってくれるので、何度やり直しても大丈夫です。
私の場合は、初回のリビルドでは Redisのリストアを忘れていたせいか、添付メディアやフォローしている人のアバター・ホーム画面の背景バナーなどが表示されないという不具合がありました。また pgHero の画面も崩れまくっていました。2度めの再構築で問題なく動くようになりました。来週で1歳になるムスメの世話をしながら作業したのでダウンタイムは9時間に及びましたが、トゥートの取りこぼしもなく全く問題なく稼働できています。