使用 Supervisor 建立 Systemd-Free 的 Mastodon 實例
大家好,我是無能。
這次我嘗試建立了一個 Mastodon 實例。
https://eyes4you.org/
(由於 Vultr 的 SMTP 埠開放尚未收到支援團隊的通知,因此目前還無法收到郵件,實際上還沒有人可以註冊。預計在幾天內即可註冊。截至 2023/08/20 晚上 9:30)
初始問題
Mastodon 的設計以 Systemd 為前提,因此用於運行 Mastodon 的守護進程文件僅為 Systemd 準備。
環境 : Devuan SysVinit
先決條件 : 已完成 Mastodon 的設定精靈
這三個是 mastodon-web, mastodon-sidekiq, mastodon-streaming。
因此,使用 Supervisor 是一個方便的軟體,因為它可以讓守護進程文件在 Supervisor 下運行。最初的設計可能是作為一個進程監控工具開發的,隨著 Systemd 的普及,它產生了不同的可用性。
首先,讓我們安裝 Supervisor。
sudo apt install supervisor
由於會在 /etc/supervisor 中建立設定檔,因此這次我們將建立一個名為 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 啟動。
如果對 Mastodon 文件進行了更改,請不要忘記執行 restart all。
接下來,請設定 Apache 或 Nginx 以參照 Mastodon 的目錄。
結束。
參考文獻
Mastodon 的安裝指南這裡很清楚
https://zenn.dev/hashito/articles/caa579a9aa8b4f
https://vpslife.server-memo.net/mastodon_install/
由於這裡寫的 Supervisor 語法無法運行,所以我將其更改為現代版本(2023 年...)。
最後
我曾嘗試將這個守護進程文件更改為 SysVinit 版本,但最終放棄了。
後來我查看了 Systemd Free 的 Artix 守護進程文件,發現了 Supervisor 的字串,這才有了這次的嘗試。
考慮到 Supervisor 可以基本上替換任何守護進程文件,這真是太方便了...。
而且,就像這次一樣,三個守護進程文件只需一個就能全部完成,因此在創建管理多個進程的軟體或服務時,可以輕鬆地透過 Supervisor 統一啟動和停止,非常方便。
結束!