公式の Docker イメージを使って立てた MediaWiki だけど、ファイルをアップロードするにはやっぱりひと手間必要だった。なので、そのメモ。
MediaWiki にはファイルをアップロードする機能があるけど、デフォルトでは無効になっている。有効にするには MediaWiki と PHP 自体の設定ファイルを修正する必要がある。
- LocalSettings.php – MediaWiki の設定ファイル
- php.ini – PHP 自体の設定ファイル
どこをどう修正すればいいかはマニュアルに書いてある。
LocalSettings.php
LocalSettings.php ファイルは、MediaWiki をセットアップしたときにホストにダウンロードして、Docker コンテナには volume としてマウントしてあるので、ホスト側のファイルを編集すればいい。
$wgEnableUploads = true;
$wgEnableUploads
に true
を設定。
php.ini
で、問題はこっち。php.ini ファイルは MediaWiki の公式 Docker イメージに含まれてるものをそのまま使ったので、ホスト側にはない。なので、まずはコンテナの中で編集して、動作が変わるかどうか確認することにした。
takatoh@wplj $ docker exec -it wiki bash
root@bd8268684983:/var/www/html# php -i | grep php.ini
Configuration File (php.ini) Path => /usr/local/etc/php
php.ini ファイルの場所は php -i
コマンドで確認できる(と MediaWiki のマニュアルに書いてある)。このコマンドの出力は結構な量を吐くので grep
で php.ini にヒットする行だけ抜き出した。ともあれ、/usr/local/etc/php にあることがわかった。
ところが、そこに php.ini ファイルはなかった。
root@bd8268684983:/var/www/html# cd /usr/local/etc/php
root@bd8268684983:/usr/local/etc/php# ls
conf.d php.ini-development php.ini-production
そういうものなのかと疑問に思いながらも、ひとまずは php.ini-production ファイルの中身を見てみようとしても less
コマンドがない。
root@bd8268684983:/usr/local/etc/php# less php.ini-production
bash: less: command not found
当然のように vim
もない。cat
はあったので中身は見れたけど編集はできない。
といわけで、方針を変更してファイルをホスト側にコピーして編集し、LocalSettings.php ファイルと同様にコンテナにマウントすることにした。ファイルをホスト側にコピーするのは次の通り:
takatoh@wplj $ docker exec -it wiki cat /usr/local/etc/php/php.ini-production > php.ini
cat
コマンドをコンテナ側で実行して、ホスト側の php.ini ファイルへリダイレクトしている。
で、その php.ini ファイルを編集。3行続けて載せたけど、ファイル中では別々のところにある。
file_uploads = On
post_max_size = 16M
upload_max_filesize = 8M
file_uploads
は元から On
になってた。post_max_size
と upload_max_filesize
はそれぞれ 8M
、2M
だったのを大きくした。
docker-compose.yml
編集した php.ini ファイルを LocalSettings.php ファイルと同じディレクトリに配置したら、コンテナにマウントすべく docker-compose.yml を修正。
wiki:
image: mediawiki:1.35.0
container_name: wiki
restart: always
depends_on:
- mysql
volumes:
- /home/takatoh/var/wiki/images:/var/www/html/images
- /home/takatoh/var/wiki/LocalSettings.php:/var/www/html/LocalSettings.php
- /home/takatoh/var/wiki/php.ini:/usr/local/etc/php/php.ini
ports:
- 9090:80
これでOK。
最後にコンテナを起動しなおしたら、無事、ファイルをアップロードできるようになった。