Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
ゆるゆるMastodon鯖缶生活 S.H. 東京Ruby会議12 前夜祭 2025-01-17
Slide 2
Slide 2 text
自己紹介 S.H.(Shun Hiraoka) Mastodonの管理者(鯖缶) 島根県在住 Hamada.rb ESM アジャイル事業部 一日一Halo
Slide 3
Slide 3 text
各種SNSなど Github: S-H-GAMELINKS Mastodon:
[email protected]
Honk: honk.gamelinks007.net/u/sh Mixi2: S_H_ 基本的にはMastodonかHonkにいます
Slide 4
Slide 4 text
東京Ruby会議12
Slide 5
Slide 5 text
Rubyと暮らす
Slide 6
Slide 6 text
Mastodonとの暮らし
Slide 7
Slide 7 text
mastodon(prod)> Account.second => #
Slide 8
Slide 8 text
ゆるゆると7年ほど Mastodonと暮らす
Slide 9
Slide 9 text
RubyとRails なんもわからん
Slide 10
Slide 10 text
RubyとMastodonに パッチを投げる
Slide 11
Slide 11 text
そこまでの 歴史を話します
Slide 12
Slide 12 text
今日話すこと Mastodonとの出会い やらかしと成長 砂場としての楽しさ 現在の鯖缶生活
Slide 13
Slide 13 text
Mastodonとの出会い
Slide 14
Slide 14 text
出会い 2017年4月に日本で第一次Mastodonブームが 起きた Matzがシェアした記事経由で知った
Slide 15
Slide 15 text
Mastodonの面白さ 連合という概念 RubyとRailsで作られている 個人でSNSを運用できる
Slide 16
Slide 16 text
連合とは サーバ同士が同じプロトコルでやり取りができる 連合先のアカウントをフォローしたりできる
Slide 17
Slide 17 text
RubyとRailsとの距離 当時はまだRubyとRailsを触りはじめたばかり だった 勉強のため何か良い題材はないかと悩んでいた RubyとRailsでできたサービスを運用すると知 見が溜まるのではないかと考えた
Slide 18
Slide 18 text
個人でSNSを運用できる面白さ 大手SNSの規約に縛られない自由さがあった 当時は趣味でフリーゲームをC/DxLibとかで 作っており、創作活動する人向けの場を作りた いという思いもあった
Slide 19
Slide 19 text
「Mastodon建てよう!!」
Slide 20
Slide 20 text
2017年当時のサーバを建てる方法 さくらインターネット提供のスタートアップスクリプト があった 多くのサーバがスタートアップスクリプトで建立さ れていた
Slide 21
Slide 21 text
サーバは建てたけど…? ユーザーが自分しかいない 連合先がないので他にどんなサーバがあるのか がわからない 別のサーバのアカウントをフォローしていないの で連合先がない
Slide 22
Slide 22 text
サーバ建てた後のアレコレ 交流のあった人を自分のサーバに招待した TwitterでMastodonのサーバを建てた人を 探してフォローして、連合先を増やした RubyでシンプルなBotを作って、そこを経由し て連合先を増やしたりもした
Slide 23
Slide 23 text
Mastodonの鯖缶生活 の始まり
Slide 24
Slide 24 text
やらかしと成長
Slide 25
Slide 25 text
7年間にいくつもの やらかしをした
Slide 26
Slide 26 text
二大やらかし Let’s Encryptのルート証明書の切り替えで 自分のサーバからの投稿の配送が詰まってし まった メンテナンスをサボっていたために、関連gemの mimemagicがyankされていた問題を踏んで しまった
Slide 27
Slide 27 text
やらかし その①
Slide 28
Slide 28 text
Let’s Encryptのルート証明書 Let’s Encryptのルート証明書が2021年9月 30日で切り替わる 切り替えにより、Mastodonの一部のサーバで 証明書のエラーが起きるのではないかと危惧さ れていた
Slide 29
Slide 29 text
ウチは大丈夫でしょう
Slide 30
Slide 30 text
そんなことはなかった
Slide 31
Slide 31 text
2021年10月1日以降 サーバでインストールされている証明書が廃止 されるものだった それにより外部のサーバへの配送が詰まり、 Sidekiqで再試行ジョブが詰まっていた しかし、外部のサーバからの投稿に関してはタイ ムラインに流れていた
Slide 32
Slide 32 text
状況確認と調査 スタートアップスクリプトでサーバを建てていた のでそのあたりに何かないか確認した サーバのOSとしてCentOS 7を使っていること が判明した CentOS 7関連で同じ問題を踏んでいる人を 探せばなんとかなりそう
Slide 33
Slide 33 text
暫定的な対応 調査の結果、ca-certificatesをアップデートす れば対応できそう Sidekiqのスレッド数などを調整して一時的に 処理する数を増やしてジョブをさばいた sudo yum update ca-certificates
Slide 34
Slide 34 text
なんとかなった
Slide 35
Slide 35 text
反省点 ルート証明書の切り替えの影響を受けるかどう かの確認がないまま対応不要と判断してしまっ ていた 定期的なメンテナンスをサボっていたので環境 の確認に手間取ってしまった
Slide 36
Slide 36 text
やらかし その②
Slide 37
Slide 37 text
サーバを建てて 4年以上が経過した
Slide 38
Slide 38 text
だんだんメンテナンス しにくくなってきた
Slide 39
Slide 39 text
サーバの移行を やらないといけないか
Slide 40
Slide 40 text
サーバの移行 Let’s Encryptのルート証明書の件もあり、 サーバの移行を検討しはじめた また以前からC拡張のgemもインストールでき ないケースもあったことも移行を考える後押しに もなった Mastodonの公式ドキュメントで推奨されてい るUbuntuに移行することにした
Slide 41
Slide 41 text
現状の確認 少し前のMastodonのバージョン(v3.0.1)を 使っていた AWS S3にメディアファイルは移行済み PostgreSQLとRedisを同じサーバ内で動か していた DBとRedisのバックアップを取って移行先に流 し込めば移行は簡単そう
Slide 42
Slide 42 text
やることの洗い出し ユーザーと連合先の鯖缶向けにサーバ移行のア ナウンス 移行元のサーバを停止 PostgreSQLとRedisのバックアップと流し込 み 移行先のサーバでMastodonのセットアップ
Slide 43
Slide 43 text
なんとかなりそう
Slide 44
Slide 44 text
DBとRedisの移行まで 完了
Slide 45
Slide 45 text
あとはMastodonの セットアップだけ
Slide 46
Slide 46 text
bundle installが 失敗する
Slide 47
Slide 47 text
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.
Slide 48
Slide 48 text
mimemagicがない
Slide 49
Slide 49 text
mimemagicのyank mimemagicがGPLライセンスに変更された件 で、古いmimemagicがすべてyankされてい た件の影響を受けた bundle installが通らずMastodonのセット アップが完了しない
Slide 50
Slide 50 text
Mastodonの対応を確認 mimemagicに依存しないRailsにアップデート して対応していた ただし、最新のバージョン(v3.4.1)で対応され ており、うちのサーバのバージョン(v3.0.1)では 未対応 Mastodonのアップデートもやらないとだめそう
Slide 51
Slide 51 text
対応方針 サーバの移行はやる Mastodonのアップデートも同時にやる 両方やらないといけないというのがだいぶ辛い
Slide 52
Slide 52 text
リリースノートを読みつつ アップデート
Slide 53
Slide 53 text
祈りながら マイグレーションを 走らせる
Slide 54
Slide 54 text
なんとか対応できた
Slide 55
Slide 55 text
対応完了後 ユーザーと連合先の鯖缶向けにサーバの移行が 完了したアナウンスを流す サーバを止めていた間の配送が処理されるのを 確認
Slide 56
Slide 56 text
教訓 ソフトウェアはメンテナンスしなくなると動かなく なる 定期的なメンテナンスが大事
Slide 57
Slide 57 text
トラブルのある鯖缶生活
Slide 58
Slide 58 text
経験を積めた
Slide 59
Slide 59 text
慣れてきたころ
Slide 60
Slide 60 text
色々手を出し始める
Slide 61
Slide 61 text
砂場としての楽しさ
Slide 62
Slide 62 text
当時の状況 Ruby Hack ChallengeをきっかけにRuby へパッチを投げていた お仕事ではGoとReactで自社サービスの開発 をしていた お仕事でRubyを使っていないためコーナー ケースを踏む機会がほとんどなかった
Slide 63
Slide 63 text
そんなとき Rubyのmasterブランチでサービスを動かして いる話を聴く 色々と試す場所としてMastodonを使えないか と考えだす 新しい技術を試す砂場にできそう
Slide 64
Slide 64 text
やってみよう
Slide 65
Slide 65 text
Mastodonの砂場化 RubyとMastodonの開発ブランチでのサーバ を運用 TypeProfやSteepといった型解析ツールの試 験的導入 独自機能の導入とメンテナンス
Slide 66
Slide 66 text
開発ブランチでの運用 Ruby masterとMastodon mainでサーバを 運用 Ruby 3.1 から masterまでのバージョンでCI を回している 最新のRubyやMastodonに導入された新機能 を試し、バグなどがないかを確認 運用できないレベルのバグの場合は一旦バー ジョンを落とす
Slide 67
Slide 67 text
実際にRubyに投げたパッチ Universal Parserを有効化するとRipperのメモ リのバグを踏む Ripperの内部を知る良い機会になった
Slide 68
Slide 68 text
型周りのツールの導入 TypeProfで型を自動生成し、Steepで型チェッ クを行うように導入した Mastodon側の実装の問題を検知できた
Slide 69
Slide 69 text
実際の問題を検知ができたコード # デフォルト値ありの引数として定義されている def process(url, terminal = false) # ... end def process_html(response) # 実際にはキーワード引数で渡されていた process(json_link['href'], terminal: true) unless json_link.nil? end
Slide 70
Slide 70 text
独自機能 公開範囲「にゃーん」を実装 投稿に何を書いても最終的に「にゃーん」に置き換 えられる機能 当時Mastodon にはE2Eテストがなかった 公開範囲を選択して投稿されるまでのE2Eテスト が欲しくなった
Slide 71
Slide 71 text
cypress-railsの導入とパッチ cypress-railsを導入し、E2Eテストを追加 古い設定ファイルを使っており、そのままでは動作 しないので修正パッチを投げた
Slide 72
Slide 72 text
良いコントリビューション チャンスが得られた
Slide 73
Slide 73 text
現在の鯖缶生活
Slide 74
Slide 74 text
普段の鯖缶生活 RubyとMastodonの開発ブランチへの追従 他の鯖缶向けの新機能の共有 他のサーバのCI修正
Slide 75
Slide 75 text
開発ブランチへの追従 3日から7日程度の間隔で実施 過去にメンテナンスをサボっていたことの反省か ら間隔は短め Mastodonのみ変更差分を確認し、非互換や大 きな変更がないかをチェックしている Rubyに関しては随時変更を追っているのでメ ンテナンスのタイミングでは特に何もしない
Slide 76
Slide 76 text
メンテナンスの通知 変更差分をメンテナンス用のesaの記事にまとめる esaの記事を外部向けに公開すると、自動的に ユーザー向けメンテナンス終了のアナウンスが流れ るようにしている
Slide 77
Slide 77 text
他の鯖缶へ新機能の共有 メンテナンスの際に新機能などを確認 確認した内容をタイムラインにPostして共有
Slide 78
Slide 78 text
他のサーバのCI修正 連合先の鯖缶がCIが通らなくて困っていたので フォロー 開発ブランチに追従している際のCI修正の知見を 活かせた
Slide 79
Slide 79 text
ゆるゆると生活 しています
Slide 80
Slide 80 text
さいごに
Slide 81
Slide 81 text
ゆるゆると7年ほど 鯖缶を続けてきました
Slide 82
Slide 82 text
続けていると色々と できることが増えます
Slide 83
Slide 83 text
面白そうなことを見つけ たらやってみよう
Slide 84
Slide 84 text
無理せずゆるゆると続け ていくことが大事
Slide 85
Slide 85 text
自分の武器になるものが 見つかるかもしれません