月: 2024年5月

自分ドメインに個人用activitypubサーバを立てた

ある時期からちょっと自分用のactivitypubサーバを立ててみたいという気持ちが高まってきたので、ようやくやってみた。

ソフトウェアとしてはmastodonではなくpleromaを使うことにした。理由は、なんとなく面白そうだから。そのせいで無駄に面倒なことになっている気もするが。

サーバとしてはGCPでE2-microインスタンスを借りて使うことにした。0.25コア1GBメモリのburstableインスタンスだ。burstableなので高負荷時には遅くなりそうだが、自分の個人用途では今のところ大丈夫そうである。値段は$7/月くらい。趣味としてはまあまあのお値段ではある。f2-microの方が安かったしメモリもそれで足りそうなので、そっちの方がよかったのかもしれん。まあ今はこれでいいです。

インストール作業はとりあえず https://docs-develop.pleroma.social/backend/installation/otp_en/ をなぞるだけなのでそれほど困らない。ただ libssl-1.1 が apt 経由で入れられないのでちょっと難儀した。S3の設定はしていない。メールは(使わないと思うが)一応アカウントあったのでmailgunの設定を付け加えている。

実際に使っていて、特に負荷のない平常時でCPU利用率は5%くらい(0.25コアというのは平均使用率で、実際に見えるのは1コアなので0.05コアくらいということ)、メモリは20-30%くらい(200-300MBくらい)。PostgreSQLも走っているのでこれに追加はあるが、負荷としては全然大したことない。

インストールしてみて、ひとまずすんなり動いているので、さっさと旧アカウントからの移行を行なった。と言ってもmastodon / fediverseにおけるアカウント移行というのは、

  • エイリアス設定(新しいアカウントから旧アカウントへ言及する)
  • フォワード設定(旧アカウントから新アカウントに転送する)

というだけで、これは基本的にフォロワーを移行させるという効果しかない。旧アカウントをフォローしている人は新アカウントにフォローを付け替えられる。自分自身のフォローについては移行されないので手動でインポートする必要がある。また投稿自体は移行されず、空っぽのタイムラインから再構築しないといけない。これはfediverse全体でそういうもののようだ。

pleromaを使っていて意外に思った点:他サーバの投稿はfav/reshare/replyが全く見えていない。

どうも手元のサーバにある投稿についてだけ計上されるみたいだ。つまり基本的には自分がそういうものをつけたかどうかという0/1の情報以上のものは出てこない。他サーバ上でのリプライやfavの情報は取ってこないようになっている(?)ように思われる。

そういうものをみたい場合、投稿元のサーバにアクセスすれば情報は読めるから、一切アクセスできないというわけではない。自分はフロントエンドはphanpyを使っているが、phanpyの場合はメニューから簡単にアクセスできる。でもメニューを開いてクリックするという2クリックが必要になるし、そもそもリプライがあるのかどうかもわからない状態でそれをあえて確認するかというと結構な手間ではないか、という気がする(pleromaの標準フロントエンドでもメニューを開いてexternal sourceに移動すれば読める。クリック数は同じだが、pleromaの場合は実際に相手のサーバのURLを開くのでページロードのぶん遅い)。

それに「フォローしているアカウントに対するリプライ」に反応することができない。つまり私のフォローするAさんに、私のフォローしていないBさんがリプライしていたとする。このBさんのリプライは私のサーバには来ていないので見えない。上記の方法でAさんの投稿の所属するサーバに移動すると読めるが、そのBさんのリプライはAさんの所属するサーバの投稿なので、私からはreshareとか再リプライとかができないわけだ。そんなに困ることはない気もするけどちょっと直感的ではないように感じる。

ちなみに一方で、「フォローしている人が他の自分のフォローしていない人にリプライした投稿」の場合はリプライ元も読め、反応できるようになっている。ややこしいけど、自分はAさんをフォローしていて、AさんがBさんの(公開された)投稿にリプライしているとする。すると、Aさんのリプライと、元のBさんの投稿はどちらも自分のサーバに保存されるので、Bさんの元投稿に対しての各種操作が許されるようになっている。

この組み合わせで、A->B->A->Bみたいにリプライの応酬があったとすると、一つ目のBさんのリプライは見える(Aさんがリプライ仕返しているので)が、二つ目のBさんのリプライは見えない、みたいなことが起こったりする。さらにAさんの最初の投稿についた別のCさんのリプライも見えない、みたいになったりする。めちゃややこしい。

同様にフォロワー・フォロイーもほとんど情報がない。例えば私がAさんをフォローしているとして、Aさんのアカウント情報を自分のサーバ上で表示させてみる。するとフォロワー数とかフォロー数とかは正確に出ているが、実際に誰をフォローしているのか、どんなフォロワーがいるのかを確認しようとすると自分以外は一切出てこない、といったことが起こる。これも自分のサーバ内のDBには情報がないからであろう。もちろん当人の所属するサーバに行って表示させれば出てくるからそんなに問題はないのかも知れない。でもこれもfindabilityが低い気がして今ひとつだなという気もする。

前使っていた普通のmastodonではこういうことはなかったように思う。設計思想の違いというやつだろうか、それとも前のサーバは大規模なので単に気づきづらかっただけなのだろうか。単に気づいていなかっただけという気もするが、一方でpleromaは軽量を自称している関係である程度の割り切りもあるからではないか、という気がしている。同じActivityPubサーバでもそういうところに違いがある(ありうる)というのはあんまり考えていなかったので興味深い。基本的にはちょっと不便だなと思っているが、投稿が限られていて静かな雰囲気はあってこれはこれで悪くないかもという気もしないでもない。いやまあでも不便は不便だな。

それにしてもサーバを動かして公開するのって久しぶり。しかし、正直にいうともうそういうことあんまりしたくないという気持ちはある。最初にセットアップしてソフトウェアを起動するところまでは全然問題ないんだけど、ソフトウェアをアップデートしたりとか、証明書の更新とか、もうなんか面倒だなと思ってしまう。そういうのはクラウドプロバイダに任せてAppEngineみたいなのでソフトウェアを動かしたい、という気持ちが強い。その方が(個人用途だと特に)安くなるだろうし。AppEngine + firestore + blobstore or google storage みたいな構成のactivitypub対応ソフトウェアはないんだろうか。AWS ECS + Aurora + S3でもいいですけど。

もちろん探せばあるんだろうけど、そういうものが特に人気ということでもない、というのはちょっと不思議。ものすごく時間があったら自作を試してみたい気もするけど、そんな時間はないかなぁ……activitypubのプロトコルはかなり複雑そうだし、上記のようなあれこれを考えるにやるべきこともかなり大掛かりなものだろうな。

そういえば、かつてcloudflareが開発したwildebeestっていうソフトウェアがあって、これはこういう自分のような人間には向いているよな、最近あんまり噂を聞かないけど、と思って見に行ってみたところ、噂を聞かないどころかプロジェクト自体がいつの間にかアーカイブされてしまっていた。残念。