ローカルネットワークで wiki を運用してるんだけど、Docker 上に移行すべく、今日はそのテスト。
環境
- Ubuntu 20.04
- Docker 19.03.8
- docker-compose 1.25.0
Dockerイメージ
MediaWiki も MariaDB も Docker Hub に公式イメージが有るのでそれを使わせてもらう。データベースは、はじめは MySQL を試したんだけどうまく動かなかった(原因不明)ので MariaDB に変えた。
- mediawiki:1.35.0
- mariadb:10.5.6-focal
ディレクトリ構成とファイル
用意した構成はこんなの:
takatoh@apostrophe:testwiki$ tree . . ├── docker-compose.yml ├── mysql │ └── db └── wiki └── images
docker-compose.yml はこう:
version: '3' services: testwiki: container_name: testwiki image: mediawiki:1.35.0 restart: always ports: - 8888:80 volumes: - ./wiki/images:/var/www/html/images # - ./wiki/LocalSettings.php:/var/www/html/LocalSettings.php mysql: container_name: db image: mariadb:10.5.6-focal restart: always environment: MYSQL_ROOT_PASSWORD: rootpasswd MYSQL_DATABASE: testwiki MYSQL_USER: mysqluser MYSQL_PASSWORD: mypassword ports: - 3306:3306 volumes: - ./mysql/db:/var/lib/mysql
コメントアウトしてある行は MediaWiki の設定ファイル。これはインストールが済んでから使う。
コンテナの起動とMediaWikiのインストール
docker-compose
コマンドでコンテナを起動する。
takatoh@apostrophe:testwiki$ docker-compose up -d
ブラウザで http://localhost:8888/ にアクセスして MediaWiki のインストール(というかセットアップというか)をする。その際、データベース関係は docker-compose.yml の記述に合わせる。
- データベースのホスト:db
- データベース名:testwiki
- インストールで使用する利用者アカウント→データベースのユーザ名:mysqluser
- インストールで使用する利用者アカウント→データベースのパスワード:mypassword
その他はそれなりに設定すればいい。最後に LocalSettings.php ファイル(設定ファイル)をダウンロードしてインストールは終わり。
設定の反映
いったんコンテナを止める。
takatoh@apostrophe:testwiki$ docker-compose down
ダウンロードした設定ファイルを配置。
takatoh@apostrophe:testwiki$ cp ~/Downloads/LocalSettings.php wiki
docker-compose.yml のコメントをはずす(該当行だけ示す)。
- ./wiki/LocalSettings.php:/var/www/html/LocalSettings.php
コンテナを再起動。
takatoh@apostrophe:testwiki$ docker-compose up -d
これで無事起動した。
参考にしたページ
[追記:2020/11/5] データベースの移行
旧い wiki からデータを移行する手順。
- データは wiki.sql ファイルにダンプしてあるものとする
- 旧いほうの MediaWiki のバージョンは 1.27.1
wiki.sql ファイルを Docker コンテナと共有しているディレクトリにコピーする。
takatoh@apostrophe:testwiki$ cp wiki.sql ./mysql/db
./mysql/db ディレクトリは、データベースの Docker コンテナ(コンテナ名は db)からは /var/lib/mysql として認識されている(前述の docker-compose.yml ファイルを参照)。なのでデータベースのコンテナに接続して、データを流し込む。
takatoh@apostrophe:testwiki$ docker exec -it db bash root@007d71dfcb37:/# cd /var/lib/mysql root@007d71dfcb37:/var/lib/mysql# ls *.sql wiki.sql root@007d71dfcb37:/var/lib/mysql# mysql -u mysqluser -p testwiki < wiki.sql Enter password: root@007d71dfcb37:/var/lib/mysql# exit exit
これでデータベース側での作業は終了。ただ、このままだと MediaWiki でエラーになる。バージョンが上がっているので MediaWiki の使用するデータベーススキーマとかも変わっているからだ。
そこで、MediaWiki のコンテナに接続して更新スクリプトを実行する。更新スクリプトは /var/www/html/maintenance/update.php だ。
takatoh@apostrophe:testwiki$ docker exec -it testwiki bash root@f92dd50471e5:/var/www/html# cd maintenance root@f92dd50471e5:/var/www/html/maintenance# php update.php
これで完了。
[追記]
11/7、本番環境も無事 Docker 上に移行した。