Meilisearch 生产部署必须显式指定 --master-key(≥16字节)、--db-path(持久化路径)和预留充足内存,三者缺一将导致鉴权失效、数据丢失或搜索崩溃。

Meilisearch 在 Linux 上部署确实比 Elasticsearch 轻得多,但“能跑起来”和“能稳用”是两回事——关键在 --master-key、--db-path 和内存限制这三处,踩错一个就可能丢数据或暴露 API。
启动命令必须带 --master-key 才算生产可用
不加 --master-key 启动的 Meilisearch 默认关闭所有鉴权,任何能访问 7700 端口的人都能删索引、读文档、改配置。这不是“开发模式”,是裸奔。
-
./meilisearch --master-key="a1b2c3d4e5f6g7h8"是最低要求,密钥必须 ≥16 字节 UTF-8 字符(推荐用openssl rand -base64 16生成) - 如果用环境变量方式,必须设
MEILI_MASTER_KEY,且不能和命令行参数混用,后者优先级更高 - Web UI 登录页输入的正是这个 key,不是 “API key”;后续 SDK 或 curl 请求里用的
Authorization: Bearer <key>也是它
--db-path 不指定就会把数据写进当前目录,重启容易丢
默认 --db-path 是 ./data.ms,意味着你在 /tmp 下执行 ./meilisearch,数据就存在 /tmp/data.ms ——很多系统会定期清空 /tmp,一重启服务,整个索引没了。
- 务必显式指定持久化路径:
./meilisearch --db-path /var/lib/meilisearch/data.ms --master-key=... - 确保运行用户对该路径有读写权限,常见错误是
Permission denied卡在启动日志末尾 - Docker 方式挂载时,
-v /host/path:/meili_data实际映射的就是--db-path的位置,别只挂错目录层级
内存吃紧时搜索会直接失败,不是慢,是报错
Meilisearch 把全部索引加载进内存,没 swap、没磁盘 fallback。当文档量增长,而物理内存不足时,search 请求会返回 500 Internal Server Error,日志里出现 Out of memory 或 Cannot allocate memory。
- 估算内存占用:每百万文档约需 1–1.5 GB RAM(取决于字段长度和数量),中文文本略高
- 没有“限制索引大小”的配置项,也不能像 ES 那样分片到多机——单机内存就是硬上限
- 查实时内存用量:
ps aux --sort=-%mem | head -n 5看meilisearch进程的%MEM,持续 >90% 就得缩容或换机器
真正麻烦的不是装不上,而是上线后某天发现搜索突然全挂——翻日志才看到内存爆了,或者运维清了一次 /tmp,所有索引消失。这些点不提前卡死,替换 ES 就只是把复杂问题从 Java 堆里搬到了 Rust 内存里而已。


















