1
+ version : " 2.2"
2
+
3
+ services :
4
+ setup :
5
+ image : docker.elastic.co/elasticsearch/elasticsearch:${STACK_VERSION}
6
+ volumes :
7
+ - certs:/usr/share/elasticsearch/config/certs
8
+ user : " 0"
9
+ command : >
10
+ bash -c '
11
+ if [ x${ELASTIC_PASSWORD} == x ]; then
12
+ echo "Set the ELASTIC_PASSWORD environment variable in the .env file";
13
+ exit 1;
14
+ elif [ x${KIBANA_PASSWORD} == x ]; then
15
+ echo "Set the KIBANA_PASSWORD environment variable in the .env file";
16
+ exit 1;
17
+ fi;
18
+ if [ ! -f config/certs/ca.zip ]; then
19
+ echo "Creating CA";
20
+ bin/elasticsearch-certutil ca --silent --pem -out config/certs/ca.zip;
21
+ unzip config/certs/ca.zip -d config/certs;
22
+ fi;
23
+ if [ ! -f config/certs/certs.zip ]; then
24
+ echo "Creating certs";
25
+ echo -ne \
26
+ "instances:\n"\
27
+ " - name: es01\n"\
28
+ " dns:\n"\
29
+ " - es01\n"\
30
+ " - localhost\n"\
31
+ " ip:\n"\
32
+ " - 127.0.0.1\n"\
33
+ " - name: es02\n"\
34
+ " dns:\n"\
35
+ " - es02\n"\
36
+ " - localhost\n"\
37
+ " ip:\n"\
38
+ " - 127.0.0.1\n"\
39
+ " - name: es03\n"\
40
+ " dns:\n"\
41
+ " - es03\n"\
42
+ " - localhost\n"\
43
+ " ip:\n"\
44
+ " - 127.0.0.1\n"\
45
+ > config/certs/instances.yml;
46
+ 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;
47
+ unzip config/certs/certs.zip -d config/certs;
48
+ fi;
49
+ echo "Setting file permissions"
50
+ chown -R root:root config/certs;
51
+ find . -type d -exec chmod 750 \{\} \;;
52
+ find . -type f -exec chmod 640 \{\} \;;
53
+ echo "Waiting for Elasticsearch availability";
54
+ until curl -s --cacert config/certs/ca/ca.crt https://es01:9200 | grep -q "missing authentication credentials"; do sleep 30; done;
55
+ echo "Setting kibana_system password";
56
+ 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;
57
+ echo "All done!";
58
+ '
59
+ healthcheck :
60
+ test : ["CMD-SHELL", "[ -f config/certs/es01/es01.crt ]"]
61
+ interval : 1s
62
+ timeout : 5s
63
+ retries : 120
64
+
65
+ es01 :
66
+ depends_on :
67
+ setup :
68
+ condition : service_healthy
69
+ image : docker.elastic.co/elasticsearch/elasticsearch:${STACK_VERSION}
70
+ volumes :
71
+ - certs:/usr/share/elasticsearch/config/certs
72
+ - esdata01:/usr/share/elasticsearch/data
73
+ ports :
74
+ - ${ES_PORT}:9200
75
+ environment :
76
+ - node.name=es01
77
+ - cluster.name=${CLUSTER_NAME}
78
+ - cluster.initial_master_nodes=es01,es02,es03
79
+ - discovery.seed_hosts=es02,es03
80
+ - ELASTIC_PASSWORD=${ELASTIC_PASSWORD}
81
+ - bootstrap.memory_lock=true
82
+ - xpack.security.enabled=true
83
+ - xpack.security.http.ssl.enabled=true
84
+ - xpack.security.http.ssl.key=certs/es01/es01.key
85
+ - xpack.security.http.ssl.certificate=certs/es01/es01.crt
86
+ - xpack.security.http.ssl.certificate_authorities=certs/ca/ca.crt
87
+ - xpack.security.transport.ssl.enabled=true
88
+ - xpack.security.transport.ssl.key=certs/es01/es01.key
89
+ - xpack.security.transport.ssl.certificate=certs/es01/es01.crt
90
+ - xpack.security.transport.ssl.certificate_authorities=certs/ca/ca.crt
91
+ - xpack.security.transport.ssl.verification_mode=certificate
92
+ - xpack.license.self_generated.type=${LICENSE}
93
+ mem_limit : ${MEM_LIMIT}
94
+ ulimits :
95
+ memlock :
96
+ soft : -1
97
+ hard : -1
98
+ healthcheck :
99
+ test :
100
+ [
101
+ " CMD-SHELL" ,
102
+ " curl -s --cacert config/certs/ca/ca.crt https://localhost:9200 | grep -q 'missing authentication credentials'" ,
103
+ ]
104
+ interval : 10s
105
+ timeout : 10s
106
+ retries : 120
107
+
108
+ es02 :
109
+ depends_on :
110
+ - es01
111
+ image : docker.elastic.co/elasticsearch/elasticsearch:${STACK_VERSION}
112
+ volumes :
113
+ - certs:/usr/share/elasticsearch/config/certs
114
+ - esdata02:/usr/share/elasticsearch/data
115
+ environment :
116
+ - node.name=es02
117
+ - cluster.name=${CLUSTER_NAME}
118
+ - cluster.initial_master_nodes=es01,es02,es03
119
+ - discovery.seed_hosts=es01,es03
120
+ - bootstrap.memory_lock=true
121
+ - xpack.security.enabled=true
122
+ - xpack.security.http.ssl.enabled=true
123
+ - xpack.security.http.ssl.key=certs/es02/es02.key
124
+ - xpack.security.http.ssl.certificate=certs/es02/es02.crt
125
+ - xpack.security.http.ssl.certificate_authorities=certs/ca/ca.crt
126
+ - xpack.security.transport.ssl.enabled=true
127
+ - xpack.security.transport.ssl.key=certs/es02/es02.key
128
+ - xpack.security.transport.ssl.certificate=certs/es02/es02.crt
129
+ - xpack.security.transport.ssl.certificate_authorities=certs/ca/ca.crt
130
+ - xpack.security.transport.ssl.verification_mode=certificate
131
+ - xpack.license.self_generated.type=${LICENSE}
132
+ mem_limit : ${MEM_LIMIT}
133
+ ulimits :
134
+ memlock :
135
+ soft : -1
136
+ hard : -1
137
+ healthcheck :
138
+ test :
139
+ [
140
+ " CMD-SHELL" ,
141
+ " curl -s --cacert config/certs/ca/ca.crt https://localhost:9200 | grep -q 'missing authentication credentials'" ,
142
+ ]
143
+ interval : 10s
144
+ timeout : 10s
145
+ retries : 120
146
+
147
+ es03 :
148
+ depends_on :
149
+ - es02
150
+ image : docker.elastic.co/elasticsearch/elasticsearch:${STACK_VERSION}
151
+ volumes :
152
+ - certs:/usr/share/elasticsearch/config/certs
153
+ - esdata03:/usr/share/elasticsearch/data
154
+ environment :
155
+ - node.name=es03
156
+ - cluster.name=${CLUSTER_NAME}
157
+ - cluster.initial_master_nodes=es01,es02,es03
158
+ - discovery.seed_hosts=es01,es02
159
+ - bootstrap.memory_lock=true
160
+ - xpack.security.enabled=true
161
+ - xpack.security.http.ssl.enabled=true
162
+ - xpack.security.http.ssl.key=certs/es03/es03.key
163
+ - xpack.security.http.ssl.certificate=certs/es03/es03.crt
164
+ - xpack.security.http.ssl.certificate_authorities=certs/ca/ca.crt
165
+ - xpack.security.transport.ssl.enabled=true
166
+ - xpack.security.transport.ssl.key=certs/es03/es03.key
167
+ - xpack.security.transport.ssl.certificate=certs/es03/es03.crt
168
+ - xpack.security.transport.ssl.certificate_authorities=certs/ca/ca.crt
169
+ - xpack.security.transport.ssl.verification_mode=certificate
170
+ - xpack.license.self_generated.type=${LICENSE}
171
+ mem_limit : ${MEM_LIMIT}
172
+ ulimits :
173
+ memlock :
174
+ soft : -1
175
+ hard : -1
176
+ healthcheck :
177
+ test :
178
+ [
179
+ " CMD-SHELL" ,
180
+ " curl -s --cacert config/certs/ca/ca.crt https://localhost:9200 | grep -q 'missing authentication credentials'" ,
181
+ ]
182
+ interval : 10s
183
+ timeout : 10s
184
+ retries : 120
185
+
186
+ kibana :
187
+ depends_on :
188
+ es01 :
189
+ condition : service_healthy
190
+ es02 :
191
+ condition : service_healthy
192
+ es03 :
193
+ condition : service_healthy
194
+ image : docker.elastic.co/kibana/kibana:${STACK_VERSION}
195
+ volumes :
196
+ - certs:/usr/share/kibana/config/certs
197
+ - kibanadata:/usr/share/kibana/data
198
+ ports :
199
+ - ${KIBANA_PORT}:5601
200
+ environment :
201
+ - SERVERNAME=kibana
202
+ - ELASTICSEARCH_HOSTS=https://es01:9200
203
+ - ELASTICSEARCH_USERNAME=kibana_system
204
+ - ELASTICSEARCH_PASSWORD=${KIBANA_PASSWORD}
205
+ - ELASTICSEARCH_SSL_CERTIFICATEAUTHORITIES=config/certs/ca/ca.crt
206
+ mem_limit : ${MEM_LIMIT}
207
+ healthcheck :
208
+ test :
209
+ [
210
+ " CMD-SHELL" ,
211
+ " curl -s -I http://localhost:5601 | grep -q 'HTTP/1.1 302 Found'" ,
212
+ ]
213
+ interval : 10s
214
+ timeout : 10s
215
+ retries : 120
216
+
217
+ volumes :
218
+ certs :
219
+ driver : local
220
+ esdata01 :
221
+ driver : local
222
+ esdata02 :
223
+ driver : local
224
+ esdata03 :
225
+ driver : local
226
+ kibanadata :
227
+ driver : local
0 commit comments