Meilisearch 的安装与运行

步骤 1:安装 Meilisearch

通过 SSH 登录到您的服务器,更新可用软件包列表,并安装 curl

apt update
apt install curl -y

使用软件包的最新版本是良好的安全实践,尤其是在生产环境中。

接下来,使用 curl 下载并运行 Meilisearch 命令行安装程序

# 从脚本安装Meilisearch最新版本
curl -L https://install.meilisearch.com | sh

Meilisearch 安装程序是一组脚本,可确保您获得适合您系统的正确二进制文件。

接下来,您需要使二进制文件在您系统中的任何位置都能访问。将二进制文件移动到 /usr/local/bin

sudo mv ./meilisearch /usr/local/bin/

Meilisearch 现在正在运行,但它不可公开访问。

步骤 2:创建系统用户

以 root 身份运行应用程序会使您面临不必要的安全风险。为了防止这种情况,为 Meilisearch 创建一个专用用户

useradd -d /var/lib/meilisearch -s /bin/false -m -r meilisearch

# 说明

# -d HOME_DIR:指定用户的家目录。如果未指定,默认情况下用户的家目录会在 /home 下创建,与用户名相同。

# -s /bin/false 选项用于指定用户的登录 shell 为 /bin/false。这意味着该用户无法通过交互式登录(如 SSH)访问系统。

# -r 参数用于创建一个系统用户(system user)。系统用户通常用于运行系统服务或应用程序,而不是用于常规的用户登录。

步骤 3:创建配置文件

在安装 Meilisearch 并采取第一步确保数据安全之后,您需要设置一个基本的配置文件。

首先,创建 Meilisearch 将在其上存储数据的目录

mkdir /var/lib/meilisearch/data /var/lib/meilisearch/dumps /var/lib/meilisearch/snapshots
chown -R meilisearch:meilisearch /var/lib/meilisearch
chmod 750 /var/lib/meilisearch

在本教程中,您将在服务器的本地磁盘中创建目录。如果您使用其他块存储,请在其中创建这些目录。

接下来,将默认配置下载到 /etc

curl https://raw.githubusercontent.com/meilisearch/meilisearch/latest/config.toml > /etc/meilisearch.toml

最后,更新 meilisearch.toml 文件中的以下几行,以便 Meilisearch 使用您之前创建的目录来存储其数据,将 MASTER_KEY 替换为 16 字节的字符串

env = "production"
master_key = "MASTER_KEY"
db_path = "/var/lib/meilisearch/data"
dump_dir = "/var/lib/meilisearch/dumps"
snapshot_dir = "/var/lib/meilisearch/snapshots"

请务必选择一个安全的密钥(至少 16 字节长,并且由有效的 UTF-8 字符组成),并避免将其暴露在可公开访问的位置。

现在您已经配置了 Meilisearch 实例。

步骤 4:将 Meilisearch 作为服务运行

在 Linux 环境中,服务是一个可以在操作系统启动时启动并在后台持续运行的进程。如果您的程序因任何原因停止运行,Linux 将立即重启服务,有助于减少停机时间。[

4.1. 创建服务文件

服务文件是文本文件,告诉您的操作系统如何运行您的程序。

运行以下命令在 /etc/systemd/system 中创建一个服务文件

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

[Service]
Type=simple
WorkingDirectory=/var/lib/meilisearch
ExecStart=/usr/local/bin/meilisearch --config-file-path /etc/meilisearch.toml
User=meilisearch
Group=meilisearch
Restart=on-failure

[Install]
WantedBy=multi-user.target
EOF

4.2. 启用并启动服务

您的服务文件现在已准备就绪,使用 systemctl 激活该服务

systemctl enable meilisearch
systemctl start meilisearch

使用 systemctl enable,您告诉操作系统您希望它在每次启动时运行。然后,systemctl start 会立即启动 Meilisearch 服务。

通过检查服务状态来确保一切正常

systemctl status meilisearch

您应该看到一条确认您的服务正在运行的消息

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

若查看状态显示报错 Error: Permission denied (os error 13) 很有可能是数据目录出了问题,重新执行命令

chown -R meilisearch:meilisearch /var/lib/meilisearch
chmod 750 /var/lib/meilisearch
chown -R meilisearch:meilisearch /usr/local/bin/meilisearch

步骤 5:保护并完成您的设置

此时,Meilisearch 已安装并正在运行。它还受到可能发生的崩溃和系统重启的保护。

下一步是使您的实例可公开访问。

提示

如果您发送给 Meilisearch 的所有请求都由同一台机器上的另一个应用程序完成,那么您可以安全地跳过本节。

5.1. 使用 Nginx 创建反向代理

一个 反向代理 是一个应用程序,它将处理外部世界与您的应用程序之间的所有通信。在本教程中,您将使用 Nginx 作为您的反向代理来接收外部 HTTP 请求并将它们重定向到 Meilisearch。

首先,在您的机器上安装 Nginx

接下来,删除默认配置文件

rm -f /etc/nginx/sites-enabled/default

Nginx 带有一组默认设置,例如其默认 HTTP 端口,这些设置可能与 Meilisearch 冲突。

创建一个新的配置文件,指定反向代理设置

cat << EOF > /etc/nginx/sites-enabled/meilisearch
server {
    listen 80 default_server;
    listen [::]:80 default_server;
    server_name _;
    location / {
        proxy_pass  http://127.0.0.1:7700;
    }
}
EOF

最后,启用 Nginx 服务

systemctl daemon-reload
systemctl enable nginx
systemctl restart nginx

您的 Meilisearch 实例现在可公开访问。

5.2. 启用 HTTPS

唯一剩下的问题是 Meilisearch 通过 HTTP 处理请求,没有任何额外的安全性。这是一个主要的安全漏洞,可能导致攻击者访问您的数据。

本教程假设您已注册域名,并且已正确配置其 DNS 的 A 记录 以指向您的 DigitalOcean 服务器的 IP 地址。有关更多信息,请参阅 DigitalOcean DNS 文档

使用 certbot 在您的服务器上配置启用 HTTPS。

首先,在您的系统上安装所需的软件包

sudo apt install certbot python3-certbot-nginx -y

接下来,运行 certbot

输入您的电子邮件地址,同意条款和条件,然后选择您的域名。当提示您是否要自动重定向 HTTP 流量时,选择选项 2: Redirect

Certbot 将完成 Nginx 的配置。完成后,所有到您服务器的流量都将使用 HTTPS,并且您将完成保护您的 Meilisearch 实例。

您的安全证书必须每 90 天续订一次。Certbot 会自动安排续订。运行测试以验证此过程已到位

sudo certbot renew --dry-run

如果此命令没有返回错误,则您已成功在 Nginx 服务器中启用 HTTPS。

结论

您已按照主要步骤来提供安全稳定的服务。由于反向代理、HTTPS 和 Meilisearch 的内置安全密钥的组合,您的 Meilisearch 实例现在已在一个安全且可公开访问的环境中运行。

参考文档:

在生产环境中运行 Meilisearch - Meilisearch 文档 - Meilisearch 搜索引擎

引用链接

[1] 反向代理: https://www.keycdn.com/support/nginx-reverse-proxy
[2] Nginx: https://www.nginx.com/
[3] DigitalOcean DNS 文档: https://docs.digitalocean.com/products/networking/dns/getting-started/dns-registrars/
[4] certbot: http://certbot.openssl.ac.cn/
[5] 在生产环境中运行 Meilisearch - Meilisearch 文档 - Meilisearch 搜索引擎: https://www.meilisearch.org.cn/docs/guides/deployment/running_production