Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
ゆるゆるMastodon 鯖缶生活
Search
S.H.
January 17, 2025
0
280
ゆるゆるMastodon 鯖缶生活
東京Ruby会議12 前夜祭イベント
S.H.
January 17, 2025
Tweet
Share
More Decks by S.H.
See All by S.H.
1週間で作るActivityPubリレーサーバ
gamelinks007
0
48
Rails 8で作るActivityPub リレーサーバ
gamelinks007
0
230
Developing an ActivityPub Relay with Rails 8
gamelinks007
0
21
Mastodon on Ruby master
gamelinks007
0
75
Trying to Make Ruby's Parser Available as a Gem
gamelinks007
1
260
ユーザーから見たLrama
gamelinks007
0
180
Contributing to the Ruby Parser
gamelinks007
2
940
Featured
See All Featured
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
173
51k
The Pragmatic Product Professional
lauravandoore
32
6.4k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
160
15k
Facilitating Awesome Meetings
lara
51
6.2k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
59k
Embracing the Ebb and Flow
colly
84
4.5k
Agile that works and the tools we love
rasmusluckow
328
21k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
120k
Documentation Writing (for coders)
carmenintech
67
4.5k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
232
17k
A Tale of Four Properties
chriscoyier
157
23k
A Philosophy of Restraint
colly
203
16k
Transcript
ゆるゆるMastodon鯖缶生活 S.H. 東京Ruby会議12 前夜祭 2025-01-17
自己紹介 S.H.(Shun Hiraoka) Mastodonの管理者(鯖缶) 島根県在住 Hamada.rb ESM アジャイル事業部 一日一Halo
各種SNSなど Github: S-H-GAMELINKS Mastodon:
[email protected]
Honk: honk.gamelinks007.net/u/sh Mixi2: S_H_ 基本的にはMastodonかHonkにいます
東京Ruby会議12
Rubyと暮らす
Mastodonとの暮らし
mastodon(prod)> Account.second => #<Account:0x000076947e3fe240 username: "S_H_", domain: nil, created_at: "2017-05-02
11:57:19.010191000 +0000", updated_at: "2024-11-10 08:29:12.954805000 +0000", display_name: "S.H.@Haloはいいぞ", uri: "", url: nil,
ゆるゆると7年ほど Mastodonと暮らす
RubyとRails なんもわからん
RubyとMastodonに パッチを投げる
そこまでの 歴史を話します
今日話すこと Mastodonとの出会い やらかしと成長 砂場としての楽しさ 現在の鯖缶生活
Mastodonとの出会い
出会い 2017年4月に日本で第一次Mastodonブームが 起きた Matzがシェアした記事経由で知った
Mastodonの面白さ 連合という概念 RubyとRailsで作られている 個人でSNSを運用できる
連合とは サーバ同士が同じプロトコルでやり取りができる 連合先のアカウントをフォローしたりできる
RubyとRailsとの距離 当時はまだRubyとRailsを触りはじめたばかり だった 勉強のため何か良い題材はないかと悩んでいた RubyとRailsでできたサービスを運用すると知 見が溜まるのではないかと考えた
個人でSNSを運用できる面白さ 大手SNSの規約に縛られない自由さがあった 当時は趣味でフリーゲームをC/DxLibとかで 作っており、創作活動する人向けの場を作りた いという思いもあった
「Mastodon建てよう!!」
2017年当時のサーバを建てる方法 さくらインターネット提供のスタートアップスクリプト があった 多くのサーバがスタートアップスクリプトで建立さ れていた
サーバは建てたけど…? ユーザーが自分しかいない 連合先がないので他にどんなサーバがあるのか がわからない 別のサーバのアカウントをフォローしていないの で連合先がない
サーバ建てた後のアレコレ 交流のあった人を自分のサーバに招待した TwitterでMastodonのサーバを建てた人を 探してフォローして、連合先を増やした RubyでシンプルなBotを作って、そこを経由し て連合先を増やしたりもした
Mastodonの鯖缶生活 の始まり
やらかしと成長
7年間にいくつもの やらかしをした
二大やらかし Let’s Encryptのルート証明書の切り替えで 自分のサーバからの投稿の配送が詰まってし まった メンテナンスをサボっていたために、関連gemの mimemagicがyankされていた問題を踏んで しまった
やらかし その①
Let’s Encryptのルート証明書 Let’s Encryptのルート証明書が2021年9月 30日で切り替わる 切り替えにより、Mastodonの一部のサーバで 証明書のエラーが起きるのではないかと危惧さ れていた
ウチは大丈夫でしょう
そんなことはなかった
2021年10月1日以降 サーバでインストールされている証明書が廃止 されるものだった それにより外部のサーバへの配送が詰まり、 Sidekiqで再試行ジョブが詰まっていた しかし、外部のサーバからの投稿に関してはタイ ムラインに流れていた
状況確認と調査 スタートアップスクリプトでサーバを建てていた のでそのあたりに何かないか確認した サーバのOSとしてCentOS 7を使っていること が判明した CentOS 7関連で同じ問題を踏んでいる人を 探せばなんとかなりそう
暫定的な対応 調査の結果、ca-certificatesをアップデートす れば対応できそう Sidekiqのスレッド数などを調整して一時的に 処理する数を増やしてジョブをさばいた sudo yum update ca-certificates
なんとかなった
反省点 ルート証明書の切り替えの影響を受けるかどう かの確認がないまま対応不要と判断してしまっ ていた 定期的なメンテナンスをサボっていたので環境 の確認に手間取ってしまった
やらかし その②
サーバを建てて 4年以上が経過した
だんだんメンテナンス しにくくなってきた
サーバの移行を やらないといけないか
サーバの移行 Let’s Encryptのルート証明書の件もあり、 サーバの移行を検討しはじめた また以前からC拡張のgemもインストールでき ないケースもあったことも移行を考える後押しに もなった Mastodonの公式ドキュメントで推奨されてい るUbuntuに移行することにした
現状の確認 少し前のMastodonのバージョン(v3.0.1)を 使っていた AWS S3にメディアファイルは移行済み PostgreSQLとRedisを同じサーバ内で動か していた DBとRedisのバックアップを取って移行先に流 し込めば移行は簡単そう
やることの洗い出し ユーザーと連合先の鯖缶向けにサーバ移行のア ナウンス 移行元のサーバを停止 PostgreSQLとRedisのバックアップと流し込 み 移行先のサーバでMastodonのセットアップ
なんとかなりそう
DBとRedisの移行まで 完了
あとはMastodonの セットアップだけ
bundle installが 失敗する
You'll need to update your bundle to a version other
than mimemagic (0.3.3) that hasn't been removed in order to install.
mimemagicがない
mimemagicのyank mimemagicがGPLライセンスに変更された件 で、古いmimemagicがすべてyankされてい た件の影響を受けた bundle installが通らずMastodonのセット アップが完了しない
Mastodonの対応を確認 mimemagicに依存しないRailsにアップデート して対応していた ただし、最新のバージョン(v3.4.1)で対応され ており、うちのサーバのバージョン(v3.0.1)では 未対応 Mastodonのアップデートもやらないとだめそう
対応方針 サーバの移行はやる Mastodonのアップデートも同時にやる 両方やらないといけないというのがだいぶ辛い
リリースノートを読みつつ アップデート
祈りながら マイグレーションを 走らせる
なんとか対応できた
対応完了後 ユーザーと連合先の鯖缶向けにサーバの移行が 完了したアナウンスを流す サーバを止めていた間の配送が処理されるのを 確認
教訓 ソフトウェアはメンテナンスしなくなると動かなく なる 定期的なメンテナンスが大事
トラブルのある鯖缶生活
経験を積めた
慣れてきたころ
色々手を出し始める
砂場としての楽しさ
当時の状況 Ruby Hack ChallengeをきっかけにRuby へパッチを投げていた お仕事ではGoとReactで自社サービスの開発 をしていた お仕事でRubyを使っていないためコーナー ケースを踏む機会がほとんどなかった
そんなとき Rubyのmasterブランチでサービスを動かして いる話を聴く 色々と試す場所としてMastodonを使えないか と考えだす 新しい技術を試す砂場にできそう
やってみよう
Mastodonの砂場化 RubyとMastodonの開発ブランチでのサーバ を運用 TypeProfやSteepといった型解析ツールの試 験的導入 独自機能の導入とメンテナンス
開発ブランチでの運用 Ruby masterとMastodon mainでサーバを 運用 Ruby 3.1 から masterまでのバージョンでCI を回している
最新のRubyやMastodonに導入された新機能 を試し、バグなどがないかを確認 運用できないレベルのバグの場合は一旦バー ジョンを落とす
実際にRubyに投げたパッチ Universal Parserを有効化するとRipperのメモ リのバグを踏む Ripperの内部を知る良い機会になった
型周りのツールの導入 TypeProfで型を自動生成し、Steepで型チェッ クを行うように導入した Mastodon側の実装の問題を検知できた
実際の問題を検知ができたコード # デフォルト値ありの引数として定義されている def process(url, terminal = false) # ...
end def process_html(response) # 実際にはキーワード引数で渡されていた process(json_link['href'], terminal: true) unless json_link.nil? end
独自機能 公開範囲「にゃーん」を実装 投稿に何を書いても最終的に「にゃーん」に置き換 えられる機能 当時Mastodon にはE2Eテストがなかった 公開範囲を選択して投稿されるまでのE2Eテスト が欲しくなった
cypress-railsの導入とパッチ cypress-railsを導入し、E2Eテストを追加 古い設定ファイルを使っており、そのままでは動作 しないので修正パッチを投げた
良いコントリビューション チャンスが得られた
現在の鯖缶生活
普段の鯖缶生活 RubyとMastodonの開発ブランチへの追従 他の鯖缶向けの新機能の共有 他のサーバのCI修正
開発ブランチへの追従 3日から7日程度の間隔で実施 過去にメンテナンスをサボっていたことの反省か ら間隔は短め Mastodonのみ変更差分を確認し、非互換や大 きな変更がないかをチェックしている Rubyに関しては随時変更を追っているのでメ ンテナンスのタイミングでは特に何もしない
メンテナンスの通知 変更差分をメンテナンス用のesaの記事にまとめる esaの記事を外部向けに公開すると、自動的に ユーザー向けメンテナンス終了のアナウンスが流れ るようにしている
他の鯖缶へ新機能の共有 メンテナンスの際に新機能などを確認 確認した内容をタイムラインにPostして共有
他のサーバのCI修正 連合先の鯖缶がCIが通らなくて困っていたので フォロー 開発ブランチに追従している際のCI修正の知見を 活かせた
ゆるゆると生活 しています
さいごに
ゆるゆると7年ほど 鯖缶を続けてきました
続けていると色々と できることが増えます
面白そうなことを見つけ たらやってみよう
無理せずゆるゆると続け ていくことが大事
自分の武器になるものが 見つかるかもしれません