2023-12-19

おひとり様 Mastodon サーバーを支える技術

この記事は Fediverse (4) Advent Calendar 2023 の 19 日目の記事です。


こんにちは、Fohte (@[email protected]) です。

Fediverse Advent Calendar には 2 日目の「Twitter から Mastodon に移住して 9 ヶ月が経った」から続き 2 記事目となります。こちらも併せてご覧いただけると幸いです。
こちらの記事でも書いていますが、筆者は Twitter から Mastodon に移住し、さらにおひとり様サーバーを立てそこを主な拠点にしています。
この記事では、まずなぜおひとり様サーバーを選択したのかを書き、その後おひとり様サーバーの技術的な部分であるインフラ構成について書きます。

なぜおひとり様サーバーなのか

筆者は記事執筆時点で一年ほど Mastodon に定住し、おひとり様サーバーで過ごしています。

最初は mstdn.jp や pawoo.net、はたまた fedibird.com にアカウントを作成していましたが、ほどなくしておひとり様サーバーに移行しました。1

なぜおひとり様サーバーに移行したかというと、最大のモチベーションが「自分のデータ (主に投稿) を自分で所持・管理したい」からです。

自分のデータを自分で所持・管理するモチベーション

これはここ一年ほどの Twitter の動向によるものがあります。Twitter は現状では信頼し切れず、データを失ったりアクセスできなくなる可能性が否めないと考えています。2
Twitter はライフログとして利用していた側面もあったため、データを失うことは筆者にとって非常に大きな損失です。

Mastodon に移行しても、やはりデータを失う可能性はあります。特に Mastodon の場合、サーバー運用者がしばしば個人です。これは良い点もありますが、個人のお財布の都合だったり、様々な事由でサーバーが閉じられることも少なくはありません。

そこで、筆者はデータの損失を失うリスクを減らすために自分で管理することを選択しました。
もちろん自分で管理しても、自分の不手際等による何らかのトラブル起因のデータ損失リスクはあります。しかし、それが自分でコントロール可能であるというところが安心できる点です。

おひとり様サーバーのインフラ構成

さて、ここからは技術的な話である、おひとり様サーバー social.fohte.net のインフラ構成について紹介します。

はじめに断りを入れておくのですが、まだ今のインフラ構成には不満が残っていて、最善の構成ではありません。記事執筆時点での構成を書きます。

インフラ構成の概要

インフラとしては以下の構成になっています。

social.fohte.net のインフラ構成図
social.fohte.net のインフラ構成図

ざっくりですが、CDN に Cloudflare、画像保存先として Cloudflare R2、VPS として Vultr を利用しています。

Cloudflare

Cloudflare を CDN および簡単な WAF として利用しています。
特にそれ以上の工夫はなく、ただ Cloudflare を通しているだけといっても過言ではありません。
それでも CDN としてパフォーマンス上のメリットや、オリジンサーバーの Public IP を隠して直接的な攻撃を防ぐメリットがあり、大変重宝しています。
これでいて無料なのがすごい。

Cloudflare R2

Cloudflare R2 は、Cloudflare が提供するオブジェクトストレージサービスです。Amazon S3 と API 互換性があり、Mastodon でも投稿に添付する画像などの静的ファイルの保存先として利用できます。

筆者が考えている R2 が優れている点として、以下の 2 つがあります。筆者はこれらのメリットに惹かれ、R2 を利用しています。

  • egress 料金が無料
    • SNS の特性上、オブジェクトストレージへの保存よりも取得が多くなりがちです。egress (ユーザーから見ると画像取得) が無料なのは R2 の大きな強みのひとつだと考えています。
  • Cloudflare のインフラに乗れる
    • 特に Cloudflare の CDN を簡単に通せて嬉しい。

Vultr

Vultr は国外の VPS サービスです。国内にも VPS サービスがあったり、AWS などのパブリッククラウドという選択もありましたが、Vultr を選んだ理由としては下記のものがあります。

  • 東京リージョンがある
  • 値段が高価ではない (AWS, GCP 等と比べて) 3
    • 筆者の環境は一番小さいサイズ (CPU 1 コア、メモリ 1 GB) で月 6 USD
  • 時間単位で課金される (月単位ではない)
  • サーバーの日次自動バックアップ機能が使える (1 台あたり月 1.2 USD)
    • 1.2 USD だけでバックアップが日次かつ自動でとれるのは非常に嬉しい点

この Vultr のインスタンスを立てて、その中で Mastodon サーバーを動かしています。

Vultr DB

Mastodon のデータベースとして、Vultr の Managed Database を利用しています。
DB は投稿を含む重要なデータを保存しているため、十分に気を配って運用する必要があります。
正直なところ、個人利用においてはそこまで気を配る余裕が割けないため、マネージドサービスのほうが運用面で安心感があると考えて採用しました。

しかしここに関しては後悔しており、Mastodon サーバーが動く Vultr インスタンスに同居する形での置き換えを検討しています。
理由としては単純で、高価であるという一点です。最も安い 1 vCPU メモリ 1 GB のプランでも月 18 USD かかり、インスタンスより高価になっています。
いくらデータが大事とはいえ、円安という今の状況だったり、毎月かかってくるコストであることを考えるとなかなかに重いです。

監視設計

監視は Better Stack の Uptime monitoring を利用し、外形監視のみをしています。(10 個までは無料)

おひとり様サーバーということで、障害が起きても自分が使えなくなるだけで特段問題はないため、監視は外形監視のみとサボっています。
障害が起きる予兆に気付けなくても、そして最悪気付かない間に障害が起きてしまっていても、自分が利用しようと思ったタイミングで気付ければ良いという考えです。
ただ、おひとり様サーバーといえど、連合先や匿名ユーザーからのアクセスは発生します。そのため、落ちていることは最低限気付きたいと考え、外形監視を取り入れています。

ここも改善したいと考えていて、少なくとも DB のディスク容量監視くらいは入れたいと考えています。

最後に

本記事では、おひとり様サーバーに移行した経緯と、おひとり様サーバーのインフラ構成について書きました。

なるべく安く運用するのであれば、Vultr + Cloudflare + Cloudflare R2 の構成がおすすめです。月 7.2 USD ほどで運用できます。

現状の筆者の構成ではまだ改善すべき箇所はありますが、参考になれば幸いです。

Footnotes

  1. misskey.io にもアカウントはあるものの、頻繁には利用していません。Misskey 内に閉じた情報の閲覧 (絵文字リアクションや検索) のために利用しています。

  2. Twitter は記事執筆時点でアーカイブをダウンロードできるようになっていますが、将来的にこれもダウンロードできなくなる可能性は否めません。

  3. 円安の今は国内 VPS のほうが安くなってしまいました。