概要
会社や同好会などのグループで自分たちの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 の移行は完了です。特に旧バージョンからの移行では、ダンプの互換性やインデックス再構築まわりでハマりやすい点がありますので気をつけてください。


