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

この記事が誰かの役に立てたら幸いです!ではまた。

コメントを残す