MediaWiki-DockerでCirrus Searchの導入で沼った話 &インストール方法
皆さんこんにちは!中学副部長です。今回は、部活内で運営しているMediaWikiにCirrus Searchをインストールする際に沼ってしまった話について紹介します。
Cirrus Searchとは、MediaWiki標準搭載されている検索エンジンを強化するプラグインです。強化というか置き換えですね。
それをDocker上のMediaWikiにインストールしている際、少し沼ったことがあったので紹介します。
インストール方法
前提
・htmlフォルダをマウントしてあるものとする
・MediaWiki公式イメージを使う
・Docker composeを使う
基本は公式ガイドに従ってインストールします
拡張機能をダウンロード
htmlフォルダで以下を実行します。これは拡張機能フォルダに拡張機能をダウンロードしてくれるコマンドです。
git clone "https://gerrit.wikimedia.org/r/mediawiki/skins/Vector" skins/Vector
git clone "https://gerrit.wikimedia.org/r/mediawiki/extensions/CirrusSearch" extensions/CirrusSearch
git clone "https://gerrit.wikimedia.org/r/mediawiki/extensions/Elastica" extensions/Elastica
gitないよーって怒られるならapt install gitでインストールしてから実行する
Docker ComposeにElasticSearchのコンテナを追加
詳細は公式ガイドを参照
Cirrus SearchにはElasticSearchが必要です。これはDocker Composeに別のコンテナとして登録します。
ここで、ボリュームに登録するコンテナ側のパスはアクセス権限エラーが出たのでこの解決策に従い変更しておきます。
理由は正直分からないので、詳しい方は教えていただけるとありがたいです。
これをdocker-compose.ymlに追加
services:
mediawiki:
(省略)
elasticsearch:
image: docker-registry.wikimedia.org/repos/search-platform/cirrussearch-elasticsearch-image:v7.10.2-5
volumes:
- ホスト側のパス:/var/lib/elasticsearch/data
environment:
- discovery.type=single-node
ただ、検索に日本語を最適化するにはイメージをDockerfileで指定する必要があります。
依存関係を解決
私はここで少し沼りました。docker execでcomposer installを実行すると、
OCI runtime exec failed: exec failed: unable to start container process: exec: "composer": executable file not found in $PATH: unknown
多分「そんなもの知らないよー」って怒られました。そこでaptでインストールしようとしたのですがなぜかインストールできず...
試行錯誤で見つけた解決方法は、ホスト側でcompose installを実行することです。
ホストのターミナルで以下を実行します。
sudo apt install compose
cd (htmlボリュームのパス)
composer installホスト側でcomposer installすることで、無事解決しました。
LocalSettings.phpでインストール
インストールまであと一歩!ダウンロードした拡張機能をインストールします。
wfLoadSkin( 'Vector' );
require_once "$IP/extensions/CirrusSearch/tests/jenkins/FullyFeaturedConfig.php";
if ( !defined( 'MW_PHPUNIT_TEST' ) ) {
$wgCirrusSearchServers = [
[
'transport' => CirrusSearch\Elastica\DeprecationLoggedHttp::class,
"host" => "(ここにコンテナのホスト名を)"
]
];
}
wfLoadExtension( 'CirrusSearch' );
$wgSearchType = 'CirrusSearch';
wfLoadExtension( 'Elastica' );
これをLocalSettings.phpに加筆します。(ここにコンテナのホスト名を)の部分は適宜置き換えてください。
次に既存の記事にインデックスを登録していきます。次のコマンドを順にホストで実行します。
# MySQLのデータベースを更新(まだやってないなら)
sudo docker compose exec mediawiki php maintenance/run.php update.php
# Configure the search index and populate it with content
sudo docker compose exec mediawiki php extensions/CirrusSearch/maintenance/UpdateSearchIndexConfig.php
sudo docker compose exec mediawiki php extensions/CirrusSearch/maintenance/ForceSearchIndex.php --skipLinks --indexOnSkip
sudo docker compose exec mediawiki php extensions/CirrusSearch/maintenance/ForceSearchIndex.php --skipParse
# Process the job queue. You need to do this any time you add/update content and want it updated in ElasticSearch
sudo docker compose exec mediawiki php maintenance/runJobs.php
# Create the suggester index (autocomplete). It needs to be refreshed manually after adding/deleting new pages.
sudo docker compose exec mediawiki php extensions/CirrusSearch/maintenance/UpdateSuggesterIndex.phpこの記事が誰かの役に立てたら幸いです!ではまた。
