Mastodon ↗ は、よく使われる fediverse ↗ ソフトウェアです。このガイドでは、セルフホストの Mastodon インスタンスでオブジェクトストレージとして R2 を設定する方法を説明します。新規インスタンス と 既存インスタンス の両方に対応します。
セルフホストの Mastodon インスタンスは、複数の方法で構築できます。詳細は 公式ドキュメント ↗ を参照してください。インストール後、Mastodon ドキュメントの Configuring your environment ↗ に進んだら、以降の手順を参照してください。
ファイル用のオブジェクトストレージには、Mastodon インスタンス本体のデフォルトホスト名とは別の、固有のホスト名が必要です。たとえば Mastodon のホスト名を mastodon.example.com にした場合、ファイル公開には mastodon-files.example.com または files.example.com を使えます。mastodon.example.com でインスタンスを開いているとき、投稿に画像や動画などのメディアが付いていると、この手順で決めたホスト名(例: mastodon-files.example.com)からファイルが配信されます。
-
Cloudflare ダッシュボードで R2 object storage ページを開きます。
Overview を開く ↗ -
Create bucket を選びます。
-
バケット名を入力して Create bucket を選びます。この名前は Mastodon インスタンス設定時の内部名であり、公開されません。
-
バケット作成後、このバケットの Settings タブを開き、S3 API の値をコピーします。
-
Settings タブで Connect Domain を選び、手順 1 のホスト名を入力します。
-
R2 の概要ページに戻り、Manage R2 API Tokens を選びます。
-
Create API token を選びます。
-
API 名の横の鉛筆アイコンを選んでトークン名を
Mastodonにし、Edit 権限を付与します。Create API Token を選んでトークン作成を完了します。 -
Access Key ID と Secret Access Key の値をコピーします。
公式の 設定ファイル ↗ に沿って Mastodon インスタンスを設定するとき、File storage セクションを次の内容に置き換えます。
S3_ENABLED=true
S3_ALIAS_HOST={{mastodon-files.example.com}} # Change to the hostname determined in step 1
S3_BUCKET={{your-bucket-name}} # Change to the bucket name set in step 2
S3_ENDPOINT=https://{{unique-id}}.r2.cloudflarestorage.com/ # Change the {{unique-id}} to the part of S3 API retrieved in step 2
AWS_ACCESS_KEY_ID={{your-access-key-id}} # Change to the Access Key ID retrieved in step 2
AWS_SECRET_ACCESS_KEY={{your-secret-access-key}} # Change to the Secret Access Key retrieved in step 2
S3_PROTOCOL=https
S3_PERMISSION=S3_PERMISSION は空のままにします。こうすると、Mastodon は ACL ヘッダーを送りません。R2 は ACL ヘッダーに対応していません。
設定後、インスタンスを起動できます。起動したらメディアをアップロードし、上で設定したホスト名から取得されることを確認します。R2 のバケットページに戻ると、次のような構成が見えます。
すでにインスタンスが動いている場合は、メディアファイルを R2 へ移行し、エグレス料金なし の利点を活かせます。
- (任意)移行ファイル数を減らすには、Mastodon admin CLI ↗ で未使用ファイルを整理できます。
- 上の 新規インスタンスをセットアップする の手順 1 と 2 に沿って、ファイル移行用の R2 バケットを用意します。
- メディアファイルをすべて R2 へ移行します。各種プロバイダーをつなぐ手順は examples を参照してください。メディアをローカルでホストしている場合は、
rcloneでローカルファイルを R2 へアップロードできます。
ファイル移行には時間がかかることがあります。その間に、ファイルパスのリダイレクト設定を用意できます。
メディアをローカルでホストしていた場合は、多くの場合リダイレクトが必要です。ローカルホストのメディアは、デフォルトでは https://mastodon.example.com/cache/... のようなパスになります。R2 バケットを Mastodon インスタンスと併用し始めたあとは、https://mastodon-files.example.com/cache/... のようなパスへリダイレクトする必要があります。すでに別の S3 互換オブジェクトストレージを使っていて、同じホスト名を維持する場合は、リダイレクトは不要です。
一括リダイレクト(Bulk Redirects) は、すべてのプランで使えます。詳細は ダッシュボードで一括リダイレクトを作成する を参照してください。
移行計画に応じて、バケットが公開でアクセスでき、リダイレクトが正しく動くかを確認できます。確認するには、https://mastodon.example.com/cache/... のような既存のアップロード済みメディアを開き、ホスト名を mastodon.example.com から mastodon-files.example.com に置き換えて新しいパスを開きます。ファイルが正しく開けたら、最後の手順へ進みます。
移行中もインスタンスは動いていることがあります。その間に、直接アップロードやほかの連合インスタンスからの取得で、新しいメディアファイルが作られることがあります。新規ファイルだけをアップロードするには、rclone のようなプログラムを使えます。同期プログラムを再実行すると、既存ファイルはすべて、少なくとも Class B 操作 で確認されます。
ファイルの同期が終わったら、新規インスタンスの 手順 3 と同じオブジェクトストレージ設定で、Mastodon インスタンスを再起動します。