mastodonサーバの移転を行いました

64

これまで自分専用のマストドンサーバ 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/
  • メディア等の保存してある publicディレクトリ(巨大ですが頑張りましょう。私の場合は11GBありました)
  • tar zcfv /backupdir/public_backup.tgz -C /var/www/mastodon public
  • redisのデータベース
  • cp -p /var/lib/redis/dump.rdb /backupdir/
  • nginx の設定ファイル
  • cp -p /etc/nginx/sites-available/mastodon.conf /backupdir/
  • postgresql のフルバックアップ
  • sudo -i -u postgres /backupdir/pg_dumpall 

 

リストア作業

さてここからが本番。VPSで運用されている方は、新サーバ・旧サーバともにここでスナップショットをとっておきましょう。

  • 旧サーバで取ったバックアップを、rsyncや scpですべて新サーバにコピーします
  •  

  • .env.productionをコピー
  • cp -p backupdir/.env.production var/www/mastodon/.env.production 
  • 既存のpublicディレクトリを退避させ、旧サーバののpublicディレクトリを解凍
  • cp backupdir/public_backup.tgz /var/www/mastodon/
    cd /var/www/mastodon
    mv public public.origin
    tar zxfv public_backup.tgz
  • redisのデータベースを新サーバにコピー
  • cp -p backupdir/dump.rdb /var/lib/redis/dump.rdb 
  • nginx の設定ファイルを新サーバにコピー
  • cp -p backupdir/mastodon.conf /etc/nginx/sites-available
    cd  /etc/nginx/sites-enabled
    ln -s ../sites-available/mastodon.conf

     

  • 以上4つのパーミッション等を旧サーバ通りになおしておく
  •  

  • 以下のコマンドで postgresqlのバックアップをフルリストア
  • 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時間に及びましたが、トゥートの取りこぼしもなく全く問題なく稼働できています。