Mastodonのメディアファイルをminioに移す


前提条件

  • Mastodon、minioが構築されていること

制約事項

  • Mastodon → minio間はローカル接続されていること。

目的

  • Mastodonのメディアファイル(アバター、ヘッダ、添付画像等)をminioに移したい。
  • メディアファイルは、Nginxのリバースプロキシ経由で配信したい。

手順

minio側の準備

1. アクセスキー、シークレットキーを準備する

config.json に記載されている。

以前の記事 の通り構築しているのならば、 /home/minio/config/ 内に存在する。

そうでない場合は、~/.minio/config/ に存在するかも?

config.json
{
        "version": "25",
        "credential": {
                "accessKey": "HOGEHOGEHOGEHOGE",
                "secretKey": "FUGAFUGA123FUGAFUGA123FUGAFUGA123FUGAFUGA123"
        },
        "region": "",
        "browser": "on",

          (以下略)

なお、このファイルを編集することでキーを変更することが可能。
書き換えたらminioの再起動を。

2. 専用のバケット(フォルダのようなもの)を準備する

  1. にて準備したアクセスキー、シークレットキーを用いて minio Browserにログインする。

右下の(+)をクリックし、続けてCreate bucketをクリックする。

Bucket nameは、それっぽい名前をつける。(外に出るので、かっこいい名前をつけよう!)

このBucket nameは、後で使用するので控えておく。

  1. バケットに読み書きできるポリシーを設定する

左のバケット一覧より、対象のバケットを選択し、「・・・」をクリック後、Edit policyをクリック。

Prefixは空白のまま、右のドロップダウンをRead and Writeに変更し、Addをクリック。(×) で閉じる。

Mastodon側の準備

.env.production の編集

S3(Minio)の設定がコメントアウトされた状態なので、これを編集する。

.env.production
# S3 (Minio Config (optional) Please check Minio instance for details)
S3_ENABLED=true
S3_BUCKET=test
AWS_ACCESS_KEY_ID=HOGEHOGEHOGEHOGE
AWS_SECRET_ACCESS_KEY=FUGAFUGA123FUGAFUGA123FUGAFUGA123FUGAFUGA123
#S3_REGION=
S3_PROTOCOL=https
S3_HOSTNAME=mstdn.example
S3_ENDPOINT=http://10.1.1.5/
# S3_SIGNATURE_VERSION=
.env.production オプション 設定値
S3_BUCKET minio上のバケット名
AWS_ACCESS_KEY_ID minioのaccessKey
AWS_SECRET_ACCESS_KEY minioのsecretKey
S3_PROTOCOL Mastodonがサービスを行っているプロトコル(ほとんどの場合 https)
S3_HOSTNAME Mastodonのホスト名
S3_ENDPOINT minioのURL

たとえば上記のように設定すると

  • Mastodonが表示する画像のURL先: https://mstdn.example/test/media_attachments/...
  • Mastodonが画像を転送する先: http://10.1.1.5/

となる。

Nginxの設定追加

test配下へのアクセスを全てminioに回さないといけないので、そのあたりの設定を追加する。

(nginx)mastodon.conf
(前略)

  location ~ ^/test{
    # minio Object Storage
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto https;
    proxy_set_header Proxy "";
    proxy_pass_header Server;

    proxy_pass http://10.1.1.5;
    proxy_buffering off;
    proxy_redirect off;
    proxy_http_version 1.1;

    tcp_nodelay on;
  }

(後略)

既存の画像ファイルの転送

Mastodonの live/public/system 以下のディレクトリを、まるっとそのまま minioのバケットに放り込む。

サービス再起動

Mastodonサーバにて、MastodonおよびNginxサービスを再起動する。

動作確認する

Mastodonにアクセスする。

画像が表示されていること、画像が投稿できることを確認できたら成功。

あとがき

  • 自分用にメモした手順です。必要に応じて読み替えてください。
  • こうしたほうがいいよ的なアドバイスを頂けると大変助かります

以上