docker-entrypoint.sh 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. #!/bin/bash
  2. ## EMQ docker image start script
  3. # Huang Rui <vowstar@gmail.com>
  4. # EMQ X Team <support@emqx.io>
  5. ## Shell setting
  6. if [[ -n "$DEBUG" ]]; then
  7. set -ex
  8. else
  9. set -e
  10. fi
  11. shopt -s nullglob
  12. ## Local IP address setting
  13. LOCAL_IP=$(hostname -i | grep -oE '((25[0-5]|(2[0-4]|1[0-9]|[1-9]|)[0-9])\.){3}(25[0-5]|(2[0-4]|1[0-9]|[1-9]|)[0-9])' | head -n 1)
  14. ## EMQ Base settings and plugins setting
  15. # Base settings in /opt/emqx/etc/emqx.conf
  16. # Plugin settings in /opt/emqx/etc/plugins
  17. if [[ -z "$EMQX_NAME" ]]; then
  18. EMQX_NAME="$(hostname)"
  19. export EMQX_NAME
  20. fi
  21. if [[ -z "$EMQX_HOST" ]]; then
  22. if [[ "$EMQX_CLUSTER__K8S__ADDRESS_TYPE" == "dns" ]] && [[ -n "$EMQX_CLUSTER__K8S__NAMESPACE" ]]; then
  23. EMQX_CLUSTER__K8S__SUFFIX=${EMQX_CLUSTER__K8S__SUFFIX:-"pod.cluster.local"}
  24. EMQX_HOST="${LOCAL_IP//./-}.$EMQX_CLUSTER__K8S__NAMESPACE.$EMQX_CLUSTER__K8S__SUFFIX"
  25. elif [[ "$EMQX_CLUSTER__K8S__ADDRESS_TYPE" == 'hostname' ]] && [[ -n "$EMQX_CLUSTER__K8S__NAMESPACE" ]]; then
  26. EMQX_CLUSTER__K8S__SUFFIX=${EMQX_CLUSTER__K8S__SUFFIX:-'svc.cluster.local'}
  27. EMQX_HOST=$(grep -h "^$LOCAL_IP" /etc/hosts | grep -o "$(hostname).*.$EMQX_CLUSTER__K8S__NAMESPACE.$EMQX_CLUSTER__K8S__SUFFIX")
  28. else
  29. EMQX_HOST="$LOCAL_IP"
  30. fi
  31. export EMQX_HOST
  32. fi
  33. if [[ -z "$EMQX_NODE_NAME" ]]; then
  34. export EMQX_NODE_NAME="$EMQX_NAME@$EMQX_HOST"
  35. fi
  36. # Set hosts to prevent cluster mode failed
  37. if [[ -z "$EMQX_NODE__PROCESS_LIMIT" ]]; then
  38. export EMQX_NODE__PROCESS_LIMIT=2097152
  39. fi
  40. if [[ -z "$EMQX_NODE__MAX_PORTS" ]]; then
  41. export EMQX_NODE__MAX_PORTS=1048576
  42. fi
  43. if [[ -z "$EMQX_NODE__MAX_ETS_TABLES" ]]; then
  44. export EMQX_NODE__MAX_ETS_TABLES=2097152
  45. fi
  46. if [[ -z "$EMQX_LISTENER__TCP__EXTERNAL__ACCEPTORS" ]]; then
  47. export EMQX_LISTENER__TCP__EXTERNAL__ACCEPTORS=64
  48. fi
  49. if [[ -z "$EMQX_LISTENER__TCP__EXTERNAL__MAX_CONNECTIONS" ]]; then
  50. export EMQX_LISTENER__TCP__EXTERNAL__MAX_CONNECTIONS=1024000
  51. fi
  52. if [[ -z "$EMQX_LISTENER__SSL__EXTERNAL__ACCEPTORS" ]]; then
  53. export EMQX_LISTENER__SSL__EXTERNAL__ACCEPTORS=32
  54. fi
  55. if [[ -z "$EMQX_LISTENER__SSL__EXTERNAL__MAX_CONNECTIONS" ]]; then
  56. export EMQX_LISTENER__SSL__EXTERNAL__MAX_CONNECTIONS=102400
  57. fi
  58. if [[ -z "$EMQX_LISTENER__WS__EXTERNAL__ACCEPTORS" ]]; then
  59. export EMQX_LISTENER__WS__EXTERNAL__ACCEPTORS=16
  60. fi
  61. if [[ -z "$EMQX_LISTENER__WS__EXTERNAL__MAX_CONNECTIONS" ]]; then
  62. export EMQX_LISTENER__WS__EXTERNAL__MAX_CONNECTIONS=102400
  63. fi
  64. if [[ -z "$EMQX_LISTENER__WSS__EXTERNAL__ACCEPTORS" ]]; then
  65. export EMQX_LISTENER__WSS__EXTERNAL__ACCEPTORS=16
  66. fi
  67. if [[ -z "$EMQX_LISTENER__WSS__EXTERNAL__MAX_CONNECTIONS" ]]; then
  68. export EMQX_LISTENER__WSS__EXTERNAL__MAX_CONNECTIONS=102400
  69. fi
  70. # fill tuples on specific file
  71. # SYNOPSIS
  72. # fill_tuples FILE [ELEMENTS ...]
  73. fill_tuples() {
  74. local file=$1
  75. local elements=${*:2}
  76. for var in $elements; do
  77. if grep -qE "\{\s*$var\s*,\s*(true|false)\s*\}\s*\." "$file"; then
  78. sed -r "s/\{\s*($var)\s*,\s*(true|false)\s*\}\s*\./{\1, true}./1" "$file" > tmpfile && cat tmpfile > "$file"
  79. elif grep -q "$var\s*\." "$file"; then
  80. # backward compatible.
  81. sed -r "s/($var)\s*\./{\1, true}./1" "$file" > tmpfile && cat tmpfile > "$file"
  82. else
  83. sed '$a'\\ "$file" > tmpfile && cat tmpfile > "$file"
  84. echo "{$var, true}." >> "$file"
  85. fi
  86. done
  87. }
  88. # The default rpc port discovery 'stateless' is mostly for clusters
  89. # having static node names. So it's troulbe-free for multiple emqx nodes
  90. # running on the same host.
  91. # When start emqx in docker, it's mostly one emqx node in one container
  92. export EMQX_RPC__PORT_DISCOVERY="${EMQX_RPC__PORT_DISCOVERY:-manual}"
  93. exec "$@"