動作確認
windymelt.icon 手元で実験するのめちゃくちゃ大変だった。ActivityPub.iconサーバ開発するときの便利テクとかないのだろうか?毎回デプロイして本番ドメインで起動するといったことをやっています。情報取得に失敗すると一定期間そのサーバからは相手にされなくなるので、あまり失敗できないのも大変。
unasuke.icon ActivityPubのtest suiteはないこともないのですが、初発のものがdownしていたり、そのforkも保守されているか微妙というのがあり悩ましいですね
ふぁぼん.iconローカルで他のActivityPubサーバを動かすのが良さそう?
dnsmasq+caddy+dockerで建てた各種実装、みたいなのやってたなあ
ローカルで他のAP実装を動かす
mastodon.testとかmisskey.localhostとかのテスト用ドメインを127.0.0.1に解決されるよう設定する
caddyでドメインごとにHTTPSと(127.0.0.1:3000とかに向けた)リバースプロキシを設定する 実際試したことないんで推測ですが……
public_yusuke.icon ローカルで Docker Compose を使い、Pleroma と自前実装を動かす方法を使ったことがあります
ただし、これは HTTPS を要求する WebFinger のエンドポイントが動作しません(とはいえ Pleroma の検索窓に自前実装上の actor を示す URL を入力すれば Pleroma からフォローできるし、その後の Pleroma への投稿の配送もできるようにはなります)
unarist.icon 最近やってないので同じようにできるかわからないですが…
当時はポート違いのMastodonをそれぞれ docker-compose で建てて、オレオレ証明書入れた Caddy のでそれぞれにリバプロして、dnsmasqで名前解決、みたいなことをしてた感じです。バージョン間の疎通確認とかもそれでやってました。
注意点としては、オレオレ証明書使う場合、秘密鍵はnginx/caddyに置いとけばいいんですが、証明書の方は各アプリが検証する時に使える必要があります。 /usr/local/share/ca-certificates/ にコピーしてupdate-ca-certificates するとか。まあTailscaleなりなんなり使った方が楽そう。
kb10uy.icon docker-compose, dnsmasq, Let's Encrypt の合わせ技で構築した (thanks: unarist.icon みたらしだんご.icon)
Let's Encrypt で *.home.your-domain.tld で証明書を取得する
オレオレ証明書インストールを回避するため
嘘のドメインでオレオレ証明書使う場合は↑のようにコピーすればいけるのかな
dnsmasq で address=/home.your-domain.tld/開発マシンの IP アドレス の設定を追加する
コンテナに hosts を配る面倒を回避するため
ドメインからホストマシンの IP アドレスに解決できるようにすればなんでもいい
あとは各実装を普通に docker-compose で立てて https://mstdn.home.your-domain.tld などからアクセスできるように nginx などでリバプロをかければ OK
private address として 172.16.0.0/12,192.168.0.0/16 あたりの許可の設定を忘れずに
(FirewallD 限定) Docker の internal network と微妙に相性が悪くコンテナ間で疎通できないことがあるので、不要なら internal 設定は消してしまってよさそう
ドメインの DNS をミスってなければパブリックインターネットから接続はされないはずだが逆向きはできうるので注意。ドメインホワイトリストなどを使うのがよい?
nyarla.icon Docker コンテナに Tailscale を突っ込んでコンテナ毎に https なドメインを振ると言う手があります (2023/07/14) Zenn に Tailscale 上でインスタンスを立てる方法をまとめました。良かったら参考までに
つい直近 (2023/7/5) までやっていて、その際のめちゃめちゃ雑なメモが下記です
これについて、やっている事は下記の様な流れです
Tailscale で隔離された VPNネットワークを構築する
ActivityPub 実装と Tailscale をコンテナに突っ込んで、https な URL を振る
https な URL の発行は Tailscale が提供する DNS 機能を使う
ActivityPub 実装 + Tailscale を含むコンテナ群は docker compose で立ち上げる
かつ network_mode: "service:tailscale" と指定する
そうすると関連コンテナが同一のホストに同居した様な状況になる
その後 tailscale serve https:443 / http://127.0.0.1:4000 と言った感じでプロキシを実行する
そうすると tailscale が発行した URL で https 通信が VPN内で出来る様になる
この辺りは自分の雑なメモを参照して頂けると助かります
その上で ActivityPub の S2S を出来る様にする
注意点として一部実装は Server-Side Request Forgery 攻撃対策のために Private Network での S2S 規制しています
そのためローカルのネットワークで S2S を実行しようと思うと、この点を回避する必要があります
nyarla.icon この点についてはソース書き換えで強引にセキュリティ設定を飛ばしました
ふぁぼん.icon 未リリースですが、mastodonのmasterはdevelopment環境でプライベートIPアドレスを許容するようになっているようです
rinsuki.iconローカルIP制限はだいたい設定で回避できるはず?
Misskey: allowedPrivateNetworks (in config yaml)
Mastodon: ALLOWED_PRIVATE_ADDRESSES (in env)
aaaa777.icon Github Codespacesなら開発環境のHTTPサーバーをフォワードしてHTTPSの公開URLに出来て楽です
公開URLはhttps://<username>-<codespaces-id>-<forwarded-port>.preview.app.github.dev/になる
activitypub-testing というものが公開されている
A couple months ago, we started working on a conformance testing tool for ActivityPub servers, and now we're sharing an early version publicly for the first time.