CORDEA blog

Android applications engineer

Docker で MediaWiki を立てる

自分の作っているライブラリで、WikipediaAPI 叩けないよー的な話が来たので
MediaWiki を Docker で立てて検証しようと思ったところ、
これが面倒だったので記録しておきます。

検証用にローカルで立てた手順です。

手順

Docker Hub で引っ張ってこられる MediaWiki はバージョンが古く、バグが残っていたため、最新のものを使用するよう修正しました
mediawiki-docker を clone します

$ git clone https://github.com/wikimedia/mediawiki-docker.git

Dockerfile を修正します
私の場合は以下のように修正しています

diff --git a/Dockerfile b/Dockerfile
index 5a4a8a4..115c32d 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,9 +1,9 @@
-FROM debian:sid
+FROM debian:latest
 MAINTAINER Gabriel Wicke <gwicke@wikimedia.org>
 
 # Waiting in antiticipation for built-time arguments
 # https://github.com/docker/docker/issues/14634
-ENV MEDIAWIKI_VERSION wmf/1.27.0-wmf.9
+ENV MEDIAWIKI_VERSION wmf/1.30.0-wmf.4
 
 # XXX: Consider switching to nginx.
 RUN set -x; \

Pull Request 投げようかとも思いましたが同じような奴が放置されてました...


build します

$ docker build --rm -t mediawiki .


今回は検証のために立てただけなのでパスワードとかも適当です
MySQL 5.7.5 以上だと動かないみたい*1のでご注意ください (もしかしたら修正されている問題かも)

$ docker run -it -d -e MYSQL_ROOT_PASSWORD=pass --name mysql mysql:5.6
$ docker run -it -d -e MEDIAWIKI_RESTBASE_URL="http://localhost/api.php" --name mediawiki --link mysql -p 80:80 mediawiki

これでとりあえずアクセスはできるようになったはず
後は、UI に従ってインストールします

データベースに接続の画面で入力するデータベースのホストは localhost じゃないです

$ docker inspect -f '{{ .NetworkSettings.IPAddress }}' mysql 


インストールが完了すると LocalSettings.php を移せと言われるので移します

$ docker cp ./LocalSettings.php mediawiki:/usr/src/mediawiki/  
$ docker exec -u www-data mediawiki ln -s /usr/src/mediawiki/LocalSettings.php /var/www/html/LocalSettings.php


これでとりあえず動くはず

余談

MediaWiki コンテナを restart しようとすると失敗します
この場合は entrypoint.sh を修正します

$ docker cp mediawiki:/entrypoint.sh ./
diff --git a/entrypoint.sh b/entrypoint.sh
index 37e7d33..40c14b9 100755
--- a/entrypoint.sh
+++ b/entrypoint.sh
@@ -115,7 +115,7 @@ EOPHP
 
 cd /var/www/html
 # FIXME: Keep php files out of the doc root.
-ln -s /usr/src/mediawiki/* .
+ln -sf /usr/src/mediawiki/* .
 
 : ${MEDIAWIKI_SHARED:=/data}
 if [ -d "$MEDIAWIKI_SHARED" ]; then
$ docker cp entrypoint.sh mediawiki:/
$ docker start mediawiki