mastodon
pub-relay

pub-relayを立ててみたい方へ

Mastodon v2.5.0から搭載されたFederation relaysでは、公開投稿をリレーサーバに中継してもらうことで、相互にプッシュしあうことが出来るようになりました。詳しいことはここでは割愛。

公式に手順書がないのでこちらで紹介しますが、リレーは負荷も高く、突然止めたりすると関連インスタンスに与える影響が大きいので、安易に立てない方が良いと思います。

2018/10/29 追記:現在、pub-relayはsidekiqベースのものから、earlベースのものへ移行しています。本記事についてはsidekiq版を前提としているので、最新版をcloneしたあと、所定のコミットをcheckoutするなどして、sidekiqで実装されていたバージョンで実行してください。

pub-relay設置手順

ここでは、pub-relayを設置する方法をDebian 9でざっくり説明します。

crystalとredisをインストールする

apt install dirmngr

apt-key adv --keyserver keys.gnupg.net --recv-keys 09617FD37CC06B54
echo "deb http://dist.crystal-lang.org/apt crystal main" > /etc/apt/sources.list.d/crystal.list

apt update
apt install crystal libgmp-dev libz-dev libssl1.0-dev

apt install redis-server

ユーザー作ってpub-relayをgit cloneしてきてビルドする

adduser pub-relay
sudo su - pub-relay

git clone https://source.joinmastodon.org/mastodon/pub-relay.git
cd pub-relay
git checkout a8891a43d7ca95fb7bdcae348b39e20c6acce74b
shards update
shards build --release

秘密鍵を用意する

openssl genrsa 2024 > ~/.ssh/actor.pem
chmod 600 ~/.ssh/actor.pem
  • 保存する場所とか名前とか自分で考えてね

systemctlとかをよしなに

/etc/systemd/system/pub-relay-server.service
[Unit]
Description=pub-relay-server
After=network.target

[Service]
Type=simple
User=pub-relay
WorkingDirectory=/home/pub-relay/pub-relay
Environment="RELAY_DOMAIN=relay.example.com"
Environment="RELAY_PKEY_PATH=/home/pub-relay/.ssh/actor.pem"
ExecStart=/home/pub-relay/pub-relay/bin/server
ExecReload=/bin/kill -SIGUSR1 $MAINPID
TimeoutSec=15
Restart=always

[Install]
WantedBy=multi-user.target
/etc/systemd/system/pub-relay-worker.service
[Unit]
Description=pub-relay-worker
After=network.target

[Service]
Type=simple
User=pub-relay
WorkingDirectory=/home/pub-relay/pub-relay
Environment="RELAY_DOMAIN=relay.example.com"
Environment="RELAY_PKEY_PATH=/home/pub-relay/.ssh/actor.pem"
ExecStart=/home/pub-relay/pub-relay/bin/worker
TimeoutSec=15
Restart=always

[Install]
WantedBy=multi-user.target
  • RELAY_DOMAINとRELAY_PKEY_PATHを設定すること
systemctl enable pub-relay-server
systemctl enable pub-relay-worker

nginxとか、certbotとか、そのへんはポイントだけ

  • serverは8085ポートで待ち受けるので(RELAY_PORTで変更可能)、nginxでproxy_pass http://127.0.0.1:8085; って感じで
  • 性質上、https必須ということで、certbotなどで頑張るべし
  • このへんよくわからない人は、リレーとか扱うと危険なので、勉強してからお願いします

Dockerないの?

雪餅さん(@yukimochi)のコレを使わせてもらいましょう!
https://github.com/yukimochi/mastodon_pub-relay/commit/de9b8b3ba27566635cdaa921c9636136a4470864