はじめに
当方のサイトでは、とある情報を収集するためにMediaWikiを使用しています。
5~6年前から運用していましたが、諸事情によりWikiを入れているVPSのOSをごっそり入れ替えたときにMediaWikiもバージョンアップしたので手順を共有しておきます。
背景
当方のVPS(某さくら)でOSを入れ替えた差分をリストアップすると…
旧環境
- Ubuntu14.04
- Apache2
- PHP 5.3
- MySQL5.X
- MediaWiki 1.22
新環境
- CentOS 7
- nginx + Let's Encrypt(https化済み)
- PHP 7.3(remi経由、PHP-FPM組み込み済み)
- MySQL8.0(mysql_native_password化済み -> 参考)
- MediaWiki 1.33
ほら、だいぶ変わってるでしょう(もともとは、WordPressの新バージョンでPHP5.3が使えなくなり、仕方なくPHP7.3に上げようとしたのが発端です)?
特に、MediaWikiのバージョンアップで、今までのDBの仕様に変更があったり、必要なPHPのバージョンが上がってしまったため、しっかりと手順を踏む必要がありました。
作業手順
MediaWikiのページにバージョンアップ方法が書かれているのでそれを参考にしました。
0.前準備
WikiのソースやDBはバックアップしておいてローカルマシンに保存していましたので、ソースとDBダンプファイルを新環境に転送しておきます。
また、バージョンアップに必要なgit
やwget
も準備しておきます。
1.DBを用意する
まずは、DBをリストアして、Wiki用のユーザを作り、権限を付与します(DB名・ユーザ名は前バージョンを踏襲します)。
mysql -u root -p -e 'create database hogewiki;'
mysql hogewiki -u root -p < hoge.sql
mysql -u root -p -e "create user `hogewikiuser`@`localhost` identified by '****************';"
mysql -u root -p -e "grant all on hogewiki.* to `hogewikiuser`@`localhost`;"
2.MediaWikiの新バージョンをDLする
MediaWikiはGitで管理していますので、MediaWikiの最新コアをCloneします(参考:Git からのダウンロード)。
ついでに、オーナーをnginxにしています(ここらへんは任意)
cd /path/to/nginx/documentroot
git clone https://gerrit.wikimedia.org/r/mediawiki/core.git --branch REL1_33 hogewiki
chown -R nginx:nginx hogewiki
[2019.10.21追記]MediaWikiのtarballをDLすればSkinやExtensionがある程度揃っているそうです(rxyさんありがとうございます)
wget https://releases.wikimedia.org/mediawiki/1.33/mediawiki-1.33.1.tar.gz
tar zxvf mediawiki-1.33.1.tar.gz
mv mediawiki hogewiki
chown -R nginx:nginx hogewiki
3.LocalSettings.phpのコピー
旧バージョンのLocalSettings.php
を新環境にコピーします。
cd hogewiki
cp /path/to/old/wiki/LocalSettings.php .
4.ロゴの差し替え
旧バージョンと新バージョンのロゴファイルを格納するディレクトリが変わっていましたので、新しい場所にコピーして、LocalSettings.php
を修正しておきます。
cp /path/to/old/wiki/skins/common/logo.png ./resources/assets/
$wgLogo = "$wgStylePath/common/images/logo.png";
$wgLogo = "{$wgScriptPath}/resources/assets/logo.png";
5.APC/OPCacheのインストール
MediaWikiの新バージョンでは、キャッシュシステム導入を促されます。そのため、apcu
とopcache
をインストールします(設定値はお好みで)
sudo yum -y install --enablerepo=remi,remi-php73 php-pecl-apc php-opcache
インストールの反映のためにphp-fpmとnginxの再起動を忘れずに…
systemctl restart php-fpm.service
systemctl restart nginx.service
6. パッケージ依存関係解消
Compose
でサクッと解消していきます。
compose --no-dev
7. スキンのインストール
後述の拡張機能でもそうなのですが、DLしたMediaWikiの状態では、まだスキンのファイルが取り込まれていないので手動で取り込みます。
もともと、Wikipediaみたいな見た目になるVectorを使用していましたので引き続き使用します。
wfLoadSkin
関数はバージョン1.25から組み込まれたもののようですね
$wgDefaultSkin = "vector";
wfLoadSkin("Vector");
スキンをDLする際は、使用するMediaWikiのバージョンに合わせたものが必要になります。以下のリンク先から最適なDLリンクを取得します。
cd skins
wget https://extdist.wmflabs.org/dist/skins/Vector-REL1_33-878c1e8.tar.gz
tar zxvf Vector-REL1_33-878c1e8.tar.gz
cd ..
[2019.10.21追記]Gitからでも以下の方法で落とせるそうです(rxyさんありがとうございます)
cd skins
rm -rf Vector # 念の為
git clone "https://gerrit.wikimedia.org/r/mediawiki/skins/Vector" --branch REL1_33
8.拡張機能のインストール
続いて、拡張機能をインストールします。スキンとの違いは、GitでDLできる点が大きいです。
まずはLocalSettings.php
の修正から。wfLoadExtension
関数もバージョン1.25から準備されているようです。
require_once "$IP/extensions/Cite/Cite.php";
require_once "$IP/extensions/ConfirmEdit/ConfirmEdit.php";
require_once "$IP/extensions/Interwiki/Interwiki.php";
require_once "$IP/extensions/Nuke/Nuke.php";
require_once "$IP/extensions/ParserFunctions/ParserFunctions.php";
require_once "$IP/extensions/SimpleAntiSpam/SimpleAntiSpam.php";
require_once "$IP/extensions/SpamBlacklist/SpamBlacklist.php";
require_once "$IP/extensions/SyntaxHighlight_GeSHi/SyntaxHighlight_GeSHi.php";
require_once "$IP/extensions/WikiEditor/WikiEditor.php";
wfLoadExtension( "Cite" );
wfLoadExtension( "ConfirmEdit" );
wfLoadExtension( "Interwiki" );
wfLoadExtension( "Nuke" );
wfLoadExtension( "ParserFunctions" );
wfLoadExtension( "SpamBlacklist" );
wfLoadExtension( "SyntaxHighlight_GeSHi" );
wfLoadExtension( "WikiEditor" );
修正前後を見て、「あれ?」と思われたかたもいらっしゃるかと思いますが、SimpleAntiSpam
が消えています。これは、アンチスパム機能がMediaWikiに統合されたことからObsoluteになったためです。
続いて、拡張機能をDLしていきます。
cd extensions
git clone https://gerrit.wikimedia.org/r/mediawiki/extensions/Cite.git
git clone https://gerrit.wikimedia.org/r/mediawiki/extensions/ConfirmEdit.git
git clone https://gerrit.wikimedia.org/r/mediawiki/extensions/Interwiki.git
git clone https://gerrit.wikimedia.org/r/mediawiki/extensions/Nuke.git
git clone https://gerrit.wikimedia.org/r/mediawiki/extensions/ParserFunctions.git
git clone https://gerrit.wikimedia.org/r/mediawiki/extensions/SpamBlacklist.git
git clone https://gerrit.wikimedia.org/r/mediawiki/extensions/SyntaxHighlight_GeSHi.git
…あれ、WikiEditorは? 実は、WikiEditorをgitで取り込むとバージョン1.34以降必須となってしまうため、1.33用にDLして適応します(今振り返ると、ブランチ指定すりゃよかったんじゃね?)
wget https://extdist.wmflabs.org/dist/extensions/WikiEditor-REL1_33-e051a4b.tar.gz
tar zxvf WikiEditor-REL1_33-e051a4b.tar.gz
cd ..
[2019.10.21追記]branchを指定すれば、Gitからでも対象バージョンのものが落とせるそうです(rxyさんありがとうございます)
cd extensions
git clone https://gerrit.wikimedia.org/r/mediawiki/extensions/Cite.git --branch=REL1_33
git clone https://gerrit.wikimedia.org/r/mediawiki/extensions/ConfirmEdit.git --branch=REL1_33
git clone https://gerrit.wikimedia.org/r/mediawiki/extensions/Interwiki.git --branch=REL1_33
git clone https://gerrit.wikimedia.org/r/mediawiki/extensions/Nuke.git --branch=REL1_33
git clone https://gerrit.wikimedia.org/r/mediawiki/extensions/ParserFunctions.git --branch=REL1_33
git clone https://gerrit.wikimedia.org/r/mediawiki/extensions/SpamBlacklist.git --branch=REL1_33
git clone https://gerrit.wikimedia.org/r/mediawiki/extensions/SyntaxHighlight_GeSHi.git --branch=REL1_33
git clone https://gerrit.wikimedia.org/r/mediawiki/extensions/WikiEditor.git --branch=REL1_33
9.update.phpの実行
最後に、DBのスキーマ更新などの総仕上げを行います。やりかたは非常に単純明快で、
cd maintenance
php update.php
特に問題なければ、DBのマイグレーション処理が画面にログとして出てくれば成功です。
なにか足りなければ、エラーメッセージが出てきますのでその都度対応してください(当方が試したところではこの文書内でカバーしています)。
特にエラーなく終了すればバージョンアップは完了です。
あとは、nginxの設定をして再起動です。
おまけとして、当方のnginxの設定(MediaWikiに特化した部分)を共有します。
location /hogewiki {
index index.php;
autoindex off;
client_max_body_size 5m;
client_body_timeout 60;
try_files $uri $uri/ /hogewiki/index.php?$args;
}
systemctl restart php-fpm.service
systemctl restart nginx.service
ブラウザでWikiの画面が問題なく出てくればクリアです! おめでとうございます!
最後に
作業自体は2時間で済んだのでかなり早いと思います。
逆に手こずったのはnginxの設定だったりします(rewriteの設定がうまいこといかなくていかなくて…結局切ったら動いたという)
キャッシュを導入したので、表示がキビキビしている(ように見える)という嬉しい副作用があり、バージョンアップしてよかったなぁと思います。
この文書がバージョンアップの参考になればということで、このへんで締めたいと思います。