老朽化サーバからのMediaWiki移行で ハマったポイントと手順まとめ

サーバー

概要

会社や同好会などのグループで自分たちのWikiを作ることってありますよね。個人の知識がどんどん積み重なっていくので、まさに「集合知の塊」といった感じで便利です。弊社では社内Wikiとして MediaWiki を使用しています。

昨年度2025年に社内Wikiが動作しているサーバがOSの脆弱性、物理的な機材の老朽化等の問題から、新サーバへ移行しました。
旧MediaWikiのバージョンがかなり古く、移行作業でいくつかつまずいた箇所があったため、その際に行った手順を備忘録として公開します。

環境

旧サーバ MediaWiki バージョン 1.16
新サーバ MediaWiki バージョン 1.43
新サーバOS AlmaLinux release 9.6
新サーバApacheバージョン 2.4.62
新サーバPHPバージョン 8.4.14
新サーバmysqlバージョン 8.4.7
パス(DocumentRoot) /home/mediawiki/public_html

移行手順

前提条件として、最初の想定としてはドキュメントルートをそのままコピーし、MegaWikiのデータ移行機能で変換を行い、表示させようとしていましたが、バージョンがあまりにも違いすぎたため、ディレクトリ構成等が新バージョンにうまく対応せず、正しく表示出来ませんでした。
ここは大人しく旧環境にてXMLでダンプを取得し、新環境のMediaWiki側でインポートする際によしなに変換してもらうことにしました。

新サーバに空の MediaWiki 1.43 を用意する

新サーバに MediaWiki 1.43 をインストールし、ファイルアップロード、Elasticsearch、CirrusSearch が使用できる状態にしておきます。

Elasticsearch設定調整

Elasticsearch の JVM メモリをあらかじめ調整します。これは後にwiki検索を使用する際に必要になります。

# /etc/elasticsearch/jvm.options
-Xms2g
-Xmx2g

旧サーバでダンプを取得し新サーバへコピー

旧サーバにて Wiki データを XML 形式でダンプします。
取得後、ダンプファイルと images、htmlets フォルダを新サーバへ転送します。

# XML ダンプ取得(旧サーバで実行)
php /home/mediawiki/public_html/maintenance/dumpBackup.php --full > mediawiki_dump.xml
 
# 以下フォルダを新サーバへコピー
/home/mediawiki/public_html/images
/home/mediawiki/public_html/htmlets

新サーバへデータをインポート

新サーバにて XML ダンプと画像をインポートします。インポート後は Apache と mediawiki グループにパーミッションを付与します。

# XML ダンプのインポート
php importDump.php < /任意のフォルダ/mediawiki_dump.xml
 
# 画像のインポート
php maintenance/run.php importImages /任意のフォルダ/images
 
# オーナー変更
chown -R apache:mediawiki /home/mediawiki/public_html/images

検索インデックスの再構築(CirrusSearch)

CirrusSearch のインデックスを再構築して検索機能を有効化します。

php extensions/CirrusSearch/maintenance/UpdateSearchIndexConfig.php
php extensions/CirrusSearch/maintenance/ForceSearchIndex.php --skipLinks --indexOnSkip
php extensions/CirrusSearch/maintenance/ForceSearchIndex.php --skipParse
php maintenance/run.php runJobs.php
php maintenance/rebuildall.php
php maintenance/refreshLinks.php
php maintenance/updateSearchIndex.php

ジョブキューランナーをサービスとして登録

この時点で、Wiki は閲覧できる状態ですが、記事を更新しても検索結果に反映されない問題が残っています。
旧バージョンではページのテキスト内容から直接検索キーワードを抽出できましたが、新バージョンではこの方式に対応していないため、検索インデックスの更新を非同期のジョブキューで処理する必要があります。
そこで、検索結果が継続的かつ自動的に更新されるよう、MediaWiki のジョブキューを常駐サービスとして設定します。

実行スクリプトの作成

# /usr/local/bin/mwjobrunner
#!/bin/bash
MW_INSTALL_PATH="/home/mediawiki/public_html"
RUN_JOBS="$MW_INSTALL_PATH/maintenance/runJobs.php --maxtime=3600"
 
echo Starting job service...
sleep 60
echo Started.
 
while true; do
	php $RUN_JOBS --type="enotifNotify"
	php $RUN_JOBS --wait --maxjobs=20
	echo Waiting for 10 seconds...
	sleep 10
done

systemd サービスユニットの作成

# /etc/systemd/system/mw-jobqueue.service
[Unit]
Description=MediaWiki Job runner
 
[Service]
ExecStart=/usr/local/bin/mwjobrunner
Nice=10
ProtectSystem=full
User=php-fpm
OOMScoreAdjust=200
StandardOutput=journal
 
[Install]
WantedBy=multi-user.target

サービスの有効化

chmod 755 /usr/local/bin/mwjobrunner
systemctl daemon-reload
systemctl enable mw-jobqueue
systemctl start mw-jobqueue
systemctl status mw-jobqueue

まとめ

以上の手順で MediaWiki の移行は完了です。特に旧バージョンからの移行では、ダンプの互換性やインデックス再構築まわりでハマりやすい点がありますので気をつけてください。

参考ページ:
https://blog.r9g.net/archives/366