ローカルではうまくいくのに、dokkuでアプリ展開した時ファイルアップロード失敗する現象が発生します。デフォルトのnginxの最大アップロードサイズ小さくてエラーになるのですが、サーバーログに何も出ず、クライアント側でエラーになるので原因掴むのに苦労します。
という事で、dokkuでファイルアップロードに失敗する人のためのドキュメントです。
バージョン
- dokku 0.34
※ どの辺からこの方法でできるかは不明です...
背景
dokkuのデフォルトは、各アプリケーションのnginx.confにclient_max_body_size 1mとテンプレートで設定されており、1MB以上のファイルをアップロードしようとすると失敗します。また、設定ファイルを書き換えても設定変更などのタイミングで上書きされる場合があります。
↓これが設定です。
...
client_max_body_size 1m;
...
正しい方法
-
nginx:setでclient-max-body-sizeを設定します。 -
proxy:build-configで再構築します。
dokku nginx:set $APP client-max-body-size 50m
dokku proxy:build-config # 再構築
その他のnginxの設定可能なパラメータは以下になります。
-
--globalは設定できない様なのでアプケーション毎に設定する必要があります。
dokku公式(間違い)
そもそも「dokku client_max_body_size」で検索すると古い(v0.10)のドキュメントが出てきます。
この通りにupload.confを作成するとclient_max_body_sizeがすでに定義済みですというエラーが出てnginxが動きませんのでご注意ください。
ぶつぶつ
そのそもdokkuはインデックスに古いバージョンが残ったままになっていて、検索で正しいドキュメントに辿り着けないのが困りますよね...。
