首页 > 其他分享 >docker-compose 部署 es8.7

docker-compose 部署 es8.7

时间:2023-05-18 17:46:58浏览次数:55  
标签:compose xpack ca es8.7 ssl certs es01 docker security

https://blog.51cto.com/wangguishe/6177453

系统设置

sysctl.conf

# echo  vm.max_map_count=262144 >> /etc/sysctl.conf

 

   

ulimits

# docker run --rm docker.elastic.co/elasticsearch/elasticsearch:8.7.0 /bin/bash -c 'ulimit -Hn && ulimit -Sn && ulimit -Hu && ulimit -Su'
1048576
1048576
unlimited
unlimited

 

   

创建数据目录

elasticsearch默认情况下,Elasticsearch使用 uid:gid作为1000:0的用户在容器内运行。

# mkdir -pv /data/apps/elasticsearch/{certs,esdata01,kibanadata}
# chown -R 1000 /data/apps/elasticsearch/

 

   

.env

# Password for the 'elastic' user (at least 6 characters)
ELASTIC_PASSWORD=PhhEyvLCRJkAnJX644LV

# Password for the 'kibana_system' user (at least 6 characters)
KIBANA_PASSWORD=su@H22WR3&^tJP!94cf@

# Version of Elastic products
STACK_VERSION=8.7.0

# Set the cluster name
CLUSTER_NAME=docker-cluster

# Set to 'basic' or 'trial' to automatically start the 30-day trial
LICENSE=basic
#LICENSE=trial

# Port to expose Elasticsearch HTTP API to the host
ES_PORT=9200
#ES_PORT=127.0.0.1:9200

# Port to expose Kibana to the host
KIBANA_PORT=5601
#KIBANA_PORT=80

# Increase or decrease based on the available host memory (in bytes)
MEM_LIMIT=10737418240

# Project namespace (defaults to the current folder name if not set)
#COMPOSE_PROJECT_NAME=myproject
   

docker-compose.yaml

version: "3.9"

services:
  setup:
    image: docker.elastic.co/elasticsearch/elasticsearch:${STACK_VERSION}
    volumes:
      - ./certs:/usr/share/elasticsearch/config/certs
    user: "0"
    command: >
      bash -c '
        if [ x${ELASTIC_PASSWORD} == x ]; then
          echo "Set the ELASTIC_PASSWORD environment variable in the .env file";
          exit 1;
        elif [ x${KIBANA_PASSWORD} == x ]; then
          echo "Set the KIBANA_PASSWORD environment variable in the .env file";
          exit 1;
        fi;
        if [ ! -f config/certs/ca.zip ]; then
          echo "Creating CA";
          bin/elasticsearch-certutil ca --silent --pem -out config/certs/ca.zip;
          unzip config/certs/ca.zip -d config/certs;
        fi;
        if [ ! -f config/certs/certs.zip ]; then
          echo "Creating certs";
          echo -ne \
          "instances:\n"\
          "  - name: es01\n"\
          "    dns:\n"\
          "      - es01\n"\
          "      - localhost\n"\
          "    ip:\n"\
          "      - 127.0.0.1\n"\
          "  - name: es02\n"\
          "    dns:\n"\
          "      - es02\n"\
          "      - localhost\n"\
          "    ip:\n"\
          "      - 127.0.0.1\n"\
          "  - name: es03\n"\
          "    dns:\n"\
          "      - es03\n"\
          "      - localhost\n"\
          "    ip:\n"\
          "      - 127.0.0.1\n"\
          > config/certs/instances.yml;
          bin/elasticsearch-certutil cert --silent --pem -out config/certs/certs.zip --in config/certs/instances.yml --ca-cert config/certs/ca/ca.crt --ca-key config/certs/ca/ca.key;
          unzip config/certs/certs.zip -d config/certs;
        fi;
        echo "Setting file permissions"
        chown -R root:root config/certs;
        find . -type d -exec chmod 750 \{\} \;;
        find . -type f -exec chmod 640 \{\} \;;
        echo "Waiting for Elasticsearch availability";
        until curl -s --cacert config/certs/ca/ca.crt https://es01:9200 | grep -q "missing authentication credentials"; do sleep 30; done;
        echo "Setting kibana_system password";
        until curl -s -X POST --cacert config/certs/ca/ca.crt -u "elastic:${ELASTIC_PASSWORD}" -H "Content-Type: application/json" https://es01:9200/_security/user/kibana_system/_password -d "{\"password\":\"${KIBANA_PASSWORD}\"}" | grep -q "^{}"; do sleep 10; done;
        echo "All done!";
      '
    healthcheck:
      test: ["CMD-SHELL", "[ -f config/certs/es01/es01.crt ]"]
      interval: 1s
      timeout: 5s
      retries: 120

  es01:
    depends_on:
      setup:
        condition: service_healthy
    image: docker.elastic.co/elasticsearch/elasticsearch:${STACK_VERSION}
    volumes:
      - ./certs:/usr/share/elasticsearch/config/certs
      - ./esdata01:/usr/share/elasticsearch/data
    ports:
      - ${ES_PORT}:9200
    environment:
      - node.name=es01
      - cluster.name=${CLUSTER_NAME}
      - cluster.initial_master_nodes=es01,es02,es03
      - discovery.seed_hosts=es02,es03
      - ELASTIC_PASSWORD=${ELASTIC_PASSWORD}
      - bootstrap.memory_lock=true
      - xpack.security.enabled=true
      - xpack.security.http.ssl.enabled=true
      - xpack.security.http.ssl.key=certs/es01/es01.key
      - xpack.security.http.ssl.certificate=certs/es01/es01.crt
      - xpack.security.http.ssl.certificate_authorities=certs/ca/ca.crt
      - xpack.security.transport.ssl.enabled=true
      - xpack.security.transport.ssl.key=certs/es01/es01.key
      - xpack.security.transport.ssl.certificate=certs/es01/es01.crt
      - xpack.security.transport.ssl.certificate_authorities=certs/ca/ca.crt
      - xpack.security.transport.ssl.verification_mode=certificate
      - xpack.license.self_generated.type=${LICENSE}
    mem_limit: ${MEM_LIMIT}
    ulimits:
      memlock:
        soft: -1
        hard: -1
    healthcheck:
      test:
        [
          "CMD-SHELL",
          "curl -s --cacert config/certs/ca/ca.crt https://localhost:9200 | grep -q 'missing authentication credentials'",
        ]
      interval: 10s
      timeout: 10s
      retries: 120

  es02:
    depends_on:
      - es01
    image: docker.elastic.co/elasticsearch/elasticsearch:${STACK_VERSION}
    volumes:
      - ./certs:/usr/share/elasticsearch/config/certs
      - ./esdata02:/usr/share/elasticsearch/data
    environment:
      - node.name=es02
      - cluster.name=${CLUSTER_NAME}
      - cluster.initial_master_nodes=es01,es02,es03
      - discovery.seed_hosts=es01,es03
      - bootstrap.memory_lock=true
      - xpack.security.enabled=true
      - xpack.security.http.ssl.enabled=true
      - xpack.security.http.ssl.key=certs/es02/es02.key
      - xpack.security.http.ssl.certificate=certs/es02/es02.crt
      - xpack.security.http.ssl.certificate_authorities=certs/ca/ca.crt
      - xpack.security.transport.ssl.enabled=true
      - xpack.security.transport.ssl.key=certs/es02/es02.key
      - xpack.security.transport.ssl.certificate=certs/es02/es02.crt
      - xpack.security.transport.ssl.certificate_authorities=certs/ca/ca.crt
      - xpack.security.transport.ssl.verification_mode=certificate
      - xpack.license.self_generated.type=${LICENSE}
    mem_limit: ${MEM_LIMIT}
    ulimits:
      memlock:
        soft: -1
        hard: -1
    healthcheck:
      test:
        [
          "CMD-SHELL",
          "curl -s --cacert config/certs/ca/ca.crt https://localhost:9200 | grep -q 'missing authentication credentials'",
        ]
      interval: 10s
      timeout: 10s
      retries: 120

  es03:
    depends_on:
      - es02
    image: docker.elastic.co/elasticsearch/elasticsearch:${STACK_VERSION}
    volumes:
      - ./certs:/usr/share/elasticsearch/config/certs
      - ./esdata03:/usr/share/elasticsearch/data
    environment:
      - node.name=es03
      - cluster.name=${CLUSTER_NAME}
      - cluster.initial_master_nodes=es01,es02,es03
      - discovery.seed_hosts=es01,es02
      - bootstrap.memory_lock=true
      - xpack.security.enabled=true
      - xpack.security.http.ssl.enabled=true
      - xpack.security.http.ssl.key=certs/es03/es03.key
      - xpack.security.http.ssl.certificate=certs/es03/es03.crt
      - xpack.security.http.ssl.certificate_authorities=certs/ca/ca.crt
      - xpack.security.transport.ssl.enabled=true
      - xpack.security.transport.ssl.key=certs/es03/es03.key
      - xpack.security.transport.ssl.certificate=certs/es03/es03.crt
      - xpack.security.transport.ssl.certificate_authorities=certs/ca/ca.crt
      - xpack.security.transport.ssl.verification_mode=certificate
      - xpack.license.self_generated.type=${LICENSE}
    mem_limit: ${MEM_LIMIT}
    ulimits:
      memlock:
        soft: -1
        hard: -1
    healthcheck:
      test:
        [
          "CMD-SHELL",
          "curl -s --cacert config/certs/ca/ca.crt https://localhost:9200 | grep -q 'missing authentication credentials'",
        ]
      interval: 10s
      timeout: 10s
      retries: 120

  kibana:
    depends_on:
      es01:
        condition: service_healthy
      es02:
        condition: service_healthy
      es03:
        condition: service_healthy
    image: docker.elastic.co/kibana/kibana:${STACK_VERSION}
    volumes:
      - ./certs:/usr/share/kibana/config/certs
      - ./kibanadata:/usr/share/kibana/data
    ports:
      - ${KIBANA_PORT}:5601
    environment:
      - I18N_LOCALE=zh-CN
      - SERVER_PUBLICBASEURL=https://kibana.xxxxxxx.com
      - TZ=Asia/Shanghai
      - SERVERNAME=kibana
      - ELASTICSEARCH_HOSTS=https://es01:9200
      - ELASTICSEARCH_USERNAME=kibana_system
      - ELASTICSEARCH_PASSWORD=${KIBANA_PASSWORD}
      - ELASTICSEARCH_SSL_CERTIFICATEAUTHORITIES=config/certs/ca/ca.crt
    mem_limit: ${MEM_LIMIT}
    healthcheck:
      test:
        [
          "CMD-SHELL",
          "curl -s -I http://localhost:5601 | grep -q 'HTTP/1.1 302 Found'",
        ]
      interval: 10s
      timeout: 10s
      retries: 120

#volumes:
#  certs:
#    driver: local
#  esdata01:
#    driver: local
#  esdata02:
#    driver: local
#  esdata03:
#    driver: local
#  kibanadata:
#    driver: local

 

   

测试elasticearch

# curl --cacert /data/apps/elasticsearch/certs/ca/ca.crt -u elastic https://localhost:9200
  • 1.
   
Enter host password for user 'elastic':
{
  "name" : "es01",
  "cluster_name" : "docker-cluster",
  "cluster_uuid" : "bcfjm34lR6i8poNPYZ2NSw",
  "version" : {
    "number" : "8.7.0",
    "build_flavor" : "default",
    "build_type" : "docker",
    "build_hash" : "09520b59b6bc1057340b55750186466ea715e30e",
    "build_date" : "2023-03-27T16:31:09.816451435Z",
    "build_snapshot" : false,
    "lucene_version" : "9.5.0",
    "minimum_wire_compatibility_version" : "7.17.0",
    "minimum_index_compatibility_version" : "7.0.0"
  },
  "tagline" : "You Know, for Search"
}

 

   

参考文档

 https://www.elastic.co/guide/en/elasticsearch/reference/8.7/docker.html#docker-compose-file

标签:compose,xpack,ca,es8.7,ssl,certs,es01,docker,security
From: https://www.cnblogs.com/cheyunhua/p/17412620.html

相关文章

  • 如何解决dotnet程序打包的docker镜像创建容器后容器内的date时间正确但是dotnet获取到
    这个问题通常是由于时区设置不正确导致的。你可以尝试以下解决方法:在Dockerfile中设置时区:在Dockerfile中添加以下命令:RUNln-sf/usr/share/zoneinfo/Asia/Shanghai/etc/localtime这将设置容器的时区为上海时区。你也可以替换成你所在的时区。在dotnet程序中设置时区:......
  • 关于Docker报错
    idea连接docker里的mysql镜像时报错:[28000][1045]Accessdeniedforuser'root'@'172.17.0.1'(usingpassword:YES) 解决:命令:dockerexec-itmysql/bin/bash进入mysql:mysql-uroot-proot开启远程访问:ALTERUSER'root'@'%'IDENTIFIED......
  • OpenHarmony Docker移植实践
      Docker简介从操作系统诞生之日起,虚拟化技术就不断的演进与发展,结合目前云原生的发展态势,容器无疑是其中的重要一环。Docker是一个开源的软件项目,可以在Linux操作系统上提供一层额外的抽象,让用户程序部署在一个相对隔离的运行环境,并提供自动管理机制。需要额外指出的是......
  • Windows下安装docker desktop
    Windows下安装dockerdesktop官网下载安装程序.exe官网:https://docs.docker.com/desktop/install/windows-install/打开虚拟化WSL2控制面板程序启用或关闭Window功能勾选“适用于Linux的Windows子系统”&“虚拟机平台”确认后,重启电脑管理员身份打开命令提示符......
  • 使用buildx在x86机器上面编译arm64架构的Docker镜像
    buildx多架构编译安装docker下载docker下载buildx安装架构支持dockerrun--privileged--rmtonistiigi/binfmt--installall创建一个自己的空间buildxcreate--use--namemybuilder检查支持的架构buildxinspectmybuilder--bootstrapNodes:Name:mybu......
  • docker 安装nginx 主机可以访问,但是外网访问不了--set:nu
    在外网确实访问不了:第一步:查看端口是否打开ss  -auput|grep":80"第二:查看防火墙是否打开firewall -cmd --state第三:是否缺少内核的转发vim/etc/sysctl.conf添加 net.ipv4.ip_forward=1查看配置是否生效 ......
  • Docker网络
    基本概念是什么?是docker对容器网络隔离的一项技术,提供了多种不同的模式供用户使用,选择不同的网络模式来实现容器网络的互通以及彻底的隔离。为什么需要?实现容器间的网络隔离实现部分容器之间的网络共享管理多个子网下容器的IP能干什么提供了多种模式,可以定制化的为每个......
  • CentOS7.7安装docker
    1.背景想自己部署一套halo,发现需要docker环境,而且docker现在已经用处广泛,所以在CentOS服务器上安装docker2.步骤#Uninstalloldversionssudoyumremovedocker\docker-client\docker-client-latest\docker-co......
  • docker 安装redis遇到的问题
    ocker:Errorresponsefromdaemon:driverfailedprogrammingexternalconnectivityonendpointmyredis(1cd3cedb32fe0bc958bf68043169dc47a823da902c00f2e225d5bba5d20922f6):Errorstartinguserlandproxy:listentcp40.0.0.0:6379:bind:addressalreadyinus......
  • Docker 安装 MQTT(EMQX)
    Docker安装MQTT(EMQX)[root@localhost~]#dockerpullemqx:4.4.164.4.16:Pullingfromlibrary/emqx3f9582a2cbe7:Pullcomplete396ee3d6a271:Pullcompletef79aa88ad721:Pullcomplete8943a0bcb1f0:Pullcomplete66a2b18c61a7:PullcompleteDigest:sh......