docker-compose.yml 8.7 KB

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