version:
'2.2'
services:
setup:
image:
docker.elastic.co/elasticsearch/elasticsearch
:
$
{
STACK_VERSION
}
volumes:
-
/home/tux/docker/volumes/es/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 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 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"
\
> 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:
-
/home/tux/docker/volumes/es/certs
:
/usr/share/elasticsearch/config/certs
-
/home/tux/docker/volumes/es/esdata01
:
/usr/share/elasticsearch/data
ports:
-
$
{
ES_PORT
}
:
9200
environment:
-
node.name=es01
-
cluster.name=$
{
CLUSTER_NAME
}
-
cluster.initial_master_nodes=es01
-
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
kibana:
depends_on:
es01:
condition:
service_healthy
image:
docker.elastic.co/kibana/kibana
:
$
{
STACK_VERSION
}
volumes:
-
/home/tux/docker/volumes/es/certs
:
/usr/share/kibana/config/certs
-
/home/tux/docker/volumes/es/kibanadata
:
/usr/share/kibana/data
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
-
ENTERPRISESEARCH_HOST=http
:
//enterprisesearch
:
$
{
ENTERPRISE_SEARCH_PORT
}
-
xpack.reporting.kibanaServer.hostname=localhost
mem_limit:
$
{
MEM_LIMIT
}
healthcheck:
test:
[
"CMD-SHELL"
,
]
interval:
10s
timeout:
10s
retries:
120
enterprisesearch:
depends_on:
es01:
condition:
service_healthy
kibana:
condition:
service_healthy
image:
docker.elastic.co/enterprise-search/enterprise-search
:
$
{
STACK_VERSION
}
volumes:
-
/home/tux/docker/volumes/es/certs
:
/usr/share/enterprise-search/config/certs
-
/home/tux/docker/volumes/es/enterprisesearchdata
:
/usr/share/enterprise-search/config
ports:
-
$
{
ENTERPRISE_SEARCH_PORT
}
:
3002
environment:
-
SERVERNAME=enterprisesearch
-
secret_management.encryption_keys=
[
$
{
ENCRYPTION_KEYS
}
]
-
allow_es_settings_modification=
true
-
elasticsearch.host=https
:
//es01
:
9200
-
elasticsearch.username=elastic
-
elasticsearch.password=$
{
ELASTIC_PASSWORD
}
-
elasticsearch.ssl.enabled=
true
-
elasticsearch.ssl.certificate_authority=/usr/share/enterprise-search/config/certs/ca/ca.crt
-
kibana.external_url=http
:
//kibana
:
5601
mem_limit:
$
{
MEM_LIMIT
}
healthcheck:
test:
[
"CMD-SHELL"
,
]
interval:
10s
timeout:
10s
retries:
120
volumes:
certs:
driver:
local
enterprisesearchdata:
driver:
local
esdata01:
driver:
local
kibanadata:
driver:
local