Slide 1

Slide 1 text

1週間で作るActivityPub リレーサーバ S.H. 第6回 Fediverse Linux Users Group 勉強会 2024-12-21

Slide 2

Slide 2 text

自己紹介 S.H. Rubyにたまにパッチを投げてる人 2017年ごろから鯖缶やってる人 最近リレーサーバを作った

Slide 3

Slide 3 text

今日話すこと リレーサーバについて 開発の背景 作ったもの

Slide 4

Slide 4 text

リレーサーバ

Slide 5

Slide 5 text

ActivityPubリレーサーバの仕組み リレーサーバに参加しているサーバからの公開投 稿を受け取る 受け取った公開投稿をリレーサーバに参加してい る別のサーバに配送する

Slide 6

Slide 6 text

リレーサーバのメリット Fediverseのサーバ同士が連合しやすくなる 特にお一人様鯖や小規模な鯖の場合は連合が 強化される

Slide 7

Slide 7 text

リレーサーバのデメリット 外部から流れてくる投稿の数が増え、サーバへ の負荷が増加する 投稿によっては画像もあるためディスクの容量 も使ってしまう リレーサーバ自体もそれなりに負荷がかかる

Slide 8

Slide 8 text

現状のリレーサーバ実装(1) 有名な実装は大きく二つ pub-relay(Crystal) Activity-Relay(Go)

Slide 9

Slide 9 text

現状のリレーサーバ実装(2) Node.jsやRustの実装もある ActivityPub Relay(Node.js) AodeRelay(Rust)

Slide 10

Slide 10 text

現状のリレーサーバの課題(1) リレーサーバの数よりもFediverseのサーバの 数が多い 特定のリレーサーバに参加しがち リレーサーバから配送される投稿数も増加しや すい リレーサーバ自体と参加サーバへの負荷が増加 しやすい

Slide 11

Slide 11 text

現状のリレーサーバの課題(2) リレーサーバの実装があまりない アクティブにメンテナンスされているのは3つ Activity-Relay(Go) ActivityPub Relay(Node.js) AodeRelay(Rust)

Slide 12

Slide 12 text

現状のリレーサーバの課題(3) RedisやPostgreSQLが必要 建てるのに気合がいる 簡単に建てれないのでリレーサーバの数が増え ない

Slide 13

Slide 13 text

開発の背景

Slide 14

Slide 14 text

リレーサーバを作りたかった リレーサーバにRubyの実装がない 厳密にはあるが現在はメンテナンスされていな い Rubyが好きな人間としてはRubyの実装を作り たい 去年末くらいから頑張ってたけど開発が止まっ てたの再開したい

Slide 15

Slide 15 text

リレーサーバの分散化 簡単に建てれるリレーサーバがあれば負荷を分 散できる? 小規模なリレーサーバを建てれると良いので は?

Slide 16

Slide 16 text

RubyWorld Conference 2024 Mastodon開発チームのAndy Piperさんが 来る ActivityPubやFediverseの話がしたい CFPは落ちたのでヘイシャのスポンサー枠でLTが できそう このタイミングに合わせてリレーサーバ実装の話 をするとよいのでは?

Slide 17

Slide 17 text

リレーサーバのプロトタイプ おそらく現存する唯一のRuby実装 プロトタイプのためテストがなかった RailsやRubyのアップデートが大変そう リレーサーバ開発時の知見をフィードバックでき そう

Slide 18

Slide 18 text

経緯のまとめ リレーサーバをRubyで作りたい リレーサーバの分散化ができないか試したい RubyWorld Conferenceでの話すきっかけ 作り プロトタイプ版へのフィードバックに活かせそう

Slide 19

Slide 19 text

この時点で11月上旬

Slide 20

Slide 20 text

RubyWorld Conference 2024は 12月頭

Slide 21

Slide 21 text

実装に割ける時間があま りない

Slide 22

Slide 22 text

1週間くらいでなんとかな らないか

Slide 23

Slide 23 text

Rails 8ならできる

Slide 24

Slide 24 text

One Person Framework Kamalでのデプロイの簡略化 ThrusterというNginx + Let’s Encryptな ツール Solid QueueでのRedisが不要なジョブ処理 SQLiteを本番環境で使える

Slide 25

Slide 25 text

Kamalでのデプロイ 基本的にDockerとGitさえあればデプロイでき る gracefulにデプロイするためダウンタイム無し

Slide 26

Slide 26 text

Thrusterでのメンテコスト削減 NginxやApacheの代わりにRailsに導入され た Let’s Encryptで証明書の自動発行をしてく れる 証明書の自動更新のサポート

Slide 27

Slide 27 text

Solid Queueでのジョブ処理 DBをジョブキューとして使う Redisがいらない

Slide 28

Slide 28 text

SQLiteを本番環境で利用 リレーサーバで保存するデータはあまりない 参加サーバの情報や ジョブのデータ バックアップが簡単 機密データとかないのでSQLiteで充分

Slide 29

Slide 29 text

1週間で実装とデプロイ

Slide 30

Slide 30 text

作ったもの

Slide 31

Slide 31 text

ActivityPub Relay

Slide 32

Slide 32 text

機能 Mastodon/Misskeyのリレーに対応 ハッシュタグリレーとして運用できるオプション 購読サーバの管理画面 ジョブの管理画面

Slide 33

Slide 33 text

便利な点 Kamalを使っているためデプロイが非常に簡単 RedisやDBを建てる面倒くささから解放された メモリ1GB CPU 1コアでサクサク動く

Slide 34

Slide 34 text

今後の機能案 Pleroma/Akkomaのリレーへの対応 承認機能 ブロック機能 サーバ情報を取得する定期ジョブ 画像解析して該当の画像のみ配送する機能

Slide 35

Slide 35 text

今後の展望 リレーサーバの分散のためにユーザーを増やし たい ドキュメント化されていない機能などを充実 リレーサーバ自体の数も増やしたい

Slide 36

Slide 36 text

開発メンバー現状二名

Slide 37

Slide 37 text

人手が欲しい!!

Slide 38

Slide 38 text

仲間を募集中!!