Elasticsearch 是一个分布式搜索和分析引擎,部署方式很灵活。对于新手,最快的方式是用 Docker 跑一个单节点实例;如果要上生产环境,则需要用 Linux 安装包做更细致的配置。

🐳 方式一:Docker 部署(推荐用于开发测试)

这是最方便、最快上手的方式,适合本地开发和功能验证。

运行单节点 Elasticsearch
一条命令就能启动一个关闭了安全认证的单节点实例:

1
2
3
4
5
6
docker run -p 127.0.0.1:9200:9200 -d --name elasticsearch \
-e "discovery.type=single-node" \
-e "xpack.security.enabled=false" \
-e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \
-v "elasticsearch-data:/usr/share/elasticsearch/data" \
docker.elastic.co/elasticsearch/elasticsearch:8.15.0
  • -p 127.0.0.1:9200:9200:将服务端口限制在本机访问,更安全。
  • discovery.type=single-node:单节点模式。
  • xpack.security.enabled=false:关闭安全认证,方便测试。生产环境绝不能这样设置
  • ES_JAVA_OPTS:限制 JVM 堆内存,根据机器配置调整。

启动后,访问 http://localhost:9200 看到返回的 JSON 信息就成功了。

进阶:用 Docker Compose 同时部署 Kibana
如果你还需要 Kibana 来做可视化分析,可以用 Compose 文件把两个服务一起管起来:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# docker-compose.yml
services:
es01:
image: docker.elastic.co/elasticsearch/elasticsearch:8.15.0
container_name: es01
environment:
- discovery.type=single-node
- ES_JAVA_OPTS=-Xms512m -Xmx512m
- xpack.security.enabled=false
ports:
- "9200:9200"
volumes:
- es-data:/usr/share/elasticsearch/data
kib01:
image: docker.elastic.co/kibana/kibana:8.15.0
container_name: kib01
environment:
- ELASTICSEARCH_HOSTS=http://es01:9200
ports:
- "5601:5601"
depends_on:
- es01
volumes:
es-data:

执行 docker compose up -d 即可同时启动 Elasticsearch(端口 9200)和 Kibana(端口 5601)。

🐧 方式二:Linux 原生部署(生产环境常用)

在 Linux 服务器上,一般用 tar 包或包管理器安装,并做系统级配置。

1. 部署前准备(关键)
Elasticsearch 在 Linux 下不能用 root 用户启动,且需要调整系统参数:

1
2
3
4
5
6
7
8
# 修改 vm.max_map_count,否则可能启动失败
sudo sysctl -w vm.max_map_count=262144
# 永久生效
echo "vm.max_map_count=262144" | sudo tee -a /etc/sysctl.conf

# 创建专用用户(如果用 tar 包部署)
sudo useradd esuser
sudo passwd esuser

2. 下载并解压 tar 包

1
2
3
4
5
6
7
# 切换用户
su esuser
cd /home/esuser
# 下载(版本号可换成最新的)
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.15.0-linux-x86_64.tar.gz
tar -xzf elasticsearch-8.15.0-linux-x86_64.tar.gz
cd elasticsearch-8.15.0

3. 修改核心配置
编辑 config/elasticsearch.yml,以下是关键项:

1
2
3
4
5
6
7
8
cluster.name: my-application
node.name: node-1
# 允许外部 IP 访问(如需远程连接)
network.host: 0.0.0.0
# 单节点模式
discovery.type: single-node
# 测试环境可关闭安全认证(生产环境建议开启)
xpack.security.enabled: false

同时,在 config/jvm.options 中调整 JVM 堆内存(建议 -Xms-Xmx 设置相同,且不超过物理内存的 50%):

text

1
2
-Xms1g
-Xmx1g

4. 启动服务

1
2
3
4
# 前台启动(测试用)
./bin/elasticsearch
# 后台启动
./bin/elasticsearch -d

🔐 生产环境安全建议

上面的 Docker 和 tar 包示例都为了方便测试关闭了安全认证。生产环境务必开启,否则任何人都能读写你的数据。

Elasticsearch 8.x 默认开启了安全功能,首次启动时会自动生成 elastic 用户的密码、证书指纹和节点注册令牌,一定要保存好。之后通过 HTTPS 和认证信息访问,例如用 curl 测试:

1
curl -u elastic:你的密码 -k https://localhost:9200

✅ 验证部署

无论哪种方式,启动后都可以通过 REST API 验证服务是否正常。

1
2
3
4
5
6
# 检查集群健康
curl -X GET "localhost:9200/_cluster/health?pretty"
# 创建一个测试索引
curl -X PUT "localhost:9200/my-index?pretty"
# 查看所有索引
curl -X GET "localhost:9200/_cat/indices?v"

如果返回了集群状态或索引列表,就说明部署成功了。

你的目标是本地开发还是生产环境部署?如果是生产环境,我可以再展开讲讲安全配置、集群搭建和内存调优的细节。