Mastodon
Mastodon ↗は人気のあるfediverse ↗ソフトウェアです。このガイドでは、自己ホスト型のMastodonインスタンスのオブジェクトストレージとしてR2を設定する方法を説明します。これは新しいインスタンスまたは既存のインスタンスのいずれかに適用されます。
自己ホスト型のMastodonインスタンスは複数の方法でセットアップできます。詳細については公式ドキュメント ↗を参照してください。インストール後、Mastodonドキュメントの環境の設定 ↗ステップに到達したら、次の手順を参照してください。
Mastodonインスタンスのデフォルトのホスト名とは異なり、ファイルのオブジェクトストレージにはユニークなホスト名が必要です。例えば、Mastodonのホスト名をmastodon.example.comに設定した場合、ファイルにアクセスするためにmastodon-files.example.comまたはfiles.example.comを使用できます。これは、mastodon.example.comでインスタンスを訪問する際、画像や動画などのメディアが投稿に添付されている場合、そのファイルはこのステップで決定されたホスト名、例えばmastodon-files.example.comの下で提供されることを意味します。
- Cloudflareダッシュボード ↗にログインします。
- アカウントホームからR2を選択します。
- R2からバケットを作成を選択します。
- バケット名を入力し、バケットを作成を選択します。この名前はMastodonインスタンスの設定時に内部的に使用され、公開されることはありません。
- バケットが作成されたら、このバケットの設定タブに移動し、S3 APIの値をコピーします。
- 設定タブからドメインを接続を選択し、ステップ1のホスト名を入力します。
- R2の概要ページに戻り、R2 APIトークンを管理を選択します。
- APIトークンを作成を選択します。
- API名の横にある鉛筆アイコンを選択してトークン名を
Mastodonに変更し、編集権限を付与します。APIトークンを作成を選択してトークン作成を完了します。 - アクセスキーIDとシークレットアクセスキーの値をコピーします。
公式の設定ファイル ↗に基づいてMastodonインスタンスを設定する際、ファイルストレージセクションを以下の詳細に置き換えます。
S3_ENABLED=trueS3_ALIAS_HOST={{mastodon-files.example.com}} # ステップ1で決定されたホスト名に変更S3_BUCKET={{your-bucket-name}} # ステップ2で設定したバケット名に変更S3_ENDPOINT=https://{{unique-id}}.r2.cloudflarestorage.com/ # ステップ2で取得したS3 APIの一部に{{unique-id}}を変更AWS_ACCESS_KEY_ID={{your-access-key-id}} # ステップ2で取得したアクセスキーIDに変更AWS_SECRET_ACCESS_KEY={{your-secret-access-key}} # ステップ2で取得したシークレットアクセスキーに変更S3_PROTOCOL=httpsS3_PERMISSION=private設定後、インスタンスを実行できます。インスタンスが稼働したら、メディア添付ファイルをアップロードし、上記で設定したホスト名から添付ファイルが取得されることを確認します。R2のバケットページに戻ると、以下の構造が表示されるはずです。

すでにインスタンスが稼働している場合、メディアファイルをR2に移行し、出口コストなしの恩恵を受けることができます。
- (オプション) 移行するファイルの数を最小限に抑えるために、Mastodon管理CLI ↗を使用して未使用のファイルをクリーンアップできます。
- 上記の新しいインスタンスのセットアップセクションのステップ1と2に従って、ファイル移行のためのR2バケットを準備します。
- すべてのメディアファイルをR2に移行します。さまざまなプロバイダーを接続するための例を参照してください。これらのメディアファイルをローカルでホストしている場合は、
rcloneを使用してこれらのローカルファイルをR2にアップロードできます。
ファイル移行が進行中で、時間がかかる場合がありますが、ファイルパスのリダイレクト設定を準備できます。
ローカルでメディアファイルをホストしていた場合、リダイレクトを設定する必要があるでしょう。デフォルトでは、ローカルでホストされているメディアファイルはhttps://mastodon.example.com/cache/...のようなパスを持ち、R2バケットがMastodonインスタンスと一緒に稼働するようになった後は、https://mastodon-files.example.com/cache/...のようなパスにリダイレクトする必要があります。別のS3互換オブジェクトストレージサービスをすでに使用していて、同じホスト名を維持したい場合は、リダイレクトを設定する必要はありません。
バルクリダイレクトはすべてのプランで利用可能です。詳細についてはダッシュボードでのバルクリダイレクトの作成を参照してください。

移行計画に応じて、バケットが公開にアクセス可能かどうか、リダイレクトが正しく機能しているかを確認できます。確認するには、https://mastodon.example.com/cache/...のようなパスを持つ既存のアップロードされたメディアファイルを開き、ホスト名をmastodon.example.comからmastodon-files.example.comに置き換えて新しいパスを訪問します。ファイルが正しく開けた場合は、最終ステップに進んでください。
移行中にインスタンスがまだ稼働している場合、移行中に新しいメディアファイルが直接アップロードされたり、他の連携インスタンスから取得されたりする可能性があります。新しく作成されたファイルのみをアップロードするには、rcloneのようなプログラムを使用できます。同期プログラムを再実行する際は、すべての既存ファイルが少なくともクラスB操作を使用してチェックされることに注意してください。
すべてのファイルが同期されたら、ステップ3で述べた新しいオブジェクトストレージ設定でMastodonインスタンスを再起動できます。