有一个 知识库档案系统 使用到了 Elasticsearch 服务,需要在本地开发环境安装。但 md 文档里只介绍了 Centos 和 windows 系统安装,不巧我使用了 Mac 系统,并且安装了 Docker 桌面版,希望能够针对现有环境进行安装。

官网下载地址 提供了 使用 docker 安装 Elasticsearch 的文档。当前的默认的版本是 8.10.3,没注意直接就安装了 Elasticsearch 8.10.3 和 Kibana 8.10.3。

结果配置了 elastic 密码,启动项目失败,报错连接不上。

esclient:
  master-host: 127.0.0.1
  master-port: 9200
  master-user-name: elastic
  master-user-pwd: xxx

再次找到 ES安装.MD 发现,里面演示安装的是 7.6.1。网上百度找到了 spring 文档里对于 elasticsearch 版本对应的表格

Spring Data 发行版系列使用的 Elasticsearch 版本和其中包含的 Spring Data Elasticsearch 版本

四舍五入就是 Spring Boot 2.3.x 对应 Elasticsearch 7.6.2,至少是兼容的。所以选择安装 7.6.2。

安装 Elasticsearch 7.6.2

按照 Elasticsearch 官网 7.6 的安装文档 安装 Elasticsearch 7.6.2,并使用 Docker 启动单节点集群(测试一台就够):

docker pull docker.elastic.co/elasticsearch/elasticsearch:7.6.2

docker run --name es02 -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:7.6.2

因为前面安装了一个 es01 8.10.3 版本,所以这边取名 es02。但教程到这就没了,后面是一些生产环境的配置等。没有像 8.10.3 一样安装过程中生成了 elastic 账号密码,还有一个 token 用于 Kibana 关联验证。

此时访问 http://localhost:9200/ 是 OK 的,直接启动项目成功了。

需要注意的是,此时连接 elastic 客户端使用的是之前生成的密码(这与当前情况是不匹配的),也就是说此时连接没有验证密码。

设置 Elasticsearch 7.6.2 密码

测试环境到上面就够了,可以去启动项目,不影响使用。但考虑后面会部署到服务器上,所以提前了解一下密码的设置。

百度到一篇 elasticSearch 7.X 配置用户名密码访问,一开始是针对配置文件 elasticsearch.yml 的修改,然后执行设置用户名和密码的命令。教程里提到了 x-pack,然后我在官网文档里也找到一个 Set up X-Pack,点进 Configuring security (设置安全密码)里。

首先是第一步,开启 xpack。因为基础版和试用默认是 false,打开配置 elasticsearch.yml 添加后保存重启服务:

xpack.security.enabled: true

之后就是设置密码(elastic、kibana、logstash_system、beats_system):

bin/elasticsearch-setup-passwords interactive

最后修改项目里的 esclient.master-user-pwd 重启项目即可。

安装 Kibana 7.6.2 并设置账号密码

7.6 的文档里没有对与 Kibana 的安装说明,所以参考 8.10.3,修改一下版本好就行:

docker pull docker.elastic.co/kibana/kibana:7.6.2

docker run --name kib02 --net elastic -p 5601:5601 docker.elastic.co/kibana/kibana:7.6.2

这样安装完 Kibana 7.6.2 以后,并没有返回设置好的账号密码。但前面的 elasticSearch 7.X 配置用户名密码访问 提到了这一点(kibana.yml):

#
# ** THIS IS AN AUTO-GENERATED FILE **
#

# Default Kibana configuration for docker target
server.name: kibana
server.host: "172.17.0.6"
elasticsearch.hosts: [ "http://172.17.0.5:9200" ]
xpack.monitoring.ui.container.elasticsearch.enabled: true
elasticsearch.username: "elastic"
elasticsearch.password: "xxx"

这里使用前面安装好的 elasticsearch 内网地址,以及 elastic 账号密码。

  • server.host 对应 kibana 服务的内网地址
  • elasticsearch.hosts 对应 elasticsearch 服务的内网地址
  • elasticsearch.username 登录账号
  • elasticsearch.password 登录密码

这里如果两个 host 地址设置有误,访问 kibana 会报错:Kibana server is not ready yet.,日志里会有错误提示:
Unable to revive connection: http://elasticsearch:9200/

此时访问 http://localhost:5601/ 使用 kibana 账号登录会报新的问题:403 Forbidden

删除站点的 cookie 之后使用 elastic 账号密码登录就可以了

PS:如果 Kibana 只能使用了 elastic 的账号密码登录,那么前面设置的 kibana 等其他三个账号又有什么作用呢?