お一人様サーバー(最近はインスタンスじゃなくてサーバーと呼ぶ)として運用しているうちのマストドンをv4.1.9からv4.2.0にバージョンアップしてみた。なお全文検索機能は使用していない。あれ使うのにリソースどれだけ必要?
検証環境
いくらお一人様とはいえ完全に壊れてしまうのは困るので規模の大きい変更の場合はVMware上に作成した環境で確認を行う。まずリリースノートを見るとRubyは3.2.2を求められる模様。インストールしてrbenv global 3.2.2。早速嵌まる。mastodon/liveディレクトリのRubyのバージョンが上がらない。しかたないのでrbenv local 3.2.2で上げる。このあたり無知な状態でrbenvやRubyをインストールしているからどこか壊れているのだろう。よく動いているものだ。
次にお決まりのgit fetch && git checkout v4.2.0。いきなりの
error: Your local changes to the following files would be overwritten by checkout:
.ruby-version
よくわからんがコミットする。今まで出た事ないのに。
作業を開始すると早速node.jsのバージョンが不足していると言われ16.10に変更。よく読んだら16以上と書かれていた。
bundle installとyarn installは何事もなく終了。
RAILS_ENV=production bundle exec rails assets:precompile
終わらん。1時間経っても終わらん。用事があるのでそのままでお出かけ。帰ってきたら終わっていた。
SKIP_POST_DEPLOYMENT_MIGRATIONS=true RAILS_ENV=production bundle exec rails db:migrate
してmastodonプロセス再起動。はい、ゾウさん登場!プロセス3つは問題なく動いている模様。もう一度プロセスを確認。今回追加になっているmastodon-streaming@.serviceがエラー起こしている。ExecStart=/usr/bin/node
でnode.jsのパスを書いているがnodeのインストール方法が違うんでパスが違うんだよね。これ以前もやらかしてる。ここを修正してプロセス再起動。ゾウさん、変わらず。
どうにも原因がわからないのでとりあえずv4.1.9に戻す。Rubyのバージョンも戻さないといけなかったがとりあえずは戻った。再度チャレンジするもやはりRAILS_ENV=production bundle exec rails assets:precompile
で長時間走行。nodeのバージョンが悪い?と思いLTS版にしても変わらず。ロードアベレージが20を超えるとかいう状態になる。そんな時にふと気になってsar -Wを取ってみる。かなり大きい値。もしかしてこれ?と思いexport NODE_OPTIONS="--max-old-space-size=2048"
をexport NODE_OPTIONS="--max-old-space-size=4096"
に念のためmastodonプロセスも停止して再度RAILS_ENV=production bundle exec rails assets:precompile
。今度は数分で完了。一応v4.2.0になっている模様。最初にダメだったのもこれがエラーになっていたのかも。なお、mastodon-streaming@.serviceに関しては変更しなくても大丈夫そうなので元に戻している。
本番環境
検証環境で一応上手く動いたので手順を整理していざ本番環境。戻ってこれないかも宣言をしてプロセスを停止して作業開始。こういうところはお一人様はお気楽で良い。
いきなりRubyのバージョンアップで嵌まる。3.2.2のインストールが出来ない。psychがない?エラーメッセージをbingに聞いてもyamlをインストールすれば解消しますしか言わない。yamlは入ってるんだよ。しかたがないので自分で検索する。どうもRubyの3.2系からpsychが同梱されなくなったようで別途インストールが必要。libyaml-devに含まれるという情報もあったがCentOSではlibyaml-devはなくlibyaml-develになる。検証環境では問題なかったのにと思い検証環境を確認するとlibyaml-develがインストールされている。いつインストールしたのだろう?マストドンを最初に建てたときの記事でも見つけられなくて諦めていたのに。まあ当時は不要だったのでなくても建てられたのだが。ということでlibyaml-develをインストール。ただこいつのリポジトリはpowertoolsなのでdnf --enablerepo=powertools install libyaml-devel
とリポジトリの指定が必要。永続化してもいいけどあまりpowertoolsは永続化しない感じなので今回はテンポラリで。テンポラリだと将来更新が入った時にこけるかもだけどそのときはそのとき考えよう。rbenvでバージョンが変わらないのは本番環境でも発生。git fetch && git checkout v4.2.0
では今回は.ruby-versionとconfig/puma.rbがエラーに。今回はコミットではなくrestoreした。なんでこんなエラーが。それ以外は特に問題なく。本番環境もv4.2.0になった。
RubyもNodeもなんもわからん……
あ、一応Windowsのクライアントアプリを作ってたりします。自分の欲しい機能しか入ってないですがw検索に対応させた方がいいかな?