mastodonの画像とか動画をS3で管理しようと思ったらハマったので解決策を書きます。
ハマりどころ
.env.production
のS3の設定項目のうち、S3_PROTOCOL
だけでなくS3_ENDPOINT
も設定しないと、S3のSSLがうまく働かない。
原因
S3_ENDPOINT
を設定しないと、画像のURLがhttps://${bucket-name}.sp-${region}.amazonaws.com/.....
のようになる。
ところが、S3のSSL鍵はsp-${region}.amazonaws.com
ドメインに対してのものなので、「不正なSSL鍵です」という警告が出て、ブラウザでアクセスできない。
結論
.env.production
に以下のようなオプションを書き加えればよい。
S3_ENABLED=true
S3_BUCKET=${your-bucket-name}
AWS_ACCESS_KEY_ID=...
AWS_SECRET_ACCESS_KEY=...
S3_REGION=${your-bucket-region}
S3_PROTOCOL=https
S3_ENDPOINT=https://s3-${your-bucket-region}.amazonaws.com
感想
.env.production.sample
の書き方がわかりづらいと思った。
備考
他の記事へのコメントで、 S3_PROTOCOL
は設定しなくていいよっていうのがありました。 もしかしたら、S3_PROTOCOL
を指定しなければ全部うまくいくのかもしれません(未確認)。