Skip to content

Instantly share code, notes, and snippets.

@kuccello
Last active May 26, 2023 08:07
Show Gist options
  • Select an option

  • Save kuccello/27c4502b8f6cb66d32a4743899fd5a7c to your computer and use it in GitHub Desktop.

Select an option

Save kuccello/27c4502b8f6cb66d32a4743899fd5a7c to your computer and use it in GitHub Desktop.

Revisions

  1. kuccello revised this gist Jun 16, 2022. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion docker-compose.yml
    Original file line number Diff line number Diff line change
    @@ -219,7 +219,7 @@ services:
    - "ent_search.external_url='http://localhost:3002'"
    - "ent_search.listen_host=0.0.0.0"
    - "ent_search.listen_port=3002"
    mem_limit: ${MEM_LIMIT}
    mem_limit: 4gb
    healthcheck:
    test:
    [
  2. kuccello revised this gist Jun 15, 2022. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion docker-compose.yml
    Original file line number Diff line number Diff line change
    @@ -201,7 +201,7 @@ services:
    ports:
    - 3002:3002
    environment:
    - "secret_management.encryption_keys=['0c5847ee7fc66f5154ba4b8874c0149c27e0ad8939d44b4517011aaef25a8df7']"
    - "secret_management.encryption_keys=['<REDACTED: make your own with: openssl rand -hex 32>']"
    - "allow_es_settings_modification=true"
    - "elasticsearch.host='https://es01:9200'"
    - "elasticsearch.username='elastic'"
  3. kuccello created this gist Jun 15, 2022.
    278 changes: 278 additions & 0 deletions docker-compose.yml
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,278 @@
    version: "2.2"

    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.http.ssl.verification_mode=certificate
    - 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.http.ssl.verification_mode=certificate
    - 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.http.ssl.verification_mode=certificate
    - 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

    enterprisesearch:
    depends_on:
    es01:
    condition: service_healthy
    es02:
    condition: service_healthy
    es03:
    condition: service_healthy
    image: docker.elastic.co/enterprise-search/enterprise-search:${STACK_VERSION}
    volumes:
    - certs:/usr/share/enterprise-search/config/certs
    - enterprisesearchdata:/usr/share/enterprise-search/data
    ports:
    - 3002:3002
    environment:
    - "secret_management.encryption_keys=['0c5847ee7fc66f5154ba4b8874c0149c27e0ad8939d44b4517011aaef25a8df7']"
    - "allow_es_settings_modification=true"
    - "elasticsearch.host='https://es01:9200'"
    - "elasticsearch.username='elastic'"
    - "elasticsearch.password='<REDACTED>'"
    - "elasticsearch.ssl.enabled=true"
    - "elasticsearch.ssl.certificate_authority='/usr/share/enterprise-search/config/certs/ca/ca.crt'"
    - "elasticsearch.ssl.certificate='/usr/share/enterprise-search/config/certs/es01/es01.crt'"
    - "elasticsearch.ssl.key='/usr/share/enterprise-search/config/certs/es01/es01.key'"
    - "elasticsearch.ssl.verify=true"
    - "kibana.host='http://0.0.0.0:5601'"
    - "kibana.external_url='http://localhost:5601'"
    - "secret_session_key=<REDACTED: make your own with 'openssl rand -hex 32'>"
    - "secret_management.enforce_valid_encryption_keys=false"
    - "ent_search.ssl.enabled=false"
    - "ent_search.external_url='http://localhost:3002'"
    - "ent_search.listen_host=0.0.0.0"
    - "ent_search.listen_port=3002"
    mem_limit: ${MEM_LIMIT}
    healthcheck:
    test:
    [
    "CMD-SHELL",
    "curl -s -I http://localhost:3002 | grep -q 'HTTP/1.1 302 Found'",
    ]
    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
    - <REDACTED: put your path to your kibanan config file here>kibana.yml:/usr/share/kibana/config/kibana.yml
    ports:
    - ${KIBANA_PORT}:5601
    environment:
    - 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
    enterprisesearchdata:
    driver: local