默认启动会无鉴权、绑定127.0.0.1、使用内存数据库,导致api裸奔、外网无法访问、重启后数据全丢。

直接用 curl -L https://install.meilisearch.com | sh 装完就跑,是最稳的入门路径;但若要上生产,必须配 master_key、持久化路径和 systemd 服务,否则重启丢数据、API 无鉴权、进程一挂就断。
二进制安装后不加配置就运行,会遇到什么问题
默认启动时用的是 env="development" 和内存临时数据库,没有 master_key,所有 API 都裸奔;http_addr 默认绑 127.0.0.1:7700,外网根本连不上;进程退出后数据全丢——因为没指定 db_path,它写在当前目录下,下次重跑就清空。
常见错误现象:
-
curl http://your-server-ip:7700返回Connection refused - 加了文档却搜不到,
curl http://localhost:7700/indexes/myindex/search?q=test返回空数组 - 服务器重启后
meilisearch进程没了,手动再跑又得重导数据
实操建议:
- 先建好配置文件:
curl https://raw.githubusercontent.com/meilisearch/meilisearch/latest/config.toml > /etc/meilisearch.toml - 编辑该文件,至少改三项:
master_key = "your-secure-key-here"、http_addr = "0.0.0.0:7700"、db_path = "/var/lib/meilisearch/data" - 确保
/var/lib/meilisearch目录存在且可写:sudo mkdir -p /var/lib/meilisearch && sudo chown $USER:$USER /var/lib/meilisearch
Docker 启动 MeiliSearch 容器时 -v 挂载路径不一致导致数据丢失
很多人复制命令时只改了主机路径,忘了同步容器内路径。比如用 -v /home/test/meilisearch/data:/data.ms,但新版 MeiliSearch 默认读取的是 /data.ms,而旧版或某些镜像可能期望是 /meili_data ——路径不匹配,数据就写进容器临时层,删容器即丢。
参数差异:
-
getmeili/meilisearch:latest(官方镜像):默认使用/data.ms作为数据根目录 - 部分自建镜像或老教程里的
-v /path:/meili_data是错的,除非你显式传了--db-path /meili_data -
dump_dir和snapshot_dir不挂载也行,但db_path必须挂载,否则不是“持久化”,只是“假装持久化”
实操建议:
- 统一用官方推荐路径:
docker run -d --name meilisearch -p 7700:7700 -v /var/lib/meilisearch/data:/data.ms getmeili/meilisearch:latest - 验证是否生效:进容器
docker exec -it meilisearch ls /data.ms,应能看到database.db等文件 - 别信“自动创建目录”,
docker run不会帮你递归创建宿主机路径,/var/lib/meilisearch/data得提前mkdir -p
systemd 服务配置里 WorkingDirectory 和 ExecStart 路径写错,启动失败
很多教程抄来抄去,把 WorkingDirectory 写成 /usr/local/bin,但 ExecStart=/usr/local/bin/meilisearch 启动时仍会尝试在工作目录下找 config.toml 或写 db_path 相对路径,结果权限报错或数据写歪。
容易踩的坑:
-
WorkingDirectory设为/var/lib/meilisearch,但db_path在配置里写的是./data→ 实际路径变成/var/lib/meilisearch/./data,和预期不符 -
ExecStart没带--config-file-path参数,服务就按默认路径找配置,找不到就静默失败 - 没设
User字段,以 root 启动,后续挂载卷权限混乱
实操建议:
- service 文件中明确指定配置路径:
ExecStart=/usr/local/bin/meilisearch --config-file-path /etc/meilisearch.toml -
WorkingDirectory可省略,或设为/tmp这类无状态目录,避免干扰 - 加上
User=meilisearch(需提前创建用户),并确保该用户对/var/lib/meilisearch有读写权
最常被忽略的一点:无论二进制还是 Docker,master_key 一旦设了,所有写操作(如 POST /indexes/myindex/documents)都必须带 X-Meili-API-Key 请求头,否则 401;但很多人配完就忘,查日志只看到 401,却没翻配置确认 key 是否生效。











