MeiliSearch 1.55.0 Ubuntu 22.04 安装指南

在 Ubuntu 22.04 上从零安装 MeiliSearch 1.55.0:官方脚本与手动二进制两条路径、systemd 托管、启动验证、升级降级与卸载清理全流程

MeiliSearchMeiliSearchUbuntuUbuntu 22.04Linux搜索引擎2026/10/17

MeiliSearch 1.55.0 Ubuntu 22.04 安装指南

目标:在 Ubuntu 22.04 服务器上从零安装并托管 MeiliSearch 1.55.0 全文搜索引擎,覆盖官方脚本安装与手动下载二进制两条路径、systemd 服务托管、启动验证、升级降级与卸载清理。已在 Ubuntu 22.04.5 LTS(x86_64)环境逐条实测通过。

一、环境信息

本文所有命令与回显均在以下环境中实测:

  • 操作系统:Ubuntu 22.04.5 LTS(x86_64)
  • 内核架构:x86_64(amd64)
  • MeiliSearch 版本:1.55.0(commitSha 420ff1362801adb58c938aec89700e8f7e32e566,commitDate 2026-10-12)
  • 安装路径:/usr/local/bin/meilisearch
  • 数据目录:/var/lib/meilisearch/data
  • Dump 目录:/var/lib/meilisearch/dumps
  • 服务用户:meilisearch(系统用户,禁止登录)
  • 监听地址:127.0.0.1:7700
  • Master Key(演示用测试口令):q1w2e3r4t5y6u7i8o0p

⚠️ 注意:本文以 q1w2e3r4t5y6u7i8o0p 作为演示 Master Key(生产环境必须用 openssl rand -hex 32 重新生成,方法见第七章)。

二、概览与前置条件

2.1 MeiliSearch 简介

MeiliSearch(官方品牌写作 Meilisearch)是一个用 Rust 编写的开源全文搜索引擎,单个二进制文件即可运行,开箱即用,默认提供 RESTful HTTP API。它主打「搜索即服务」的极简体验:不需要像 Elasticsearch 那样理解分片、副本与 JVM 调优,创建索引、写入文档、发出搜索请求三个步骤即可上线一个容错搜索服务。项目地址:https://github.com/meilisearch/meilisearch,官网:https://www.meilisearch.com。

💡 技术拓展:全文检索引擎的核心数据结构是「倒排索引」(Inverted Index)——把文档拆词后建立「词 → 文档列表」的映射,查询时先查词表再取文档,而不是逐篇扫文档。除 MeiliSearch 外,常见同类引擎横向对比:

引擎语言/形态部署复杂度容错搜索适用场景
MeiliSearchRust 单二进制极低(单进程单文件)原生支持、开箱即用中小规模站点搜索、应用内搜索
ElasticsearchJava 多进程集群高(JVM、分片、集群拓扑)需自行配置 fuzzy大规模日志/全文检索、复杂聚合
TypesenseC++ 单二进制低原生支持与 MeiliSearch 定位接近,中小规模
AlgoliaSaaS 托管无需部署(商用收费)原生支持不想自运维、预算充足的商业站点

本文选用 MeiliSearch 1.55.0:单二进制零依赖、默认容错与中文分词友好、REST API 学习成本低,适合中小规模自托管搜索场景。

2.2 前置条件

安装前确认服务器满足以下条件。逐条验证命令与实测回显如下:

  1. 操作系统为 Ubuntu 22.04(其他 Debian 系发行版流程相同,包管理命令一致):
cat /etc/os-release | head -3

实测输出:

PRETTY_NAME="Ubuntu 22.04.5 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
  1. 已安装 curl 与 wget(下载二进制用)。若缺失则先安装:
apt update && apt install -y curl wget ca-certificates

实测输出(节选):

Running hooks in /etc/ca-certificates/update.d...
done.
  1. 服务器可访问 GitHub(下载 release 二进制)。测试命令与实测输出:
curl -fsSI https://github.com/meilisearch/meilisearch/releases/latest | grep -i location

实测输出:

location: https://github.com/meilisearch/meilisearch/releases/tag/v1.55.0

💡 说明:该命令同时返回了当前最新 stable 版本号(HTTP 302 跳转到 v1.55.0 的 tag 页面),第三章的版本选型就依赖这条命令。

  1. systemd 可用(Ubuntu 22.04 默认自带,用于服务托管):
systemctl is-system-running

实测输出:

running

三、版本选型说明

3.1 版本获取方法

MeiliSearch 遵循语义化版本(v主.次.修),发行节奏较快。查询最新 stable 版本的方法(不要硬编码记忆版本号,以下命令随时可复查):

curl -fsSI https://github.com/meilisearch/meilisearch/releases/latest | grep -i location

实测输出(2026-10-16 查询):

location: https://github.com/meilisearch/meilisearch/releases/tag/v1.55.0

3.2 版本与发布件对照表

MeiliSearch 官方发布渠道只有 GitHub Release,每个版本提供以下平台二进制(以 v1.55.0 实际资产清单为准):

发布件名称平台说明
meilisearch-linux-amd64Linux x86_64本文使用
meilisearch-linux-aarch64Linux ARM64树莓派/ARM 云主机
meilisearch-linux-riscv64Linux RISC-V实验性平台
meilisearch-macos-amd64 / -apple-siliconmacOS开发机使用
meilisearch-windows-amd64.exeWindows开发机使用
meilisearch-enterprise-*各平台企业版商业授权版本

关键差异与选型:普通 Linux 服务器选 meilisearch-linux-amd64(x86_64)或 meilisearch-linux-aarch64(ARM64);企业版需单独购买授权,本文不涉及。

⚠️ 注意:与 MySQL、Redis 等软件不同,MeiliSearch 官方不提供 APT 仓库,也不提供 deb/rpm 安装包(v1.55.0 的 Release 资产清单已逐项核实,只有各平台二进制与 openapi/error-codes 附加文件)。因此 Ubuntu 上的安装路径是「下载官方二进制 + 手工配置 systemd 服务」,不存在 apt install meilisearch 的官方方式。网上的第三方 APT 源非官方维护,不建议使用。

3.3 两条安装路径概述

方案方式是否需联网适用场景
方案 A官方安装脚本(install.meilisearch.com)需访问 GitHub能正常访问 GitHub 的服务器,一条命令完成
方案 B手动下载 GitHub Release 二进制需下载 release 文件网络受限、需要离线分发、需要固定版本号的场景

关键差异:方案 A 本质是脚本自动调用 GitHub API 查询最新版本再下载二进制,版本不可控且依赖 GitHub API 配额;方案 B 直接下载固定版本二进制,版本可控、可预下载后离线安装。生产环境推荐方案 B。

四、方案 A:官方安装脚本(在线一键安装)

4.1 方案说明

官方提供一条命令安装:

curl -L https://install.meilisearch.com | sh

脚本逻辑(源自脚本源码,官方地址 https://install.meilisearch.com):调用 GitHub API 查询最新 stable 版本 → 判断操作系统与架构 → 从 GitHub Release 下载对应二进制到当前目录并命名为 meilisearch、赋权 744。脚本支持 GITHUB_PAT 环境变量携带 GitHub Token 以提升 API 配额。

4.2 实测:脚本执行与失败排障实录

在本环境直接执行脚本,两次实测均失败,报错如下(这是国内服务器访问 GitHub API 的典型现象,完整保留供排障):

第一次(GitHub API 匿名限流):

cd /opt && curl -L https://install.meilisearch.com | sh

实测输出:

  % Total    % Received % Xferd  Average Speed   Time     Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   167    0   167    0     0     22      0 --:--:--  0:00:07 --:--:--    47
100  4492  100  4492    0     0    535      0  0:00:08  0:00:08 --:--:-- 4386k

ERROR: Impossible to get the latest stable version of Meilisearch.
Please let us know about this issue: https://github.com/meilisearch/meilisearch/issues/new/choose

In the meantime, you can manually download the appropriate binary from the GitHub release assets here: https://github.com/meilisearch/meilisearch/releases/latest

第二次(GitHub API 连接被重置):

curl: (56) OpenSSL SSL_read: Connection reset by peer, errno 104

错误定位:脚本匿名调用 https://api.github.com/repos/meilisearch/meilisearch/releases/latest,GitHub 对匿名 API 请求限制 60 次/小时/IP,超限即返回 403,脚本解析不到 tag_name 就报上述错误;部分网络环境还会出现到 api.github.com 的 TLS 连接被重置。

解决方案二选一:

  1. 携带 GitHub Token 执行(脚本原生支持 GITHUB_PAT 变量):
GITHUB_PAT=你的GitHub令牌 sh -c 'curl -L https://install.meilisearch.com | sh'
  1. 放弃脚本,改用方案 B 手动下载(推荐,见第五章)。

4.3 脚本安装成功后的落位与处理

脚本成功时会在当前工作目录生成 meilisearch 文件(脚本源码中 chmod 744 "$binary_name")。此时二进制只对当前目录可用,需继续完成以下三步:移动到系统路径、创建专用用户与数据目录、配置 systemd 服务。这三步与方案 B 完全一致,统一在 4.4 ~ 4.5 与第五章 5.3 ~ 5.5 描述(4.4/4.5 与 5.4/5.5 内容相同,任选一个方案的后续步骤即可)。

mv ./meilisearch /usr/local/bin/meilisearch && chmod 755 /usr/local/bin/meilisearch
meilisearch --version

实测输出:

meilisearch 1.55.0

五、方案 B:手动下载官方二进制(生产推荐)

5.1 方案说明

直接从 GitHub Release 下载固定版本的官方二进制,放到 /usr/local/bin,再手工创建专用用户、数据目录与 systemd 服务。版本完全可控,二进制可预下载后在内网服务器之间分发,是最贴近生产的安装方式。

5.2 下载与校验

下载 v1.55.0 的 linux-amd64 二进制(约 341 MB):

cd /opt
curl -fLO https://github.com/meilisearch/meilisearch/releases/download/v1.55.0/meilisearch-linux-amd64

实测输出(下载完成确认):

HTTP 200, 357184032 bytes
ls -lh /opt/meilisearch-linux-amd64

实测输出:

-rw-r--r-- 1 root root 341M Oct 16 15:29 meilisearch-linux-amd64

官方 Release 不随附 sha256 校验文件(v1.55.0 资产清单核实无 .sha256 发布件,尝试下载 meilisearch-linux-amd64.sha256 返回 404),但应自行记录校验值用于分发比对:

sha256sum /opt/meilisearch-linux-amd64

实测输出:

7e33f5889235f14290074a19a6d3574bd9b10fb2ee8731eabb7dafd0714b0513  meilisearch-linux-amd64

💡 说明:若服务器访问 GitHub 缓慢或失败,可预先在能联网的机器上下载该文件,再通过 scp /opt/meilisearch-linux-amd64 root@目标服务器:/opt/ 传输到目标服务器,sha256 值比对一致即可放心使用。

5.3 安装二进制与创建运行用户

把二进制安装到系统路径并赋予执行权限:

chmod 755 /opt/meilisearch-linux-amd64
mv /opt/meilisearch-linux-amd64 /usr/local/bin/meilisearch

验证安装:

which meilisearch
meilisearch --version

实测输出:

/usr/local/bin/meilisearch
meilisearch 1.55.0

创建专用系统用户(不可登录,仅用于运行服务,避免以 root 运行):

useradd -r -s /usr/sbin/nologin meilisearch

创建数据、dump、uploads 目录并移交属主:

mkdir -p /var/lib/meilisearch/data /var/lib/meilisearch/dumps /var/lib/meilisearch/uploads
chown -R meilisearch:meilisearch /var/lib/meilisearch

验证用户与目录:

id meilisearch
ls -ld /var/lib/meilisearch

实测输出:

uid=999(meilisearch) gid=999(meilisearch) groups=999(meilisearch)
drwxr-xr-x 5 meilisearch meilisearch 4096 Oct 16 15:29 /var/lib/meilisearch

5.4 配置 systemd 服务

创建服务单元文件 /etc/systemd/system/meilisearch.service:

cat > /etc/systemd/system/meilisearch.service <<'EOF'
[Unit]
Description=MeiliSearch full-text search engine
After=network.target

[Service]
Type=simple
User=meilisearch
Group=meilisearch
ExecStart=/usr/local/bin/meilisearch --http-addr 127.0.0.1:7700 --env production --master-key q1w2e3r4t5y6u7i8o0p --db-path /var/lib/meilisearch/data --dump-dir /var/lib/meilisearch/dumps
Restart=always
RestartSec=5
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target
EOF

逐项说明:

  • User/Group=meilisearch:以专用低权限用户运行;
  • --http-addr 127.0.0.1:7700:仅监听本机回环(生产若需外部访问建议置于 Nginx 反代之后,或改为 0.0.0.0:7700 并配好防火墙);
  • --env production:生产模式,强制要求 Master Key 且日志更严格;
  • --master-key:实例主密钥,保护除 GET /health 外的所有 API 路由;
  • --db-path / --dump-dir:数据与 dump 落盘目录,与 5.3 创建的目录对应;
  • Restart=always + RestartSec=5:异常退出 5 秒后自动拉起;
  • LimitNOFILE=65536:提高文件描述符上限,避免大索引时 too many open files。

加载并启用服务(每条命令针对一个服务单元):

systemctl daemon-reload
systemctl enable meilisearch
systemctl start meilisearch

实测输出(enable 时):

Created symlink /etc/systemd/system/multi-user.target.wants/meilisearch.service → /etc/systemd/system/meilisearch.service.

5.5 启动状态与服务验证

确认服务运行状态:

systemctl is-active meilisearch
systemctl status meilisearch --no-pager -l

实测输出:

active
● meilisearch.service - MeiliSearch full-text search engine
     Loaded: loaded (/etc/systemd/system/meilisearch.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2026-10-16 15:29:58 UTC; 4s ago
   Main PID: 2935 (meilisearch)
      Tasks: 22 (limit: 7196)
     Memory: 28.9M
        CPU: 45ms
     CGroup: /system.slice/meilisearch.service
             └─2935 /usr/local/bin/meilisearch --http-addr 127.0.0.1:7700 --env production --master-key q1w2e3r4t5y6u7i8o0p --db-path /var/lib/meilisearch/data --dump-dir /var/lib/meilisearch/dumps

Oct 16 15:29:59 c7db0bef431b meilisearch[2935]: Anonymous telemetry:        "Enabled"
Oct 16 15:29:59 c7db0bef431b meilisearch[2935]: Instance UID:                "16d031b3-e7c6-4fa8-aa31-653cca51b776"

HTTP 健康检查(GET /health 无需鉴权):

curl -s http://127.0.0.1:7700/health

实测输出:

{"status":"available"}

版本端点(需 Master Key):

curl -s http://127.0.0.1:7700/version -H 'Authorization: Bearer q1w2e3r4t5y6u7i8o0p'

实测输出:

{"commitSha":"420ff1362801adb58c938aec89700e8f7e32e566","commitDate":"2026-10-12T08:45:13.000000000Z","pkgVersion":"1.55.0"}

无凭据访问业务路由会被拒绝(401),说明鉴权已生效:

curl -s http://127.0.0.1:7700/indexes -w '\nHTTP %{http_code}\n'

实测输出:

{"message":"The Authorization header is missing. It must use the bearer authorization method.","code":"missing_authorization_header","type":"auth","link":"https://docs.meilisearch.com/errors#missing_authorization_header"}
HTTP 401

带凭据访问正常(200):

curl -s http://127.0.0.1:7700/indexes -H 'Authorization: Bearer q1w2e3r4t5y6u7i8o0p' -w '\nHTTP %{http_code}\n'

实测输出:

{"results":[],"offset":0,"limit":20,"total":0}
HTTP 200

六、方案对比与选择建议

维度方案 A(官方脚本)方案 B(手动二进制)
版本控制自动取最新版,不可指定任意固定版本
网络依赖GitHub API + Release 双依赖,易被限流仅 Release 下载,可离线分发
落位路径当前工作目录,需手动归位直接安装到 /usr/local/bin
systemd 服务脚本不创建,需手工配置手工配置(本文 5.4 模板)
可重复性每次结果可能不同sha256 可校验,结果一致

选择建议:生产环境一律选方案 B(版本可控、可离线、可校验);方案 A 仅适合个人机器快速体验。两条路径的二进制完全相同,后续的 systemd 配置、升级、卸载操作完全一致。

七、配置说明

7.1 生成生产用 Master Key

演示值 q1w2e3r4t5y6u7i8o0p 仅用于本文流程演示,生产环境用以下命令生成随机密钥(至少 16 字节):

openssl rand -hex 32

实测输出(示例,每次运行结果不同):

1d542b1e3d34e3ae1ba247dbb41d1a1fa4798a5d1c46e2c9f75ff8f4c50b0f37

将生成值替换 5.4 单元文件中的 --master-key,然后重载并重启(每条命令针对一个服务单元):

systemctl daemon-reload
systemctl restart meilisearch

7.2 防火墙与端口

MeiliSearch 默认端口 7700。若监听 0.0.0.0,用 ufw 只放行可信来源:

ufw allow from 192.168.1.0/24 to any port 7700 proto tcp

实测输出:

Rule added

💡 说明:生产部署更常见的做法是保持 --http-addr 127.0.0.1:7700,由 Nginx 反向代理对外提供 HTTPS,Master Key 只存在后端配置里,避免密钥直接暴露给前端。

7.3 配置方式的优先级

MeiliSearch 支持三种配置方式,优先级为 命令行参数 > 环境变量(MEILI_*)> TOML 配置文件(--config-file-path),同一参数在高层指定时覆盖低层。TOML 配置示例(参数含义与 CLI 一致,键名去掉了 -- 前缀、连字符改下划线):

db_path = "/var/lib/meilisearch/data"
http_addr = "127.0.0.1:7700"
master_key = "q1w2e3r4t5y6u7i8o0p"
env = "production"
no_analytics = true

启动时指定:meilisearch --config-file-path /etc/meilisearch.toml。逐项实测效果见《MeiliSearch 1.55.0 配置参数详解》。

八、常见问题(FAQ)

Q1:运行官方安装脚本报 ERROR: Impossible to get the latest stable version of Meilisearch. 怎么办?

原因:脚本匿名调用 GitHub API 被限流(匿名 60 次/小时/IP)或网络到 api.github.com 被重置。解决:按 4.2 节携带 GITHUB_PAT 环境变量重试,或直接改用方案 B 手动下载二进制。

Q2:production 模式启动报 You must provide a master key to secure your instance in a production environment.

原因:--env production(或 MEILI_ENV=production)时必须提供至少 16 字节的 Master Key。实测报错与官方提示:

2026-10-16T15:36:23.198420Z ERROR meilisearch: error=You must provide a master key to secure your instance in a production environment. It can be specified via the MEILI_MASTER_KEY environment variable or the --master-key launch option.

We generated a new secure master key for you (you can safely use this token):

>> --master-key DwHpHBFMdRx9MjkJ9FH8Fo0NMqdCI-MMdpwjJfPDT2Y <<

按提示用生成的密钥即可;密钥不足 16 字节时会报 The master key must be at least 16 bytes in a production environment. The provided key is only 5 bytes.(实测:传入 short 触发)。

Q3:以普通用户手动启动报 Permission denied (os error 13),但数据目录权限明明正确。

原因:MeiliSearch 启动时还要求当前工作目录可写。实测对比:以 meilisearch 用户 cd / 后启动(/ 目录对该用户不可写)→ 报 ERROR meilisearch: error=Permission denied (os error 13) 后退出;cd /var/lib/meilisearch 后再启动同一命令 → 正常监听。解决:手动运行前先 cd 到可写目录;systemd 托管时 WorkingDirectory 缺省为服务用户主目录(本例 /var/lib/meilisearch,可写)因此不受影响,如自定义了 WorkingDirectory 请确保该目录对运行用户可写。

Q4:启动时端口被占用怎么办?

用 ss -lntp | grep 7700 找出占用进程后停掉它,或修改 --http-addr 换端口(如 --http-addr 127.0.0.1:7701)。修改单元文件后需 systemctl daemon-reload 再 systemctl restart meilisearch。

Q5:访问 API 返回 401 missing_authorization_header。

这是正常安全行为:production 模式且配置了 Master Key 后,除 GET /health 外所有路由都需要 Authorization: Bearer <master-key> 请求头。curl 加 -H 'Authorization: Bearer q1w2e3r4t5y6u7i8o0p' 即可(实测见 5.5)。

Q6:systemctl start meilisearch 后服务反复重启。

排查顺序:journalctl -u meilisearch -n 50 --no-pager 看启动日志。常见原因:数据目录属主不是 meilisearch 用户(chown -R meilisearch:meilisearch /var/lib/meilisearch 修复)、master key 少于 16 字节(见 Q2)、二进制与 libc 不兼容(必须使用 GitHub Release 的 linux-amd64 版本,不要复用其他发行版包里的二进制)。

九、升级与降级

9.1 升级步骤

MeiliSearch 升级 = 替换二进制 + 重启。官方要求跨版本升级前先做数据备份(dump 方式见《MeiliSearch 1.55.0 进阶实战与运维》第五章):

systemctl stop meilisearch
curl -fLo /usr/local/bin/meilisearch.new https://github.com/meilisearch/meilisearch/releases/download/<新版本号>/meilisearch-linux-amd64

⚠️ 注意:<新版本号> 需替换为 3.1 节命令查到的真实版本(如 v1.56.0),本环境升级当日的最新版即 1.55.0,无更高版本可实测升级后的版本回显,故此步只给方法。

chmod 755 /usr/local/bin/meilisearch.new
mv /usr/local/bin/meilisearch.new /usr/local/bin/meilisearch
systemctl start meilisearch
meilisearch --version

9.2 降级与多版本管理

MeiliSearch 不支持降级数据库格式:高版本引擎写入的数据文件低版本无法打开。降级前必须先用当前高版本导出 dump,再用低版本 --import-dump 导入(完整流程见《MeiliSearch 1.55.0 进阶实战与运维》第五章)。需要多版本并存验证时,将不同版本二进制分别命名存放(如 /opt/meilisearch-1.55.0、/opt/meilisearch-1.54.0),启动时用不同 --http-addr 与 --db-path 隔离端口与数据。

十、卸载与清理

完整卸载按以下顺序执行(每条命令针对一个服务单元或一个路径),全部实测:

systemctl stop meilisearch
systemctl disable meilisearch

实测输出:

inactive
Removed /etc/systemd/system/multi-user.target.wants/meilisearch.service.

删除服务单元并重载:

rm -f /etc/systemd/system/meilisearch.service
systemctl daemon-reload
systemctl reset-failed

删除二进制与数据:

rm -f /usr/local/bin/meilisearch
rm -rf /var/lib/meilisearch

验证卸载结果:

which meilisearch || echo 'meilisearch command not found (uninstalled)'
systemctl status meilisearch 2>&1 | head -2

实测输出:

meilisearch command not found (uninstalled)
Unit meilisearch.service could not be found.

⚠️ 注意:rm -rf /var/lib/meilisearch 会永久删除全部索引数据,执行前确认已有 dump 备份。

十一、参考链接