October 25, 2018

MediaWiki を Push to Deploy

Wikiシステムを探してたけど結局MediaWikiが一番良さそう。最低でもgitとcomposer使ってないと選択肢にも入らない。

DokuWikiやPukiWikiはデータベース不要を売りにしてるけど逆に使いにくい。レンタルサーバーにFTPでアップしてた頃ならならともかくPush to Deployが当たり前な時代には辛い。遥か昔はPukiWiki使ってた記憶がある。アプリのヘルプページにはWikiがちょうどいい。

環境

  • AWS。EC2+RDS+S3
  • MediaWiki 1.31.1時点
  • Forge。https://forge.laravel.com/ LaravelやWordPressと全く同じように管理・運用できるようにするのが目的。
  • Ubuntu/PHP7.2/nginx/memcached

ローカルで動かす

参考ページ:https://www.mediawiki.org/wiki/Download_from_Git/ja

git clone https://github.com/wikimedia/mediawiki.git mediawiki

全部クローンするとかなりのサイズなので--branch--depth=1付けて減らしたほうがいいかもしれない。

ここで自分用の別ブランチを作っておく。

cd mediawiki
git submodule update --init

サブモジュールはちょっと分かりにくいので削除して通常通りに扱ってもいいかもしれない。composerのvendorは削除した。普通にcomposer install/update。

ローカルサーバーはいつものHomestead。Homestead.yamlのpublicを削除。ドキュメントルート直下にindex.phpがある。

sites:
    -
        map: mediawiki.test
        to: /home/vagrant/code

この時点では設定ファイルはないのでまずサーバーを起動してブラウザで表示。基本的な設定を行い最後にLocalSettings.phpがダウンロードされる。LocalSettings.phpはドキュメントルートに置く。このLocalSettings.phpはローカル用。gitには含めない。本番用のLocalSettings.phpは後で再度設定して生成。
https://www.mediawiki.org/wiki/Manual:Configuring_MediaWiki/ja

動作確認できたらローカルでの作業は終わり。カスタマイズする箇所はほとんどないので拡張機能の追加やバージョンアップ時以外はローカルでの作業はたぶんない。

S3対応

アップロードファイルをS3に置くための拡張機能
https://www.mediawiki.org/wiki/Extension:AWS

git cloneするように書いてあるけどサブモジュール使ってる場合はこれではダメなのでサブモジュールで追加。デプロイ時にcomposer install

https://github.com/edwardspec/mediawiki-aws-s3
Tokyoリージョンの場合デフォルトの$1.s3.amazonaws.comでは表示されないのでLocalSettings.phpに設定追加。

$wgAWSRegion = 'ap-northeast-1';
$wgAWSBucketDomain = 's3-ap-northeast-1.amazonaws.com/$1';

GitHubからForge

この辺りはLaravel等と同じなので省略。Forgeに追加時の最初はcomposer installしないほうがいいかも。

ForgeのDeploy Script。今後変更する可能性は高い。

cd /home/forge/wiki
git pull origin wiki
composer install --no-dev --no-interaction --prefer-dist --optimize-autoloader
git submodule update --init
cd /home/forge/wiki/extensions/AWS
composer install --no-dev --no-interaction --prefer-dist --optimize-autoloader

echo "" | sudo -S service php7.2-fpm reload

本番のLocalSettings.php

再度設定した後サーバー上にLocalSettings.phpを作る。FTPは使ってないので新規ファイル作ってコピペ。
今後も設定変更する時はサーバーで直接。.envの仕組みとかないのでこうするしかなさそう。

細かい設定項目は検索すればいくらでも出てくる。

短いURL

デフォルトではhttps://~/index.php?title=メインページで表示される。これをhttps://~/wiki/メインページにする。

https://www.mediawiki.org/wiki/Manual:Short_URL/ja

いろいろ書いてあるし検索もしたけどこれ使うのが一番早かった。
https://shorturls.redwerks.org/

Markdown

何年も前で止まってるけど一応使えた。
https://github.com/bharley/mw-markdown
サブモジュールで追加+Parsedown.phpとParsedownExtra.phpはデプロイ時に移動。

LocalSettings.php。古くてwfLoadExtension()は使えなかった。

require_once("./extensions/Markdown/Markdown.php");

$wgMarkdownExtra        = true;
$wgMarkdownHighlight    = true;
$wgMarkdownHighlightJs  = '//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.13.1/highlight.min.js';
$wgMarkdownHighlightCss = '//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.13.1/styles/default.min.css';

デフォルトでMarkdownが有効になるので最初からあるメインページは{{WIKI}}を追加して元のWiki記法に。

表示がおかしくなることもあるので設定でデフォルトを逆にしてもいい。この場合はMarkdownを有効化したいページにだけ{{MARKDOWN}}を記入。

$wgMarkdownDefaultOn = false;

VisualEditor

https://www.mediawiki.org/wiki/VisualEditor/Portal/ja

Markdownよりもこっちに対応のほうがいいかも。ただし導入は結構難しい。拡張機能を追加だけでは動かない。Parsoidも必要。

Ubuntuならaptでインストールできたので多少楽。
https://www.mediawiki.org/wiki/Parsoid/Setup

終わり

まだ試しに稼働させてみただけなので問題なく運用できるかやバージョンアップの手間の確認はこれから。

© kawax