mastodon

Mastodon1.4.1から1.5.1へアップデート

さくらのクラウドにて運用している僕のMastodonインスタンス「リアルエスケープ」
安定版だった1.4.1からアップデートせずにいたんだけど、そろそろ最新の1.5.1まで上げていかないとなと。
この1.5系からアイコンなどもかわいくなってよりフレンドリーな感じになってるし、機能も1.4系からは結構変わったので、対応していかないとあとあと困ることになりそう。

インスタンスの立ち上げもゴールデンウィークというお休みがあったからできたので、今回もお盆休みを使ってアップデートしようと。
だいたいこういうのって時間がないとトラブルが起きた時に落ち着いて処理できないから長いお休みがないとつらいんだよね。

立ち上げた時の1.3.2から1.4.1へのアップデートはさくらのクラウドがとても親切に解説を出してくれていたのに、今回は出してくれない。
gitにスタートアップスクリプトを公開してるんだから自分で調べてやってねって感じなんだろうか?
しかも以前の解説を出している人がQiitaに簡単な説明だけ書いてるとか・・・
なんで正式に出さないのか?
ちょっとさくらのクラウドの対応は残念だ。

ひとまず色々調べて1.4.1から1.5系にアップデートするには依存関係のパッケージの追加がいると。
それと1.4.2に上げるときの外部キーのコンストレイントをマイグレーション前に必要というのをやっとかないといけないらしい。
しかもそれをする際にデータベースへの書き込みが行われるとデッドロックが起こってMastodonが立ち上がらなくなるとのこと。
あとは、運用中のサーバの1GB、1Coreの貧弱環境だとメモリが足りなくて失敗するかもということ。

ということで、状況と情報を整理して、いよいよアップデート作業開始!!

まずはサーバを一旦止めて、さくらのクラウドのコントルールパネルから今回のアップデートの間だけ4GB、2Coreへサーバを強化する。
こういう必要な時に必要な分だけ変更ができる点はクラウドの最高に便利なところ。
それからサーバを再起動して作業に取り掛かる。

#まずroot環境にてこの2つを実行
systemctl stop mastodon* #Mastodonを止める
yum install -y libidn-devel libicu-devel #必要なパッケージを追加

#ここからMastodonユーザへ移行
su - mastodon
cd /home/mastodon/live
git checkout master
git pull
git checkout v1.5.1
gem install bundler
bundle install --deployment --without development test
yarn install
RAILS_ENV=production bundle exec rails mastodon:maintenance:prepare_for_foreign_keys
RAILS_ENV=production bundle exec rails db:migrate
RAILS_ENV=production bundle exec rails assets:precompile
RAILS_ENV=production bundle exec rails r Rails.cache.clear
exit
systemctl restart mastodon*

これでできたと思ってサイトを見るとエラー!!
コマンドを打ち間違えたのかと思って再度少し変えてやってみる。

systemctl stop mastodon*  #rootにて再度Mastodonは止める

#パッケージは入れ終わっているのでMastodonユーザへ移ってから再度やり直してみる
su - mastodon
cd /home/mastodon/live
git branch
git checkout master
git pull
git checkout $(git tag | sort -V | tail -n 1)  #1.5.1の指定がだめだったのかもと思って最新版を取ってくるようにする
RAILS_ENV=production bundle exec rails mastodon:maintenance:prepare_for_foreign_keys
RAILS_ENV=production bundle exec rails db:migrate
RAILS_ENV=production bundle exec rails assets:precompile
RAILS_ENV=production bundle exec rails r Rails.cache.clear
exit
systemctl restart mastodon*

特に何か変わったことにはやっぱりならずにそのまま同じように作業が進む。
でもエラー。
なんでかと思ってみると、ブラウザのキャッシュが残ってて再読み込みをすればしばらくしてデータを読み込み終わったらきちんと表示された。
なんだ、そんなことだったのか。
わかれば簡単。
でも、一瞬やっちまったかと焦った(笑)

なので、ちゃんとアップデートできたはずなのに、エラーってときは再読み込みしてみましょう。
上記方法でやればさくらのクラウドのスタートアップスクリプトでインスタンスを立てた人は1.4.1から1.5.1へと一気にアップデートできると思います。
でも、やる人は自己責任でね。
環境はそれぞれのサーバとインスタンスで違うから。
一応、僕のインスタンスはデフォルト状態で何もカスタマイズはしていない状態のものです。

最後に忘れないようにサーバを止めて1Core、1GBへ戻して再起動。
これしておかないと、月額料金が高くなってしまうからね!

もっと時間かかってしまうかと思ってたけど、うまくいったので、自分の中でのお盆のメインイベントは終了しました。
おつかれさまでした。