比較的大きなアップグレード。念の為 Proxmox 管理画面でスナップショットを残してからアップデートを実行した。
事前チェック
アップグレードを始める前に、まずはコンテナ(Ubuntu 22.04)を最新の状態にしておく。
それから依存関係のバージョンを確認する。
$ ruby -v
ruby 3.0.2p107 (2021-07-07 revision 0db68f0233) [x86_64-linux-gnu]
$ psql --version
psql (PostgreSQL) 14.9 (Ubuntu 14.9-0ubuntu0.22.04.1)
$ redis-server -v
Redis server v=6.0.16 sha=00000000:0 malloc=jemalloc-5.2.1 bits=64 build=a3fdef44459b3ad6
$ node -v
v16.20.2
$ convert -version
Version: ImageMagick 6.9.11-60 Q16 x86_64 2021-01-25 https://imagemagick.org
Copyright: (C) 1999-2021 ImageMagick Studio LLC
License: https://imagemagick.org/script/license.php
Features: Cipher DPC Modules OpenMP(4.5)
Delegates (built-in): bzlib djvu fftw fontconfig freetype heic jbig jng jp2 jpeg lcms lqr ltdl lzma openexr pangocairo png tiff webp wmf x xml zlib
ruby は最小バージョンだった。
全文検索 Elasticsearch とプラグインのインストール
v4.2.0 になって、全文検索が実用的になったそう。ただし、より多くのメモリが必要になるなど、かかるコストは高くなる。
インストールは次のサイトが大変参考になった。
Mastodon は Elasticsearch 7.x がサポート対象らしいので、上記サイトのとおりで OK。
Elasticsearch v7.17.13 のダウンロードとインストール
こちらの手順で apt リポジトリを追加して version 7.17.13 をインストールする。
$ wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo gpg --dearmor -o /usr/share/keyrings/elasticsearch-keyring.gpg
$ sudo apt-get install apt-transport-https
$ echo "deb [signed-by=/usr/share/keyrings/elasticsearch-keyring.gpg] https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-7.x.list
$ sudo apt update
$ sudo apt install elasticsearch
バージョンを固定(更新を保留)する。
$ sudo apt-mark hold elasticsearch
$ sudo systemctl daemon-reload
$ sudo systemctl enable elasticsearch.service
これで起動できると思っていたら sudo systemctl status elasticsearch.service で確認すると Active: failed。
エラーメッセージ(elasticsearch.service: Main process exited, code=killed, status=9/KILL)でググってみたら、コンテナで elasticsearch を動作させる場合、jvm のメモリを明示的に制限する必要があるらしい。
なので、ファイル /etc/elasticsearch/jvm.options.d/jvm.options をコンテナに割り当てているメモリと相談して次のような内容で作成する。
-Xms4g
-Xmx4g
これで、sudo systemctl start elasticsearch.service で起動できた。
自分の環境だと、コンテナに割り当てているメモリは 4G であるにもかかわらず、elasticsearch はホストの 32G を認識して、最低で 16G を使おうとしているみたい・・・そりゃ無理だ。
# cat /var/log/elasticsearch/gc.log
[2023-09-22T15:19:20.206+0000][6979][gc,init] CardTable entry size: 512
[2023-09-22T15:19:20.206+0000][6979][gc ] Using G1
[2023-09-22T15:19:20.220+0000][6979][gc,init] Version: 20.0.2+9-78 (release)
[2023-09-22T15:19:20.220+0000][6979][gc,init] CPUs: 8 total, 4 available
[2023-09-22T15:19:20.220+0000][6979][gc,init] Memory: 31739M
[2023-09-22T15:19:20.220+0000][6979][gc,init] Large Page Support: Disabled
[2023-09-22T15:19:20.220+0000][6979][gc,init] NUMA Support: Disabled
[2023-09-22T15:19:20.221+0000][6979][gc,init] Compressed Oops: Enabled (Zero based)
[2023-09-22T15:19:20.221+0000][6979][gc,init] Heap Region Size: 8M
[2023-09-22T15:19:20.221+0000][6979][gc,init] Heap Min Capacity: 15872M
[2023-09-22T15:19:20.221+0000][6979][gc,init] Heap Initial Capacity: 15872M
[2023-09-22T15:19:20.221+0000][6979][gc,init] Heap Max Capacity: 15872M
[2023-09-22T15:19:20.221+0000][6979][gc,init] Pre-touch: Disabled
[2023-09-22T15:19:20.221+0000][6979][gc,init] Parallel Workers: 4
[2023-09-22T15:19:20.221+0000][6979][gc,init] Concurrent Workers: 1
[2023-09-22T15:19:20.221+0000][6979][gc,init] Concurrent Refinement Workers: 4
[2023-09-22T15:19:20.221+0000][6979][gc,init] Periodic GC: Disabled
[2023-09-22T15:19:20.221+0000][6979][gc,metaspace] CDS archive(s) not mapped
[2023-09-22T15:19:20.221+0000][6979][gc,metaspace] Compressed class space mapped at: 0x00000007c0000000-0x0000000800000000, reserved size: 1073741824
[2023-09-22T15:19:20.221+0000][6979][gc,metaspace] Narrow klass base: 0x0000000000000000, Narrow klass shift: 3, Narrow klass range: 0x800000000
[2023-09-22T15:19:20.262+0000][6979][gc,heap,exit] Heap
[2023-09-22T15:19:20.262+0000][6979][gc,heap,exit] garbage-first heap total 16252928K, used 16384K [0x00000003e0000000, 0x00000007c0000000)
[2023-09-22T15:19:20.262+0000][6979][gc,heap,exit] region size 8192K, 2 young (16384K), 0 survivors (0K)
[2023-09-22T15:19:20.262+0000][6979][gc,heap,exit] Metaspace used 3827K, committed 3904K, reserved 1114112K
[2023-09-22T15:19:20.262+0000][6979][gc,heap,exit] class space used 295K, committed 320K, reserved 1048576K
日本語解析プラグイン kuromoji のダウンロードとインストール
プラグインマネージャーを使って kuromoji をインストールする。
$ sudo /usr/share/elasticsearch/bin/elasticsearch-plugin install analysis-kuromoji
-> Installing analysis-kuromoji
-> Downloading analysis-kuromoji from elastic
[=================================================] 100%
-> Installed analysis-kuromoji
-> Please restart Elasticsearch to activate any plugins installed
以上でアップデートの準備は完了。
Mastodon のアップデート
$ sudo su - mastodon
$ cd ./live
$ git fetch && git checkout v4.2.0
$ bundle install
$ yarn install --frozen-lockfile
$ RAILS_ENV=production bundle exec rails assets:precompile
$ SKIP_POST_DEPLOYMENT_MIGRATIONS=true RAILS_ENV=production bundle exec rails db:migrate
Mastodon を再起動する。
$ RAILS_ENV=production bundle exec rails db:migrate
$ RAILS_ENV=production bin/tootctl search deploy --reset-chewy
全文検索の有効化
次のドキュメントを参考に全文検索を有効化する。
$ cd ./live
$ vi ./.env.production
# 以下の3行を追加
ES_ENABLED=true
ES_HOST=localhost
ES_PORT=9200
Elasticsearch にインデックスを作成する。
RAILS_ENV=production bundle exec rake chewy:upgrade
Mastodon のプロセスを再起動する。これで、新しい投稿はインデックスされるようになる。
systemctl restart mastodon-sidekiq
systemctl reload mastodon-web
最後に、過去の投稿をインデックスする。
RAILS_ENV=production bundle exec rake chewy:sync
感想
自分のアカウントについて、プロフィールから「アカウントとつながりやすさ」タブで「公開投稿を検索できるようにする」としてみた。
コンテナのメモリを気にしながら様子をみてみよう。
コメント