docker-compose.yml 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227
  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. mem_limit: ${MEM_LIMIT}
  92. ulimits:
  93. memlock:
  94. soft: -1
  95. hard: -1
  96. healthcheck:
  97. test:
  98. [
  99. "CMD-SHELL",
  100. "curl -s --cacert config/certs/ca/ca.crt https://localhost:9200 | grep -q 'missing authentication credentials'",
  101. ]
  102. interval: 10s
  103. timeout: 10s
  104. retries: 120
  105. es02:
  106. depends_on:
  107. - es01
  108. image: docker.elastic.co/elasticsearch/elasticsearch:${STACK_VERSION}
  109. volumes:
  110. - certs:/usr/share/elasticsearch/config/certs
  111. - esdata02:/usr/share/elasticsearch/data
  112. environment:
  113. - node.name=es02
  114. - cluster.name=${CLUSTER_NAME}
  115. - cluster.initial_master_nodes=es01,es02,es03
  116. - discovery.seed_hosts=es01,es03
  117. - bootstrap.memory_lock=true
  118. - xpack.security.enabled=true
  119. - xpack.security.http.ssl.enabled=true
  120. - xpack.security.http.ssl.key=certs/es02/es02.key
  121. - xpack.security.http.ssl.certificate=certs/es02/es02.crt
  122. - xpack.security.http.ssl.certificate_authorities=certs/ca/ca.crt
  123. - xpack.security.transport.ssl.enabled=true
  124. - xpack.security.transport.ssl.key=certs/es02/es02.key
  125. - xpack.security.transport.ssl.certificate=certs/es02/es02.crt
  126. - xpack.security.transport.ssl.certificate_authorities=certs/ca/ca.crt
  127. - xpack.security.transport.ssl.verification_mode=certificate
  128. - xpack.license.self_generated.type=${LICENSE}
  129. mem_limit: ${MEM_LIMIT}
  130. ulimits:
  131. memlock:
  132. soft: -1
  133. hard: -1
  134. healthcheck:
  135. test:
  136. [
  137. "CMD-SHELL",
  138. "curl -s --cacert config/certs/ca/ca.crt https://localhost:9200 | grep -q 'missing authentication credentials'",
  139. ]
  140. interval: 10s
  141. timeout: 10s
  142. retries: 120
  143. es03:
  144. depends_on:
  145. - es02
  146. image: docker.elastic.co/elasticsearch/elasticsearch:${STACK_VERSION}
  147. volumes:
  148. - certs:/usr/share/elasticsearch/config/certs
  149. - esdata03:/usr/share/elasticsearch/data
  150. environment:
  151. - node.name=es03
  152. - cluster.name=${CLUSTER_NAME}
  153. - cluster.initial_master_nodes=es01,es02,es03
  154. - discovery.seed_hosts=es01,es02
  155. - bootstrap.memory_lock=true
  156. - xpack.security.enabled=true
  157. - xpack.security.http.ssl.enabled=true
  158. - xpack.security.http.ssl.key=certs/es03/es03.key
  159. - xpack.security.http.ssl.certificate=certs/es03/es03.crt
  160. - xpack.security.http.ssl.certificate_authorities=certs/ca/ca.crt
  161. - xpack.security.transport.ssl.enabled=true
  162. - xpack.security.transport.ssl.key=certs/es03/es03.key
  163. - xpack.security.transport.ssl.certificate=certs/es03/es03.crt
  164. - xpack.security.transport.ssl.certificate_authorities=certs/ca/ca.crt
  165. - xpack.security.transport.ssl.verification_mode=certificate
  166. - xpack.license.self_generated.type=${LICENSE}
  167. mem_limit: ${MEM_LIMIT}
  168. ulimits:
  169. memlock:
  170. soft: -1
  171. hard: -1
  172. healthcheck:
  173. test:
  174. [
  175. "CMD-SHELL",
  176. "curl -s --cacert config/certs/ca/ca.crt https://localhost:9200 | grep -q 'missing authentication credentials'",
  177. ]
  178. interval: 10s
  179. timeout: 10s
  180. retries: 120
  181. kibana:
  182. depends_on:
  183. es01:
  184. condition: service_healthy
  185. es02:
  186. condition: service_healthy
  187. es03:
  188. condition: service_healthy
  189. image: docker.elastic.co/kibana/kibana:${STACK_VERSION}
  190. volumes:
  191. - certs:/usr/share/kibana/config/certs
  192. - kibanadata:/usr/share/kibana/data
  193. ports:
  194. - ${KIBANA_PORT}:5601
  195. environment:
  196. - SERVERNAME=kibana
  197. - ELASTICSEARCH_HOSTS=https://es01:9200
  198. - ELASTICSEARCH_USERNAME=kibana_system
  199. - ELASTICSEARCH_PASSWORD=${KIBANA_PASSWORD}
  200. - ELASTICSEARCH_SSL_CERTIFICATEAUTHORITIES=config/certs/ca/ca.crt
  201. mem_limit: ${MEM_LIMIT}
  202. healthcheck:
  203. test:
  204. [
  205. "CMD-SHELL",
  206. "curl -s -I http://localhost:5601 | grep -q 'HTTP/1.1 302 Found'",
  207. ]
  208. interval: 10s
  209. timeout: 10s
  210. retries: 120
  211. volumes:
  212. certs:
  213. driver: local
  214. esdata01:
  215. driver: local
  216. esdata02:
  217. driver: local
  218. esdata03:
  219. driver: local
  220. kibanadata:
  221. driver: local