Supervisorを使って、Systemd FreeなMastodonインスタンスを立ち上げる

3 min read

こんにちは、無能です。

この度マストドンインスタンスを立ち上げてみました。

https://eyes4you.org/
(VultrのSMTPポート開放がサポートからまだ連絡が無くメール届かないので実質まだ誰も登録できません。数日内くらいには登録可能になります。2023/08/20午後9時30分現在)

始めの問題

マストドンはSystemd前提設計なので、マストドンを動かすためのデーモンファイルはSystemd用にしか用意されていません。

環境 : Devuan SysVinit
前提条件 : Mastodonのセットアップウィザードを終わっていること

mastodon-web, mastodon-sidekiq, mastodon-streamingこの3つです。

という事で、これをSupervisorを使うことによってデーモンファイルがSupervisorで稼働してくれる為に便利なソフトウェアです。恐らく元々の設計はプロセス監視ツールとして開発され、Systemdの普及共に違う可用性が生まれたものかと思います。

http://supervisord.org/

まずはSupervisorをインストールしましょう。

sudo apt install supervisor

/etc/supervisor にconfigファイルが作られる為、適当に今回はmastodon.confとしてファイルを作り以下の構文を記述します。

[group:mastodon]
programs=web,sidekiq,streaming

[program:web]
command=/usr/local/bin/bundle exec puma -C config/puma.rb
user=mastodon
directory=/home/sns/mastodon
stdout_logfile=/home/sns/mastodon/log/puma.log
stdout_logfile_maxbytes=1MB
stdout_logfile_backups=10
redirect_stderr=true
environment=RAILS_ENV=production,PORT=3000,LD_PRELOAD=libjemalloc.so
stopasgroup=true

[program:sidekiq]
command=/usr/local/bin/bundle exec sidekiq -c 25
user=mastodon
directory=/home/sns/mastodon
stdout_logfile=/home/sns/mastodon/log/sidekiq.log
stdout_logfile_maxbytes=1MB
stdout_logfile_backups=10
redirect_stderr=true
environment=RAILS_ENV=production,DB_POOL=25,MALLOC_ARENA_MAX=2,LD_PRELOAD=libjemalloc.so
stopasgroup=true

[program:streaming]
command=/usr/bin/node ./streaming
user=mastodon
directory=/home/sns/mastodon
stdout_logfile=/home/sns/mastodon/log/streaming.log
stdout_logfile_maxbytes=1MB
stdout_logfile_backups=10
redirect_stderr=true
environment=NODE_ENV=production,PORT=4000,STREAMING_CLUSTER_NUM=1
stopasgroup=true

変更の場合がある箇所に関しては赤字にしています。

それぞれのデーモンを可能なディレクトリ等に変更してください。

あとはsupervisorctl start allで全て起動するはずです。
マストドンのファイル変更を行ったりしたらrestart allするのをお忘れなく。

あとはApache又はNginxでマストドンのディレクトリを参照するようにしてあげてください。

おわり。

参考文献

マストドンのインストールはここが分かりやすい
https://zenn.dev/hashito/articles/caa579a9aa8b4f
https://vpslife.server-memo.net/mastodon_install/

ここに書いてあるsupervisorの構文のままだと動かなかったので現代的(にせんにじゅうさんねん・・・)に変えてみました。

Alternative Server Components

最後に

このデーモンファイルをSysVinit用に変えようと試みていたのですが心折れました。
そこでSystemd FreeのArtixのデーモンファイルを覗いていたらSupervisorの文字列が出てきたので今回に至ります。

Supervisorあればいかなるデーモンファイルも基本置き換えられる事考えると、なんて便利なんだ・・・。
しかも今回のように、3つのデーモンファイルが1つだけで全て完結できてしまうので多数のプロセスを管理するソフトやサービスを作る時にまとめてSupervisorでスタート、ストップ出来てしまうというラクラク便利です。

おわり!