Posted at

WordPress公式のDockerイメージでテーマがアップロードできない

DockerでWordPressの公式イメージを使用した時に、テーマファイルの容量が大きくてアップロードできない時の対処法です。


今回の構成

まずは問題が起きたサーバの構成です。

WordPressの前段にリバースプロキシとしてjwilder/nginx-proxyを使用しました。他にもサービスを動かしているので、このプロキシで各コンテナに振り分けています。

結論から言うと、WordPress公式イメージのPHPとnginx-proxyのアップロード許容容量が小さかったのが原因です。


エラー内容

ダッシュボードよりテーマファイル(.zip)をアップロードしようとすると 413 Request Entity Too Large というnginxのエラーが表示されました。

このエラーは、クライアントから送信されるリクエストサイズが許容量を超えた時に表示されるエラーです。


nginxの設定を変更する

jwilder/nginx-proxyでは nginx.conf を直接編集できないので、ホストから別の設定ファイルをマウントします。

ホストの任意の場所に設定ファイルを作成します。

今回は、 ./conf.d/max-size.conf とし、 10MB に設定しました。


max-size.conf

client_max_body_size 10M; #この1行のみ



docker-compose.yml

version: "2"

services:
proxy:
image: jwilder/nginx-proxy
container_name: proxy
ports:
- "80:80"
- "443:443"
volumes:
- /var/run/docker.sock:/tmp/docker.sock:ro
- ./certs:/etc/nginx/certs:ro
- ./conf.d:/etc/nginx/conf.d #環境に応じて変更
restart: always

nginx-proxyの docker-compose.yml があるディレクトリに移動して、再起動します。

$ docker-compose down

$ docker-compose up -d


PHPの設定を変更する

nginx側の容量を上げたので先程のエラーはでなくなったのですが、WordPress側で「アップロードしたファイルはphp.iniで定義されたupload_max_filesizeを超過しています。」というエラーが表示されました。

これはPHP側の設定なので、WordPressのコンテナの設定を変更します。

WordPress公式のDockerイメージだと、 /usr/local/etc/php/conf.d に設定ファイルのディレクトリがありました。

nginxと同様このディレクトリにホストから設定ファイルをマウントします。

今回は、 ./conf.d/uploads.ini とし、 10MB に設定しました。


uploads.ini

upload_max_filesize = 100M; #この1行のみ



docker-compose.yml

version: "2"

services:
wordpress:
image: wordpress
restart: always
volumes:
- ./wp-content:/var/www/html/wp-content
- ./conf.d/uploads.ini:/usr/local/etc/php/conf.d/uploads.ini

WordPressの docker-compose.yml があるディレクトリに移動して、再起動します。

$ docker-compoe down

$ docker-compose up -d

以上、設定ファイルの値を変えることでアップロードできるようになります。

このように公式イメージだと設定ファイルの場所が違ったりなど、微妙に扱いにくかったりするので注意です。