379 Views
February 09, 25
スライド概要
第7回FediLUG勉強会 (2025/02/09) の発表資料です。
「評論・情報」ジャンルで活動している個人サークルです。 主に住宅街や地方の国道沿いなどで見かけるマルフク看板・キリスト看板を題材にした同人誌を作っています。関東地方に大量に看板を出している「きぬた歯科」系列の看板も好きです(ファンクラブ「大日本きぬた連盟」会員)。 お一人様Pixelfedの鯖缶もやっています (2023/8/20~)。
開発用ActivityPubサーバーの構築方法 hira / モナコ広告 @[email protected] 2025.02.09
自己紹介 • hira(ハンドルネーム) / モナコ広告(サークル名) • 赤白の「マルフク看板」と黒の「キリスト看板」ほか、 懐かしさを感じる看板たちを撮影して収集する活動 • 2021年から同人誌を制作して即売会に出展 • Misskey (Nexkey) サーバを立てて、看板の画像を定期投稿する Botを作成・運営 • Thinking Penguin Magazine Vol.0 に寄稿 『私と同人活動とFediverse』 2
マルフク看板: https://mi.signboard.fun/@029bot キリスト看板: https://mi.signboard.fun/@kirikanbot 歯科医の看板: https://mi.signboard.fun/@dentistbot 3
ActivityPubサーバーを 作っています
ActivityPubサーバーを作っています • 将来的に今のBotのサーバーを置き換える想定で開発 • 画像データの管理が少々煩雑(管理システム側・Misskeyドライブ側の二重管理) • レコード単位でリアクションの統計など取りたい • ActivityPubのBotの作成に特化したFediverseサーバー • 1ユーザーが複数のアカウントを一括管理できる • 画像を投稿できる • 一定周期で自動投稿できる • フォローはできなくてもよい • Fedifyというフレームワークを利用 • 最近は "BotKit" なる姉妹品も登場(まだ触ったことはない) 5
Fedify https://fedify.dev/ • ActivityPubサーバを自作するためのフレームワーク(TypeScript) • Node.js, Deno, Bunなどのランタイムで動く • やってくれること • ActivityPubプロトコルに基づくリモートサーバーとの通信 これが地味に面倒 • 自分でやること • ユーザ管理 • 投稿の管理 • データベースの管理 • ストレージの管理 • ユーザインタフェース • などなど... • やることが多いように見えるが、一般的なWebアプ リでも必要なこと • フレームワークから分離されていることで、実装の自 由度が高まる • S3 vs ローカルのストレージ • MySQL vs PostgreSQL • WebUIを持たせるか、CUIベースにするか 6
開発用環境の構築
ActivityPubサーバーのデバッグ • プログラムとは何事にもデバッグがつきもの • ActivityPubサーバーは、他のサーバーと連合することに価値がある • しかし、デバッグで他のサーバーに迷惑をかけるわけにはいかない つまり • 連合を試すためのサーバーは自前で立てるしかない • 今回は無料でやりたいので、すべてローカル環境に構築する前提とする • テスト用にVPS借りてもいいけど • 本番サーバーが動いている環境に居候させるのは危ない 8
構築方法 (その1) • hostsファイルに適当なドメイン名を追加 ※発表後、Mastodonからプライベー トIPにアクセスするための設定を教え ていただきました。確認中です。 • 自作サーバーと、テスト用のMastodon/Misskeyなどをローカルで起動 • Traefikなどのリバースプロキシを立て、ホスト名でトラフィックを振り分け • オレオレ認証局でSSL証明書を発行し、サーバー相互のHTTPS通信を可能に PC apbot.internal HTTPS UnLicense HTTPS Webブラウザ Key_off リバースプロキシ UnLicense 自作サーバー HTTP Mastodon UnLicense オレオレCA証明書 Key_off オレオレSSL証明書 UnLicense mastodon.internal sentiment_very_satisfied ローカル完結、誰にも迷惑を掛けない。ドメインを固定できる sentiment_very_dissatisfied 設定が若干面倒。Mastodonがプライベートアドレスの鯖と連合不可 9
構築方法 (その2) • 自作サーバーと、テスト用のMastodon/Misskeyなどをローカルで起動 • 2つのサーバーを無料のトンネリングサービスを使って外部に公開 • serveo.net, localhost.run, ngrok, VSCode の built-in port forwarding HTTPS xxx.lhr.life serveo.net / localhost.run など Lock yyy.lhr.life HTTPS PC License Webブラウザ SSH 自作サーバー License SSH Mastodon License License 正規のCA証明書 Lock 正規のSSL証明書 sentiment_very_satisfied オレオレ証明書の発行が不要で設定が簡単 sentiment_very_dissatisfied 通信が遅い・すぐトンネルが切れる・サブドメインが固定できない等 10
無料トンネリングサービスの比較 serveo localhost.run ngrok VSCodeの Forwarding 手軽さ ◎ 登録不要 ◎ 登録不要 △ 要ユーザ登録 ○ 要GitHub垢 速度 △だった記憶 △ ? △ 安定性 △だった記憶 すぐトンネルが 切れる △ すぐトンネルが 切れる ? ? ドメイン固定 × × △ 無料で1個 ○ その他制約 長期ダウン中 サブドメインへのア クセス時にGitHubへ のログインが必要 →事実上使えない 11
構築方法 (その2') • 自作サーバーと、テスト用のMastodon/Misskeyなどをローカルで起動 • 2つのサーバーをCloudflare Zero TrustのTunnelサービスで外部に公開 xxx.example.com Cloudflare HTTPS PC yyy.example.com Lock HTTPS License Webブラウザ SSH 自作サーバー License SSH Mastodon License License 正規のCA証明書 Lock 正規のSSL証明書 sentiment_very_satisfied 通信が速くて安定。独自ドメインを使えばサブドメインを固定できる sentiment_very_dissatisfied cloudflared というクライアントアプリが必要 (Dockerを使えば簡単)。 大規模障害に巻き込まれやすい(かも) 12
無料トンネリングサービスの比較 serveo localhost.run ngrok VSCodeの Forwarding Cloudflare 手軽さ ◎ 登録不要 ◎ 登録不要 △ 要ユーザ登録 ○ 要GitHub垢 △ 要ユーザ登録・事 前設定 速度 △だった記憶 △ ? △ ○ 安定性 △だった記憶 すぐトンネルが 切れる △ すぐトンネルが 切れる ? ? ○ ドメイン固定 × × △ 無料で1個 ○? ○ ポート番号付きの 要独自ドメイン サブドメイン その他制約 長期ダウン中 サブドメインへの CFの障害の影響 アクセス時に を受ける GitHubへのログ インが必要 →事実上使えない 13
まとめ
こんな感じになりました • 元々Cloudflareを使っていたので、Cloudflareのトンネリングを採用 15
まとめ • ActivityPubサーバーを開発用に構築した • ローカルのサーバーを外部に公開するトンネリングサービスを調査した • 個人的にはCloudflareが一番使いやすかった • 無料で使えるものはいくつかあるが、それぞれ癖がある • 全世界に公開された状態になるので、サブドメインは長い文字列で作り、使 わないときはサーバーを落としましょう 16
ご清聴ありがとうございました 17