Advertisement
domcabral9

Docker Compose 2Nodes Elastic

Oct 9th, 2024
24
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
YAML 6.49 KB | Cybersecurity | 0 0
  1. services:
  2.   setup:
  3.     image: docker.elastic.co/elasticsearch/elasticsearch:8.15.2
  4.     volumes:
  5.      - certs:/usr/share/elasticsearch/config/certs
  6.     user: "0"
  7.     command: >
  8.      bash -c '
  9.         if [ x${ELASTIC_PASSWORD} == x ]; then
  10.           echo "Set the ELASTIC_PASSWORD environment variable in the .env file";
  11.           exit 1;
  12.         elif [ x${KIBANA_PASSWORD} == x ]; then
  13.           echo "Set the KIBANA_PASSWORD environment variable in the .env file";
  14.           exit 1;
  15.         fi;
  16.         if [ ! -f config/certs/ca.zip ]; then
  17.           echo "Creating CA";
  18.           bin/elasticsearch-certutil ca --silent --pem -out config/certs/ca.zip;
  19.           unzip config/certs/ca.zip -d config/certs;
  20.         fi;
  21.         if [ ! -f config/certs/certs.zip ]; then
  22.           echo "Creating certs";
  23.           echo -ne \
  24.           "instances:\n"\
  25.           "  - name: dedaleiro01\n"\
  26.           "    dns:\n"\
  27.           "      - dedaleiro01\n"\
  28.           "      - localhost\n"\
  29.           "    ip:\n"\
  30.           "      - 127.0.0.1\n"\
  31.           "  - name: dedaleiro02\n"\
  32.           "    dns:\n"\
  33.           "      - dedaleiro02\n"\
  34.           "      - localhost\n"\
  35.           "    ip:\n"\
  36.           "      - 127.0.0.1\n"\
  37.           > config/certs/instances.yml;
  38.           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;
  39.           unzip config/certs/certs.zip -d config/certs;
  40.         fi;
  41.         echo "Setting file permissions"
  42.         chown -R root:root config/certs;
  43.         find . -type d -exec chmod 750 \{\} \;;
  44.         find . -type f -exec chmod 640 \{\} \;;
  45.         echo "Waiting for Elasticsearch availability";
  46.         until curl -s --cacert config/certs/ca/ca.crt https://dedaleiro01:9200 | grep -q "missing authentication credentials"; do sleep 60; done;
  47.         echo "Setting kibana_system password";
  48.         until curl -s -X POST --cacert config/certs/ca/ca.crt -u "elastic:${ELASTIC_PASSWORD}" -H "Content-Type: application/json" https://dedaleiro01:9200/_security/user/kibana_system/_password -d "{\"password\":\"${KIBANA_PASSWORD}\"}" | grep -q "^{}"; do sleep 10; done;
  49.         echo "All done!";
  50.       '
  51.     healthcheck:
  52.       test: ["CMD-SHELL", "[ -f config/certs/dedaleiro01/dedaleiro01.crt ]"]
  53.       interval: 1s
  54.       timeout: 20s
  55.       retries: 120
  56.  
  57.   dedaleiro01:
  58.     depends_on:
  59.       setup:
  60.         condition: service_healthy
  61.     image: docker.elastic.co/elasticsearch/elasticsearch:8.15.2
  62.     volumes:
  63.      - certs:/usr/share/elasticsearch/config/certs
  64.       - dedaleirodata01:/usr/share/elasticsearch/data
  65.     ports:
  66.      - ${ES_PORT}:9200
  67.     environment:
  68.      - node.name=dedaleiro01
  69.       - cluster.name=${CLUSTER_NAME}
  70.       - cluster.initial_master_nodes=dedaleiro01,dedaleiro02
  71.       - discovery.seed_hosts=dedaleiro02
  72.       - ELASTIC_PASSWORD=${ELASTIC_PASSWORD}
  73.       - bootstrap.memory_lock=true
  74.       - xpack.security.enabled=true
  75.       - xpack.security.http.ssl.enabled=true
  76.       - xpack.security.http.ssl.key=certs/dedaleiro01/dedaleiro01.key
  77.       - xpack.security.http.ssl.certificate=certs/dedaleiro01/dedaleiro01.crt
  78.       - xpack.security.http.ssl.certificate_authorities=certs/ca/ca.crt
  79.       - xpack.security.transport.ssl.enabled=true
  80.       - xpack.security.transport.ssl.key=certs/dedaleiro01/dedaleiro01.key
  81.       - xpack.security.transport.ssl.certificate=certs/dedaleiro01/dedaleiro01.crt
  82.       - xpack.security.transport.ssl.certificate_authorities=certs/ca/ca.crt
  83.       - xpack.security.transport.ssl.verification_mode=certificate
  84.       - xpack.license.self_generated.type=${LICENSE}
  85.     mem_limit: ${MEM_LIMIT}
  86.     ulimits:
  87.       memlock:
  88.         soft: -1
  89.         hard: -1
  90.     healthcheck:
  91.       test:
  92.        [
  93.           "CMD-SHELL",
  94.           "curl -s --cacert config/certs/ca/ca.crt https://localhost:9200 | grep -q 'missing authentication credentials'",
  95.         ]
  96.       interval: 10s
  97.       timeout: 20s
  98.       retries: 120
  99.  
  100.   dedaleiro02:
  101.     depends_on:
  102.      - dedaleiro01
  103.     image: docker.elastic.co/elasticsearch/elasticsearch:8.15.2
  104.     volumes:
  105.      - certs:/usr/share/elasticsearch/config/certs
  106.       - dedaleirodata02:/usr/share/elasticsearch/data
  107.     environment:
  108.      - node.name=dedaleiro02
  109.       - cluster.name=${CLUSTER_NAME}
  110.       - cluster.initial_master_nodes=dedaleiro01,dedaleiro02
  111.       - discovery.seed_hosts=dedaleiro01
  112.       - bootstrap.memory_lock=true
  113.       - xpack.security.enabled=true
  114.       - xpack.security.http.ssl.enabled=true
  115.       - xpack.security.http.ssl.key=certs/dedaleiro02/dedaleiro02.key
  116.       - xpack.security.http.ssl.certificate=certs/dedaleiro02/dedaleiro02.crt
  117.       - xpack.security.http.ssl.certificate_authorities=certs/ca/ca.crt
  118.       - xpack.security.transport.ssl.enabled=true
  119.       - xpack.security.transport.ssl.key=certs/dedaleiro02/dedaleiro02.key
  120.       - xpack.security.transport.ssl.certificate=certs/dedaleiro02/dedaleiro02.crt
  121.       - xpack.security.transport.ssl.certificate_authorities=certs/ca/ca.crt
  122.       - xpack.security.transport.ssl.verification_mode=certificate
  123.       - xpack.license.self_generated.type=${LICENSE}
  124.     mem_limit: ${MEM_LIMIT}
  125.     ulimits:
  126.       memlock:
  127.         soft: -1
  128.         hard: -1
  129.     healthcheck:
  130.       test:
  131.        [
  132.           "CMD-SHELL",
  133.           "curl -s --cacert config/certs/ca/ca.crt https://localhost:9200 | grep -q 'missing authentication credentials'",
  134.         ]
  135.       interval: 10s
  136.       timeout: 20s
  137.       retries: 120
  138.  
  139.   kibana:
  140.     depends_on:
  141.       dedaleiro01:
  142.         condition: service_healthy
  143.       dedaleiro02:
  144.         condition: service_healthy
  145.     image: docker.elastic.co/kibana/kibana:8.15.2
  146.     volumes:
  147.      - certs:/usr/share/kibana/config/certs
  148.       - kibanadata:/usr/share/kibana/data
  149.     ports:
  150.      - ${KIBANA_PORT}:5601
  151.     environment:
  152.      - SERVERNAME=kibana
  153.       - ELASTICSEARCH_HOSTS=https://dedaleiro01:9200
  154.       - ELASTICSEARCH_USERNAME=kibana_system
  155.       - ELASTICSEARCH_PASSWORD=${KIBANA_PASSWORD}
  156.       - ELASTICSEARCH_SSL_CERTIFICATEAUTHORITIES=config/certs/ca/ca.crt
  157.     mem_limit: ${MEM_LIMIT}
  158.     healthcheck:
  159.       test:
  160.        [
  161.           "CMD-SHELL",
  162.           "curl -s -I http://localhost:5601 | grep -q 'HTTP/1.1 302 Found'",
  163.         ]
  164.       interval: 10s
  165.       timeout: 20s
  166.       retries: 120
  167.  
  168. volumes:
  169.   certs:
  170.     driver: local
  171.   dedaleirodata01:
  172.     driver: local
  173.   dedaleirodata02:
  174.     driver: local
  175.   kibanadata:
  176.     driver: local
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement