docker-compose.yml 8.0 KB

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