TOC
MediaWikiとは(ざっくり)
おそらくみなさんご存知のWikipediaを構築するために開発されているwikiエンジンで、プログラミング言語としてはPHP、ライセンスはGPLv2+で公開されています。
目的がWikipediaを構築するために開発されているというあたり、フェラーリがF1をやるために車を売っているというのと同じパターンに見えます。
デプロイ環境・運用指針
今回MediaWikiを構築する環境は以下の通りです。
- Raspberry Pi 4(RAM8GB) いつも使っている環境です
- Ubuntu 22.04 LTS いつも使っている環境です
- rootless docker
- docker-compose
rootless dockerについては弊blogの以下のエントリを踏襲します。
Dockerをrootlessに変更してrootユーザーの呪縛から開放される
また、運用については以下のポリシーとします。
- 標準機能からはみ出すもの(プラグイン)は使わない。実現したい場合は別のサービスを追加して使う→実質的にDockerコンテナのファイルを変更すると自分でその部分をメンテナンスしないといけない、将来的なバージョンアップにプラグインが追随しないことが多々あるため
- オフィシャルのDockerイメージを使う
- DBはMariaDBを使う
MediaWikiのバージョン
MediaWikiは活発に機能拡張が行われているとともに、メンテナンスも頻繁に行われているので、極力安定版(長くメンテナンスされているバージョン)を使いたいところです。
MediaWikiはリリースから1年間がメンテナンス期間、4回に1回はLTSリリースとしてメンテナンス期間が3年になるようです。
どのバージョンが良いかというと、2022年8月時点でリリースされているLTSは1.35で来年の9月まではサポートが続きます。ただし、11月には次のLTSとなる1.39がリリースされる予定なので、その頃にインストールするなら1.39を使うのが良いでしょう。
MediaWikiのDockerイメージ
mediawiki - Official Image | Docker Hub
MediaWikiのDockerイメージは以下のバージョンが用意されています
- latest
- stable
- lts
- legacy
- legacylts
- 1.38
- 1.37
- 1.35
このうち、latest
とstable
は1.38、legacy
は1.37、lts
とlegacylts
は1.35に対応しているようです。
また、それぞれのバージョンにfpm
の有無とfpm
の場合はalpine
の有無があります。fpmはFastCGIのPHP実装なので、phpプロセスをリクエストのたびに生成せずに使いまわすことで性能を重視する場合は選択すると良いと思います。今回は実行リソース節約のため、fpmのついていないものを使います。alpineはベースにAlpine Linuxを使っているため、イメージサイズがコンパクトになっているという特徴があります。MediaWiki自体の開発に使うのでなければ実行自体には問題はないと思いますが、今回はfpmを使わないので必然的にltsを使います。
対応アーキテクチャはamd64
arm32v5
arm32v6
arm32v7
arm64v8
i386
ppc64le
があるので大抵のDocker環境で実行可能でしょう。今回はRPi4で動かすのでarm64v8が選ばれます。
docker-compose.ymlは初回起動後に変更する
MediaWikiをセットアップしたことがある人には周知の事実ですが、MediaWikiは初回起動時に初期設定が必要で、これが終わるとphpファイル(LocalSettings.php
)を吐き出します。2回目の起動以降は吐き出したphpファイルを読み込んでMediaWikiを実行します。
DockerでMediaWikiをやるとコンテナ外で管理するべきファイルが2回目以降に必要(外に出さないとコンテナの破棄でファイルが消えてしまう)で、外部ボリュームとして定義する必要があるので、docker-compose.yml
は初回起動時と2回目移行起動時で分ける必要があります。
docker-compose.yml(初回)
基本的にはオフィシャルに書かれているサンプルに倣って、必要なところを変更します。
初回起動時のdocker-compose.ymlは以下。
# MediaWiki with MariaDB
#
# Access via "http://localhost:8080"
# (or "http://$(docker-machine ip):8080" if using docker-machine)
version: '3'
services:
mediawiki:
image: mediawiki:lts
restart: always
ports:
- 18080:80
links:
- database
volumes:
- /mnt/usbhdd1/var/mediawiki-docker-images/images:/var/www/html/images
# This key also defines the name of the database host used during setup instead of the default "localhost"
database:
image: mariadb
restart: always
environment:
# @see https://phabricator.wikimedia.org/source/mediawiki/browse/master/includes/DefaultSettings.php
MYSQL_DATABASE: my_wiki
MYSQL_USER: wikiuser
MYSQL_PASSWORD: example
MYSQL_RANDOM_ROOT_PASSWORD: 'yes'
volumes:
- /mnt/usbhdd1/var/mediawiki-docker-db/db:/var/lib/mysql
変更しているのは以下の通り
- 使用イメージを
mediawiki
からmediawiki:lts
に変更(services - mediawiki - images) - 待受ポートを
8080
から18080
に変更(services - mediawiki - ports) - volumesのローカル側のパスをフルパスに変更
images
から/mnt/usbhdd1/var/mediawiki-docker-images/images
に変更(services - mediawiki - volumes)db
から/mnt/usbhdd1/var/mediawiki-docker-db/db
に変更(services - database - volumes)
docker-compose.yml(セットアップ完了後)
# MediaWiki with MariaDB
#
# Access via "http://localhost:8080"
# (or "http://$(docker-machine ip):8080" if using docker-machine)
version: '3'
services:
mediawiki:
image: mediawiki:lts
restart: always
ports:
- 18080:80
links:
- database
volumes:
- /mnt/usbhdd1/var/mediawiki-docker-images/images:/var/www/html/images
- /mnt/usbhdd1/var/mediawiki-docker-LocalSettingsPhp/LocalSettings.php:/var/www/html/LocalSettings.php
# This key also defines the name of the database host used during setup instead of the default "localhost"
database:
image: mariadb
restart: always
environment:
# @see https://phabricator.wikimedia.org/source/mediawiki/browse/master/includes/DefaultSettings.php
MYSQL_DATABASE: my_wiki
MYSQL_USER: wikiuser
MYSQL_PASSWORD: example
MYSQL_RANDOM_ROOT_PASSWORD: 'yes'
volumes:
- /mnt/usbhdd1/var/mediawiki-docker-db/db:/var/lib/mysql
初回分から追加しているのは以下の通り
/mnt/usbhdd1/var/mediawiki-docker-LocalSettingsPhp/LocalSettings.php:/var/www/html/LocalSettings.php
を追加(services - mediawiki-volumes)
MediaWikiのインストール
volumesに書いたディレクトリを作成する(rootless docker用)
今回もrootless dockerを使用するので、docker-composeに書いたvolumes用のディレクトリを謎のオーナーで作成します。
# mkdir /mnt/usbhdd1/var/mediawiki-docker-{images,db}
# chown 166535:166535 /mnt/usbhdd1/var/mediawiki-docker-{images,db}
# ls -ld /mnt/usbhdd1/var/mediawiki-docker-{images,db}
drwxr-xr-x 1 166535 166535 0 8月 30 20:34 /mnt/usbhdd1/var/mediawiki-docker-db
drwxr-xr-x 1 166535 166535 0 8月 30 20:34 /mnt/usbhdd1/var/mediawiki-docker-images
docker-compose.ymlを配置する
いつも通り一般ユーザーの任意のディレクトリにdocker-compose.ymlを格納するディレクトリを作成して移動します。
$ mkdircd docker-mediawiki
mkdircdはmkdirした後にそのディレクトリに移動するエイリアスです。
【小ネタ】mkdirした後にそのディレクトリにcdするエイリアスを作る
まず、ここに初回用のdocker-compose.ymlを作成します。(省略)
docker-compose実行(1回目)
docker-compose.ymlを作成したディレクトリで1回目のdocker-compose up -d
をします。
$ docker-compose up -d
コンソールが戻ってきたら、ブラウザからMediaWikiを開きます。
セットアップ実行
「set up the wiki」のリンクをクリックします。
ここから初期設定をしますが、必要なところだけ設定します。画像内の右上の設定ページがあります。
データベースの設定はdocker-compose.yml
に記載した内容で設定する必要があります。
- データベースのホストは
database
(services - databaseのdatabase) - データベース名は
my_wiki
(services - database - environmentのMYSQL_DATABASEのmy_wiki) - データベースのユーザー名は
wikiuser
(services - database - environmentのMYSQL_USERのwikiuser) - データベースのパスワードは
example
(services - database - environmentのMYSQL_PASSWORDのexample)
この後、データベースの設定としてウェブアクセスのためのデータベースアカウントの設定がありますが、「インストール作業と同じアカウントを使用する」にチェックを付けたまま進みます。
全部終わるとこの画面になるので続行します。
ここで生成されたLocalSettings.php
のダウンロード画面になるので、自動でダウンロードが始まらない場合はリンクをクリックしてダウンロードします。
docker-compose終了
docker-compose.yml
のあるディレクトリで以下のコマンドを実行します。
$ docker-compose down
ダウンロードした LocalSettings.php を /var/www/html/LocalSettings.php に対応するパスに移動する
MediaWikiのセットアップの最後にダウンロードしたLocalSettings.php
をdocker-compose.ymlで指定したvolumeのパスに移動します。
私の場合rootless dockerを使っているので、例によってファイルとディレクトリのオーナーを謎の数値に設定しています。
# mkdir /mnt/usbhdd1/var/mediawiki-docker-LocalSettingsPhp
# mv LocalSettings.php /mnt/usbhdd1/var/mediawiki-docker-LocalSettingsPhp/
# chown -R 166535:166535 /mnt/usbhdd1/var/mediawiki-docker-LocalSettingsPhp/
docker-compose.ymlを変更する
前記したようにdocker-compose.ymlを変更します。(省略)
docker-compose実行(2回目)→作業終了
改めてdocker-compose.ymlを変更したディレクトリでdocker-compose up -d
をします。コマンドは1回目と同じです。
ターミナルが返ってきたら、もう一度ブラウザでMediaWikiを開きます。
無事にMediaWikiが起動しました。あとはこのWikiを好きな様に編集していきます。
スポンサーリンク
comments powered by Disqus