CT の Mastodon を VM の Ubuntu Server 24.04 LTS に移行する
これまで Ubuntu 22.04 の CT で Mastodon を運用していた。これを、新たに Ubuntu 24.04 の VM を用意して、必要なデータを移行してアップグレードする。
今のところ、公式のインストールガイドでは Ubuntu 22.04 または Debian 11 までが要件となっている。
でも、既に他のサイトで Ubuntu 24.04 へインストールする方法が紹介されているから、試しに紹介されているとおり v4.2.8 をインストールして、問題なく v4.2.12 までアップデートできることを確認できた。
Ubuntu 24.04 にすると、adduser --disabled-login mastodon で追加したユーザーはログインシェルが無いなど取り扱いが若干変わっていて、sudo su - mastodon でユーザーを切り替えることができなくなっている。
ということで、若干の気持ち悪さは許容して Ubuntu 24.04 に v4.2.12 をインストールする。
◇VM の準備
Ubuntu 24.04.1(2024年9月7日現在)のイメージファイルをダウンロードしてインストールする。
PVE の話なので詳細は省略。
◇リポジトリの設定
以下、しばらく root で作業する(sudo su -)。
必要なパッケージのインストール
apt install -y curl wget gnupg apt-transport-https lsb-release ca-certificates
Node.js
NodeSource のインストール手順を参考に v20 を使用する。
curl -sL https://deb.nodesource.com/setup_20.x | sudo bash -
PostgreSQL
Mastodon のガイドに依らずに、PostgreSQL Wiki のクイックスタートを利用してみる。
apt install -y postgresql-common
/usr/share/postgresql-common/pgdg/apt.postgresql.org.sh
◇システムパッケージのインストール
Ubuntu 24.04 へインストールする方法のとおり、設定したリポジトリからそれぞれ apt でインストールする。Ubuntu 22.04 とは異なるので注意。
apt update
apt install redis-server optipng pngquant jhead jpegoptim gifsicle nodejs \
imagemagick ffmpeg libpq-dev libxml2-dev libxslt1-dev file g++ libprotobuf-dev \
protobuf-compiler pkg-config gcc autoconf bison build-essential libssl-dev \
libyaml-dev libreadline6-dev zlib1g-dev libncurses5-dev libffi-dev libgdbm-dev \
libidn11-dev libicu-dev libjemalloc-dev git certbot nginx python3-certbot-nginx
◇mastodon ユーザーの追加
adduser --disabled-login mastodon
/home/mastodon のアクセス権限を 755 に変更する。気持ち悪ければ /var/www/mastodon に mastodon をセットアップしてもいい。
chmod 755 /home/mastodon
追加されるユーザーはログインシェルがない。
なのでコマンド vipw で直接編集する。
(ユーザー追加直後)
mastodon:x:1001:1001:,,,:/home/mastodon:/usr/sbin/nologin
(編集後)
mastodon:x:1001:1001:,,,:/home/mastodon:/bin/bash
これで今まで同様、root から su -u mastodon は可能だけどパスワードを設定するまではログインができないユーザーとなる。
◇Yarn
Node.js v16.9 以降はバンドルされているから有効化する。
corepack enable
yarn set version classic
◇Ruby、Bundler のインストール
su - mastodon としてユーザー mastodon で作業する。
Ruby のインストール
公式ガイドのとおり、rbenv でインストールする。環境変数は .bash_profile に変更する。
一応、Mastodon v4.3.0 にも対応できる。
(準備)
git clone https://github.com/rbenv/rbenv.git ~/.rbenv
git clone https://github.com/rbenv/ruby-build.git "$(rbenv root)"/plugins/ruby-build
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
source ~/.bash_profile
一度 mastodon からログアウトして再度 mastodon でログインする。
exit
su - mastodon
which rbenv
/root/.rbenv/bin/rbenv ←見つかれば OK。
今回は最新バージョンではなく、3.2 系の最新版を選択する。
(インストール可能なバージョン確認)
rbenv install -l
3.1.6
3.2.5
3.3.5
jruby-9.4.8.0
mruby-3.3.0
picoruby-3.0.0
truffleruby-24.0.2
truffleruby+graalvm-24.0.2
(インストール)
RUBY_CONFIGURE_OPTS=--with-jemalloc rbenv install 3.2.5
rbenv global 3.2.5
(確認)
ruby -v
ruby 3.2.5 (2024-07-26 revision 31d0f1a2e7) [x86_64-linux]
bundler のインストール
gem install bundler --no-document
Fetching bundler-2.5.18.gem
Successfully installed bundler-2.5.18
1 gem installed
A new release of RubyGems is available: 3.4.19 → 3.5.18!
Run `gem update --system 3.5.18` to update your installation.
アップデートする。
gem update --system 3.5.18
◇PostgreSQLのインストールと設定
ユーザー mastodon から root に戻って作業する。
インストール
apt install -y postgresql postgresql-contrib
database とユーザーの作成
Ubuntu 22.04 とは異なり、あらかじめデータベースとユーザーを準備しておく。
sudo -u postgres -i psql
CREATE DATABASE mastodon_production;
CREATE USER mastodon;
ALTER USER mastodon createdb;
ALTER DATABASE mastodon_production OWNER TO mastodon;
\q
設定ファイルの編集
VM の仕様に基き、こちらの pgTune を利用して最適値を確認、postgresql.conf に反映する。
(編集)
vi /etc/postgresql/16/main/postgresql.conf
(リスタート)
systemctl restart postgresql
◇Mastodon の設定
ここからユーザー mastodon で作業する。
su - mastodon
公式ガイドではその時点での最新版をダウンロードすることになっているけど、今回は Mastodon の最新安定版リリースを指定してダウンロードする。
git clone https://github.com/mastodon/mastodon.git live && cd live
git checkout v4.2.12
Ruby と JavaScript の依存関係をインストールする。最初のインストール時だけで、アップデート時は bundl install で OK。
Ruby のバージョンの関係で、rbenv: version `3.2.3' is not installed (set by /home/mastodon/live/.ruby-version) というメッセージが出たら、.ruby-version をインストールしたバージョン 3.2.5 に書き換える。
bundle config deployment 'true'
bundle config without 'development test'
bundle install -j$(getconf _NPROCESSORS_ONLN)
yarn install --pure-lockfile
続いて、新規に Mastodon を立ち上げるときはセットアップウィザードを実行するが、今回は既存のインスタンスからデータを移行するだめ、セットアップウィザートは実行しない。
動作確認のため実行したうえで、後でデータベース移行前に削除しても良い。
ここでユーザー root にもどる。
exit
◇nginx の設定と SSL 証明書のコピー
SSL 証明書
ドメインを変更せず単純にサーバーを移行するだけだから、旧サーバーで取得している SSL 証明書を新サーバーにコピーする。
Let’s Encrypt で証明書を取得しているから、/etc/letsencrypt 以下の全てを tar -zcvf で圧縮して、まるっと新サーバーにコピーすれば OK。
/etc/crontab の設定も旧サーバーと同様に設定する。certbot の nginx プラグインもインストールする。
00 0 * * * root /usr/bin/certbot renew --nginx --renew-hook "/bin/systemctl reload nginx"
nginx の設定
公式ガイドのとおりに実行してもよし、旧サーバーからコピーしてもよし。
cp /home/mastodon/live/dist/nginx.conf /etc/nginx/sites-available/mastodon
ln -s /etc/nginx/sites-available/mastodon /etc/nginx/sites-enabled/mastodon
rm /etc/nginx/sites-enabled/default
- example.com を書き換える(vi なら :%s/example.com/mastodon.jisaba.life/g)
- ssl_certificate と ssl_certificate_key の行のコメントを解除する。
◇Mastodon の systemd サービス
オリジナルそのままで使用する。
cp /home/mastodon/live/dist/mastodon-*.service /etc/systemd/system/
systemctl daemon-reload
systemctl enable --now mastodon-web mastodon-sidekiq mastodon-streaming
◇データの移行
概要
詳細な移行手順の説明が公式サイトにある。大まかな流れとしては以下のとおりで、詳細は公式サイトを参照すること。
- ~/live/public/system のコピー
- PostgreSQL データベースの dump、インポート
- ~/live/.env.production のコピー
- /var/lib/redis/ 内の Redis データベースのコピー
1,3,4 は基本的に tar でまとめて scp 等でコピーする。2 は次のとおり。
データベースの dump とロード
旧サーバーでサービスを停止する。
sudo systemctl stop mastodon-*
旧サーバーでデータベースを dump する。ファイル backup.dump は scp 等で新サーバーにコピーする。
sudo su - mastodon
pg_dump -Fc mastodon_production -f backup.dump
新サーバーで、最初に作った動作確認用のデータベース mastodon_production を削除する。
sudo -u postgres -i psql
DROP DATABASE mastodon_production;
\q
改めて新サーバーで空のデータベースを作る。
createdb -T template0 mastodon_production
新サーバーでデータベースをロードする。-j# オプションは今回は付けない。
pg_restore -Fc -U mastodon -n public --no-owner --role=mastodon -d mastodon_production backup.dump
その他のファイルのコピー
tar -zcvf file.tar.gz dir でディレクトリをまとめてコピー、zxvf で解凍する。
サービスの起動
データの移行を終えたら、新サーバーで mastodon ユーザーとして次のコマンドを実行する。
RAILS_ENV=production bundle exec rails db:migrate
RAILS_ENV=production bundle exec rails assets:clobber
RAILS_ENV=production bundle exec rails assets:precompile
続いて、root ユーザーとして次のコマンドを実行する。
systemctl daemon-reload
systemctl start redis-server
systemctl enable --now mastodon-web mastodon-sidekiq mastodon-streaming
systemctl restart nginx
サーバーがオンラインに戻ったら、ユーザーのホーム フィードを再構築する。
RAILS_ENV=production ./bin/tootctl feeds build
◇全文検索 Elasticsearch
Elasticsearch のインストール
こちらのサイトを参考にリポジトリを追加する。インストールするバージョンは 7.x 系。
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo gpg --dearmor -o /usr/share/keyrings/elasticsearch-keyring.gpg
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-get update && sudo apt-get install elasticsearch
sudo apt-mark hold elasticsearch
※バージョン 7.17.23 で固定する。
kuromoji のインストール
apt install unzip
wget https://artifacts.elastic.co/downloads/elasticsearch-plugins/analysis-kuromoji/analysis-kuromoji-7.17.23.zip
/usr/share/elasticsearch/bin/elasticsearch-plugin install file:///root/analysis-kuromoji-7.17.23.zip
設定の追加
.env.production の最後に次の行を追加する。
ES_ENABLED=true
ES_HOST=localhost
ES_PORT=9200
サービスを再起動する。
systemctl enable elasticsearch.service
systemctl start elasticsearch.service
systemctl restart mastodon-*
次のコマンドを実行して古くなったインデックスを再構築する。
RAILS_ENV=production ./bin/tootctl search deploy --only=instances accounts tags statuses public_statuses
◇感想
最初、レイアウトが大きく崩れる理由がわからなくて四苦八苦した。なんのことはない、/home/mastodon を chmod 755 していなかったことが原因。
公式には Ubuntu 22.04 までが対象になっているから無理やりだとも言えなくもない。が、とりあえず無事に Ubuntu 24.04.1 で動作させることができて良かった。
これで暫くは Mastodon のアップデートにも対応できるだろう、たぶん。
◇参考サイト
- Mastodon 公式ドキュメント:新しいサーバーへの移行
サーバーの引っ越し手順はこちらのとおり。 - Ubuntu 24.04 サーバーに Mastodon をインストールする方法
24.04 へのインストールに関してはこのサイトを参考としてみた。 - PostgreSQL Wiki
今回は、本家が管理しているパッケージの Uubntu リポジトリを適用した。 - Mastodon 4.2.12
2024年9月8日現在の最新版。 - Mastodon 公式ドキュメント:新規インストール
独自の Mastodon ベースの Web サイトを作成するためのガイド。