为想在 MediaWiki 上使用 ElasticSearch 的人准备的简易教程

前言

如标题所示,网上关于这方面的内容要么残缺不全,要么完全用不了。我决定按照自己成功部署的经验来分享一下我的安装教程,这里面的方法不是最佳实践,不过对于小型 Wiki 基本是完全够用的。

软件要求

  • Debian 12
  • Mediawiki 1.43.3
  • ElasticSearch 7.10.2 (CirrusSearch 只兼容7.10版)

你也可以参考官方提供的支持矩阵,但是我说白了这个页面做的很烂。

下载必要文件

首先在这里下载 Linux X86_64 版本。

可能有人看见有 deb 包就直接跑去用 dpkg 安装了,但我实际使用时总是会出现莫名其妙的问题,这也是为什么我不用 apt 安装。

随便找个自己喜欢的文件夹,cd 到那个文件夹,然后输入 wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.10.2-linux-x86_64.tar.gz

部署 ElasticSearch

我这里把压缩包下载到了 /opt 里,用 tar -xzf elasticsearch-7.10.2-linux-x86_64.tar.gz 把文件解压出来。

然后我们 cd 到 bin 文件夹里。

由于 root 账户不能用于运行 ElasticSearch(可能会有潜在的安全危险),接下来我们新建一个用户账户用于运行该软件。

1
2
3
groupadd elastic
useradd elastic -g elastic
usermod -L elastic # 锁定这个账号,防止不怀好意的人登录,或者在[这里](https://www.cnblogs.com/shujk/p/13797439.html)找个更安全的方法。

接下来我们开一个 screen 会话,用于运行 ElasticSearch。

1
2
3
4
screen -R ElasticSearch
pwd # 确认一下当前位置是不是 /ElasticSearch/bin,不是的话就 cd 到这里
su elastic # 切换到用于运行 ElasticSearch 的账号
./elasticsearch

因为是用 Java 写的程序,所以启动时会有点慢,一般来说到这里就能直接使用了,如果没有用的话就根据错误日志自行调整。
没问题的话直接 detach 就行了。

测试服务连通性

输入 curl -X GET "localhost:9200/?pretty" ,如果返回如下内容,则 ElasticSearch 已经可以使用了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
{
"name" : "foobar",
"cluster_name" : "foo",
"cluster_uuid" : "bar",
"version" : {
"number" : "7.10.2",
"build_flavor" : "default",
"build_type" : "tar",
"build_hash" : "747e1cc71def077253878a59143c1f785afa92b9",
"build_date" : "2021-01-13T00:42:12.435326Z",
"build_snapshot" : false,
"lucene_version" : "8.7.0",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}

记得使用 ufw 等防火墙保护你的服务器,你也不希望自己部署的服务被滥用吧。

如果你要把 ElasticSearch 开放到公网,输入 ufw allow 9200 即可,不过你得自己折腾安全性之类的东西了。

安装 MediaWiki 插件

把下面这些插件都丢到 $MW_INSTALL_PATH/extensions 文件夹里。

配置 CirrusSearch

配置流程来自这里,我将按照我的安装方式复述一遍。

首先添加下列内容到这个文件里。

1
2
3
4
5
# ./LocalSettings.php
# Elstaic Search Configs
wfLoadExtension( 'Elastica' );
wfLoadExtension( 'CirrusSearch' );
$wgDisableSearchUpdate = true;

然后运行 CirrusSearch 目录里的维护脚本。

1
2
php $MW_INSTALL_PATH/extensions/CirrusSearch/maintenance/UpdateSearchIndexConfig.php
# 记得把 $MW_INSTALL_PATH 替换成你的 MediaWiki 安装目录。

脚本执行完毕后,删掉 $wgDisableSearchUpdate = true; 这一行。

接下来执行另一个维护脚本(关于这部分,原文针对大型 wiki 给出了解决方案,请阅读原文)。

1
2
3
php $MW_INSTALL_PATH/extensions/CirrusSearch/maintenance/ForceSearchIndex.php --skipLinks --indexOnSkip
php $MW_INSTALL_PATH/extensions/CirrusSearch/maintenance/ForceSearchIndex.php --skipParse
# 记得把 $MW_INSTALL_PATH 替换成你的 MediaWiki 安装目录。

脚本执行完毕后,在 LocalSettings.php 添加如下内容。

1
$wgSearchType = 'CirrusSearch';

额外内容

如果你需要使用 AdvancedSearch 的话,添加下列内容。

1
2
3
4
5
6
7
8
# ./LocalSettings.php
wfLoadExtension( 'AdvancedSearch' );
$wgAdvancedSearchNamespacePresets = [
'generalHelp' => [
'enabled' => false,
],
];
$wgAdvancedSearchDeepcatEnabled = false;