docker-compose-mongo-replicaset-tls.yaml 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. version: "3"
  2. services:
  3. mongo1:
  4. hostname: mongo1
  5. container_name: mongo1
  6. image: mongo:${MONGO_TAG}
  7. environment:
  8. MONGO_INITDB_DATABASE: mqtt
  9. networks:
  10. - emqx_bridge
  11. expose:
  12. - 27017
  13. ports:
  14. - 27011:27017
  15. restart: always
  16. volumes:
  17. - ../../apps/emqx/etc/certs/cert.pem:/etc/certs/cert.pem
  18. - ../../apps/emqx/etc/certs/key.pem:/etc/certs/key.pem
  19. command:
  20. - /bin/bash
  21. - -c
  22. - |
  23. cat /etc/certs/key.pem /etc/certs/cert.pem > /etc/certs/mongodb.pem
  24. mongod --ipv6 --bind_ip_all --tlsMode requireTLS --tlsCertificateKeyFile /etc/certs/mongodb.pem --replSet rs0
  25. mongo2:
  26. hostname: mongo2
  27. container_name: mongo2
  28. image: mongo:${MONGO_TAG}
  29. environment:
  30. MONGO_INITDB_DATABASE: mqtt
  31. networks:
  32. - emqx_bridge
  33. expose:
  34. - 27017
  35. ports:
  36. - 27012:27017
  37. restart: always
  38. volumes:
  39. - ../../apps/emqx/etc/certs/cert.pem:/etc/certs/cert.pem
  40. - ../../apps/emqx/etc/certs/key.pem:/etc/certs/key.pem
  41. command:
  42. - /bin/bash
  43. - -c
  44. - |
  45. cat /etc/certs/key.pem /etc/certs/cert.pem > /etc/certs/mongodb.pem
  46. mongod --ipv6 --bind_ip_all --tlsMode requireTLS --tlsCertificateKeyFile /etc/certs/mongodb.pem --replSet rs0
  47. mongo3:
  48. hostname: mongo3
  49. container_name: mongo3
  50. image: mongo:${MONGO_TAG}
  51. environment:
  52. MONGO_INITDB_DATABASE: mqtt
  53. networks:
  54. - emqx_bridge
  55. expose:
  56. - 27017
  57. ports:
  58. - 27013:27017
  59. restart: always
  60. volumes:
  61. - ../../apps/emqx/etc/certs/cert.pem:/etc/certs/cert.pem
  62. - ../../apps/emqx/etc/certs/key.pem:/etc/certs/key.pem
  63. command:
  64. - /bin/bash
  65. - -c
  66. - |
  67. cat /etc/certs/key.pem /etc/certs/cert.pem > /etc/certs/mongodb.pem
  68. mongod --ipv6 --bind_ip_all --tlsMode requireTLS --tlsCertificateKeyFile /etc/certs/mongodb.pem --replSet rs0
  69. mongo_client:
  70. image: mongo:${MONGO_TAG}
  71. container_name: mongo_client
  72. networks:
  73. - emqx_bridge
  74. depends_on:
  75. - mongo1
  76. - mongo2
  77. - mongo3
  78. volumes:
  79. - ../../apps/emqx/etc/certs/cacert.pem:/etc/certs/cacert.pem
  80. command:
  81. - /bin/bash
  82. - -c
  83. - |
  84. while ! mongo --host mongo1 --tls --tlsCAFile /etc/certs/cacert.pem --tlsAllowInvalidHostnames --eval 'db.runCommand("ping").ok' --quiet > /dev/null 2>&1; do
  85. sleep 1
  86. done
  87. while ! mongo --host mongo2 --tls --tlsCAFile /etc/certs/cacert.pem --tlsAllowInvalidHostnames --eval 'db.runCommand("ping").ok' --quiet > /dev/null 2>&1; do
  88. sleep 1
  89. done
  90. while ! mongo --host mongo3 --tls --tlsCAFile /etc/certs/cacert.pem --tlsAllowInvalidHostnames --eval 'db.runCommand("ping").ok' --quiet > /dev/null 2>&1; do
  91. sleep 1
  92. done
  93. mongo --host mongo1 --tls --tlsCAFile /etc/certs/cacert.pem --tlsAllowInvalidHostnames --eval "rs.initiate( { _id : 'rs0', members: [ { _id : 0, host : 'mongo1:27017' }, { _id : 1, host : 'mongo2:27017' }, { _id : 2, host : 'mongo3:27017' } ] })" --quiet
  94. mongo --host mongo1 --tls --tlsCAFile /etc/certs/cacert.pem --tlsAllowInvalidHostnames --eval "rs.status()" --quiet