-
Notifications
You must be signed in to change notification settings - Fork 13
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
3 changed files
with
102 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,48 @@ | ||
FROM debian:12-slim | ||
|
||
ENV EMQX_VERSION=5.8.0 | ||
ENV AMD64_SHA256=95a8b8d0e51b2f9d0c7eab768aeb51e7e01ed290cd61a0a97092c2bb38815d58 | ||
ENV ARM64_SHA256=13e8614b3376e06da72079ab1845e7213226c47c2ae3e805fd29c25f8041f81d | ||
ENV LC_ALL=C.UTF-8 LANG=C.UTF-8 | ||
|
||
RUN set -eu; \ | ||
apt-get update; \ | ||
apt-get install -y --no-install-recommends ca-certificates procps curl; \ | ||
arch=$(dpkg --print-architecture); \ | ||
if [ ${arch} = "amd64" ]; then sha256="$AMD64_SHA256"; fi; \ | ||
if [ ${arch} = "arm64" ]; then sha256="$ARM64_SHA256"; fi; \ | ||
. /etc/os-release; \ | ||
pkg="emqx-${EMQX_VERSION}-${ID}${VERSION_ID}-${arch}.tar.gz"; \ | ||
curl -f -O -L https://www.emqx.com/en/downloads/broker/v${EMQX_VERSION}/${pkg}; \ | ||
echo "$sha256 *$pkg" | sha256sum -c; \ | ||
mkdir /opt/emqx; \ | ||
tar zxf $pkg -C /opt/emqx; \ | ||
find /opt/emqx -name 'swagger*.js.map' -exec rm {} +; \ | ||
ln -s /opt/emqx/bin/* /usr/local/bin/; \ | ||
groupadd -r -g 1000 emqx; \ | ||
useradd -r -m -u 1000 -g emqx emqx; \ | ||
chown -R emqx:emqx /opt/emqx; \ | ||
rm -f $pkg; \ | ||
rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* | ||
|
||
WORKDIR /opt/emqx | ||
|
||
USER emqx | ||
|
||
VOLUME ["/opt/emqx/log", "/opt/emqx/data"] | ||
|
||
# emqx will occupy these port: | ||
# - 1883 port for MQTT | ||
# - 8083 for WebSocket/HTTP | ||
# - 8084 for WSS/HTTPS | ||
# - 8883 port for MQTT(SSL) | ||
# - 18083 for dashboard and API | ||
# - 4370 default Erlang distribution port | ||
# - 5369 for backplain gen_rpc | ||
EXPOSE 1883 8083 8084 8883 18083 4370 5369 | ||
|
||
COPY docker-entrypoint.sh /usr/bin/ | ||
|
||
ENTRYPOINT ["/usr/bin/docker-entrypoint.sh"] | ||
|
||
CMD ["/opt/emqx/bin/emqx", "foreground"] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,53 @@ | ||
#!/usr/bin/env bash | ||
|
||
## Shell setting | ||
if [[ -n "$DEBUG" ]]; then | ||
set -ex | ||
else | ||
set -e | ||
fi | ||
|
||
shopt -s nullglob | ||
|
||
## Local IP address setting | ||
|
||
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) | ||
|
||
export EMQX_NAME="${EMQX_NAME:-emqx}" | ||
|
||
## EMQX_NODE_NAME or EMQX_NODE__NAME to indicate the full node name to be used by EMQX | ||
## If both are set EMQX_NODE_NAME takes higher precedence than EMQX_NODE__NAME | ||
if [[ -z "${EMQX_NODE_NAME:-}" ]] && [[ -z "${EMQX_NODE__NAME:-}" ]]; then | ||
# No node name is provide from environment variables | ||
# try to resolve from other settings | ||
if [[ -z "$EMQX_HOST" ]]; then | ||
if [[ "$EMQX_CLUSTER__DISCOVERY_STRATEGY" == "dns" ]] && \ | ||
[[ "$EMQX_CLUSTER__DNS__RECORD_TYPE" == "srv" ]] && \ | ||
grep -q "$(hostname).$EMQX_CLUSTER__DNS__NAME" /etc/hosts; then | ||
EMQX_HOST="$(hostname).$EMQX_CLUSTER__DNS__NAME" | ||
elif [[ "$EMQX_CLUSTER__DISCOVERY_STRATEGY" == "k8s" ]] && \ | ||
[[ "$EMQX_CLUSTER__K8S__ADDRESS_TYPE" == "dns" ]] && \ | ||
[[ -n "$EMQX_CLUSTER__K8S__NAMESPACE" ]]; then | ||
EMQX_CLUSTER__K8S__SUFFIX=${EMQX_CLUSTER__K8S__SUFFIX:-"pod.cluster.local"} | ||
EMQX_HOST="${LOCAL_IP//./-}.$EMQX_CLUSTER__K8S__NAMESPACE.$EMQX_CLUSTER__K8S__SUFFIX" | ||
elif [[ "$EMQX_CLUSTER__DISCOVERY_STRATEGY" == "k8s" ]] && \ | ||
[[ "$EMQX_CLUSTER__K8S__ADDRESS_TYPE" == 'hostname' ]] && \ | ||
[[ -n "$EMQX_CLUSTER__K8S__NAMESPACE" ]]; then | ||
EMQX_CLUSTER__K8S__SUFFIX=${EMQX_CLUSTER__K8S__SUFFIX:-'svc.cluster.local'} | ||
EMQX_HOST=$(grep -h "^$LOCAL_IP" /etc/hosts | grep -o "$(hostname).*.$EMQX_CLUSTER__K8S__NAMESPACE.$EMQX_CLUSTER__K8S__SUFFIX") | ||
else | ||
EMQX_HOST="$LOCAL_IP" | ||
fi | ||
export EMQX_HOST | ||
fi | ||
export EMQX_NODE_NAME="$EMQX_NAME@$EMQX_HOST" | ||
fi | ||
|
||
# The default rpc port discovery 'stateless' is mostly for clusters | ||
# having static node names. So it's troulbe-free for multiple emqx nodes | ||
# running on the same host. | ||
# When start emqx in docker, it's mostly one emqx node in one container | ||
# i.e. use port 5369 (or per tcp_server_port | ssl_server_port config) for gen_rpc | ||
export EMQX_RPC__PORT_DISCOVERY="${EMQX_RPC__PORT_DISCOVERY:-manual}" | ||
|
||
exec "$@" |