使用Meilisearch为NodeBB提供中文搜索支持

注意:生产环境和开发环境的Apikey是相互独立的,可以参考一文

Nodebb默认的搜索插件nodebb-plugin-dbsearch不支持中文,中文搜索很棘手,目前主流的方法是:

今天找到了另一个很好的方案 - Meilisearch,这个名字就让人有好感,美丽的拼音,同样也是个开源项目,截至发文日期已经有31.9K个star

Meilisearch的安装和配置

开始安装

# Update the list of available packages and their versions
apt update
# Install curl which is required to install Meilisearch in the next step
apt install curl -y
# Install Meilisearch latest version from the script
curl -L https://install.meilisearch.com | sh

移动至/usr/bin目录,让meilisearch随处可用

# Move the Meilisearch binary to your system binaries
mv ./meilisearch /usr/bin/

检测安装是否成功,运行

meilisearch

如果出现下面画面说明安装成功

888b     d888          d8b 888 d8b                                            888
8888b   d8888          Y8P 888 Y8P                                            888
88888b.d88888              888                                                888
888Y88888P888  .d88b.  888 888 888 .d8888b   .d88b.   8888b.  888d888 .d8888b 88888b.
888 Y888P 888 d8P  Y8b 888 888 888 88K      d8P  Y8b     "88b 888P"  d88P"    888 "88b
888  Y8P  888 88888888 888 888 888 "Y8888b. 88888888 .d888888 888    888      888  888
888   "   888 Y8b.     888 888 888      X88 Y8b.     888  888 888    Y88b.    888  888
888       888  "Y8888  888 888 888  88888P'  "Y8888  "Y888888 888     "Y8888P 888  888

Database path: "./data.ms"
Server listening on: "localhost:7700"

将Meilisearch设置为系统服务运行

我们的设置会在/etc/systemd/system目录中创建meilisearch.service服务,并在端口7700中运行。

其中 --dev 参数可指定运行环境,--master-key参数为Admin Api Key,这里很重要一定要记住,后面要在nodebb的插件中使用。

为了安全考虑,apikey我建议使用https://randomkeygen.com/工具随机生成出一组。

cat << EOF > /etc/systemd/system/meilisearch.service
[Unit]
Description=Meilisearch
After=systemd-user-sessions.service

[Service]
Type=simple
ExecStart=/usr/bin/meilisearch --http-addr localhost:7700 --env production --master-key Y0urVery-S3cureAp1K3y

[Install]
WantedBy=default.target
EOF

运行后我们便成功注册了meilisearch的服务,这时候需要运行并设置自启动服务

# Set the service meilisearch
systemctl enable meilisearch

# Start the meilisearch service
systemctl start meilisearch

# Verify that the service is actually running
systemctl status meilisearch

查看status会输出结果

-# --- Expected output ---
● meilisearch.service - MeiliSearch
   Loaded: loaded (/etc/systemd/system/meilisearch.service; enabled; vendor preset: enabled)
   Active: active (running) since Fri 2020-04-10 14:27:49 UTC; 1min 8s ago
 Main PID: 14960 (meilisearch)

!小提示:

meilisearch的apikey可以通过./meilisearch --master-key="MASTER_KEY"命令单独生成。

设置Nginx反向代理(可选)

meilisearch的默认服务端口是7700,如果要通过80端口访问,则需要用nginx做反向代理

# Delete the default configuration file for Nginx
rm -f /etc/nginx/sites-enabled/default

# Add your configuration file specifying the Reverse Proxy settings
cat << EOF > /etc/nginx/sites-enabled/meilisearch
server {
    listen 80 default_server;
    listen [::]:80 default_server;
    server_name _;
    location / {
        proxy_pass  http://localhost:7700;
    }
}
EOF

修改对应server_name绑定域名。

如果在Ubuntu中配置了Let's Encrypt服务这时候可以使用certbot --nginx -d yourdomain.com命令来为域名生成证书。

为NodeBB安装meilisearch插件

在开始之前一定要停用nodebb默认搜索插件nodebb-plugin-dbsearch,在nodebb项目目录运行

npm install nodebb-plugin-meilisearch

安装后到控制面板重启论坛,并找到插件配置Apikey

使用Meilisearch为NodeBB提供中文搜索支持

最后到前端测试

Post Comment