2017-04-18 / @syui

heorku

Heroku+Mastodon

Herokuはストレージを持ちませんので、アプリが終了するとサーバーに保存した画像などが削除されてしまいます。

そのためMastodonではAWS S3をストレージとして使用する方法が推奨されていますが、個人利用の場合、AWSを使いたくありません。

よって、とりあえずCloudFlareのPage Rulesで対応してみました。自分のアバターのみですが。

こんな感じで設定していきます。

Forwarding URL : /system/accounts/avatars/paht/to/icon.png?XXXXXX https://gitlab.com/uploads/user/avatar/

Mastodonはユーザーアイコンなどのアバター画像はインスタンスサーバーに保存されます。つまり、私で言うところのHerokuストレージ上です。なので、タイムラインとか色々表示されなかったりするわけですが、一旦読み込めば表示されるようになるのでそれほど不便はありません。あとは、フォローしてくれる人用に、自分のアイコンだけを確実にリダイレクトなどしておけば良さそうな気がします。

これでうまくいくかどうかしばらく見てみようかなと思ってます。駄目というのは、他インスタンスサーバーがどのように画像をダウンロードしているかの処理に関係していて、リダイレクト先をダウンロードしてくれるのかどうか分かりません。駄目なら他の方法を考えます。

一応、表示の確認はできました。Herokuのサーバーの画像は空であるにも関わらず表示されているようです。あと、他のインスタンスサーバーで確認してみたところでも一応はダウンロードされている感じではあります(このあたりの確認の信頼性はあまりないけど)。

ちなみにサーバー側(Heroku側)の設定によっても対応できそうでした。

https://devcenter.heroku.com/articles/custom-php-settings#using-htaccess

具体的には、アプリルートにapache_app.confを作成し、Procfileweb: vendor/bin/heroku-php-apache2 -C apache_app.confを記述。これによってApacheの設定ファイルを指定してサーバーを起動し、.htaccessを使えるようにできるみたいな感じなのではないかと思います。

.htaccessを有効にすれば画像リダイレクトなどが可能。

RewriteRule /system/accounts/avatars/paht/to/icon.png https://example.com/images/$1 [R=301,L]

CloudFlareのPage Rulesは無料枠3つまでなので、何か追加したい場合、こっちの方法も試してみるかも(今のところ必要ないけど)。

しかし、上記はあくまで自分のアバターを表示する方法(他のインスタンス含め)、Mastodonは他のユーザーアイコンもストレージにダウンロードして表示するため、古いユーザーのアイコンが表示されなくなる問題があります。