Update mix/ecs containers
parent
8eef239776
commit
9cec10effa
@ -0,0 +1,41 @@
|
|||||||
|
FROM alpine:3.7
|
||||||
|
ARG VERSION
|
||||||
|
ENV TERM=xterm \
|
||||||
|
LC_ALL=C.UTF-8 \
|
||||||
|
LANG=en_US.UTF-8 \
|
||||||
|
LANGUAGE=en_US.UTF-8 \
|
||||||
|
REPLACE_OS_VARS=true \
|
||||||
|
HOME=/home/ejabberd \
|
||||||
|
VERSION=${VERSION:-latest} \
|
||||||
|
ARCHIVE=ejabberd-${VERSION:-latest}.tar.gz
|
||||||
|
LABEL maintainer="ProcessOne <contact@process-one.net>" \
|
||||||
|
product="Ejabberd Community Edition" \
|
||||||
|
version=$VERSION
|
||||||
|
|
||||||
|
# Create directory structure and user for ejabberd
|
||||||
|
RUN addgroup ejabberd -g 9000 && adduser -s /bin/sh -D -G ejabberd ejabberd -u 9000 \
|
||||||
|
&& mkdir -p /home/ejabberd/config /home/ejabberd/db /home/ejabberd/log \
|
||||||
|
&& chown -R ejabberd:ejabberd /home/ejabberd
|
||||||
|
|
||||||
|
# Install required dependencies
|
||||||
|
RUN apk upgrade --update musl \
|
||||||
|
&& apk add bash libstdc++ ncurses-libs openssl expat yaml zlib sqlite curl ca-certificates \
|
||||||
|
&& rm -rf /var/cache/apk/* \
|
||||||
|
&& update-ca-certificates
|
||||||
|
|
||||||
|
# Install ejabberd
|
||||||
|
ADD $ARCHIVE $HOME
|
||||||
|
COPY ejabberd-api $HOME/bin/
|
||||||
|
COPY ejabberdctl $HOME/bin/
|
||||||
|
COPY config/* $HOME/config/
|
||||||
|
RUN chown ejabberd:ejabberd $HOME/config/*
|
||||||
|
COPY docker-entrypoint.sh /
|
||||||
|
|
||||||
|
# Setup runtime environment
|
||||||
|
USER ejabberd
|
||||||
|
WORKDIR $HOME
|
||||||
|
VOLUME ["$HOME/db","$HOME/config","$HOME/log"]
|
||||||
|
EXPOSE 5222 5269 5280
|
||||||
|
|
||||||
|
ENTRYPOINT ["/docker-entrypoint.sh"]
|
||||||
|
CMD ["ejabberd"]
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,8 @@
|
|||||||
|
-----BEGIN DH PARAMETERS-----
|
||||||
|
MIIBCAKCAQEA6/sznqAfpkS3X0jBBmYgIm3XAq2mteWVGD3/CbQ2rfk8/38fEGN7
|
||||||
|
j5G+WnulMkf9WvGtRnFQrsIsnHUyMy4ay1p7ERKCA+TLd+biOIFXOnABpvnVcPjQ
|
||||||
|
LP/G5t7kJ/kM5G8eHDk1R7rvhA8Xecv7oX6QFqsdYRSM1tO9HR0l53tSPQ0swk6v
|
||||||
|
PhWZmOSfjugfOKwHMuXwI112pyXI1XEqC/mq+CJNJw0Z3eLcOcJWuFIZuoOwXDdU
|
||||||
|
GXK0kEypq+bMTVuq1B3WMxFon8PffQ/rmbH6Bk3SXrJz6koKCcBhm019/fuNSGQ5
|
||||||
|
6uVCmIbxWeYL6Yn8qRBVMlgC3DEGMzONWwIBAg==
|
||||||
|
-----END DH PARAMETERS-----
|
@ -0,0 +1,84 @@
|
|||||||
|
-----BEGIN PRIVATE KEY-----
|
||||||
|
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
|
||||||
|
LQheTRhu+UYYcbxy+AHQ8pqBBdnRsxLZ
|
||||||
|
-----END PRIVATE KEY-----
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIIFnDCCA4SgAwIBAgIJANCgN0JN5H4RMA0GCSqGSIb3DQEBCwUAMGMxCzAJBgNV
|
||||||
|
BAYTAkZSMQ4wDAYDVQQIDAVQYXJpczEOMAwGA1UEBwwFUGFyaXMxEzARBgNVBAoM
|
||||||
|
ClByb2Nlc3NPbmUxCzAJBgNVBAsMAklUMRIwEAYDVQQDDAlsb2NhbGhvc3QwHhcN
|
||||||
|
MTcxMjI5MTExMzA3WhcNNDUwNTE2MTExMzA3WjBjMQswCQYDVQQGEwJGUjEOMAwG
|
||||||
|
A1UECAwFUGFyaXMxDjAMBgNVBAcMBVBhcmlzMRMwEQYDVQQKDApQcm9jZXNzT25l
|
||||||
|
MQswCQYDVQQLDAJJVDESMBAGA1UEAwwJbG9jYWxob3N0MIICIjANBgkqhkiG9w0B
|
||||||
|
AQEFAAOCAg8AMIICCgKCAgEA5M7PkFrLUs8kTVmlgmG8cris6EXxqcQ4ueGDi6Mi
|
||||||
|
EleLpTFbmJ91M+gCRh9XeKKofyQGlTsdYf23QZ4QGMtuXND+3WLanXKN29UjGSLd
|
||||||
|
xGMB7IHnU1TamYxtfhMY6lIlPFfK+7RixQYzvzux/c9M12yeyGIVXZ/fYo66PFh3
|
||||||
|
RKjaZ1h8VUBfyqFXk7xX3KKQ/UAYXLtbr8IjFBuJgjqWG8rJf/TUArDT+E1faUP+
|
||||||
|
g+o0IyBk87lzu+HBIbYm2i5e3tWjwyMqs4nMEkoJ3ijP8qRvF/VYDPNa9/533ubr
|
||||||
|
P76yFtLl7x96jrvv2++h1C3WmfDgCLWs8waFDrZfv5GpAjeSfLqCnT+tYcz2Vgi0
|
||||||
|
/OE+/VkKVjmuHQ4kD7bjjDJadCmQwx/n1t1jBiphfMYhYoJj5m/UmMgFbGR/TrEH
|
||||||
|
oJUUktXRFdr1cx91qVU62XT0jOrDoWXpfXzlyJH65WV5Rb0B5bb4tI1HnmDPM9Xt
|
||||||
|
4hQMyeiFyCrtlG27aOpIRQmU8eBQCaITqFkSYGXDJpxh5STZEQWB+SJkLqS4cEq9
|
||||||
|
lxDz4YnVubvOzfmTZPZ6f2cpAnCNcYlxX4HJ6woJhFo11FfJ4YIl8peRBQKsjpa7
|
||||||
|
I3NSyy98pMzWVx8kEhY2mXuRwg8djY8UbHZSn4HC7on1b2mjOVZm+Bshy690dhzU
|
||||||
|
3IcCAwEAAaNTMFEwHQYDVR0OBBYEFCTwPSToCR8fTNGz5o2Czlc/BlfqMB8GA1Ud
|
||||||
|
IwQYMBaAFCTwPSToCR8fTNGz5o2Czlc/BlfqMA8GA1UdEwEB/wQFMAMBAf8wDQYJ
|
||||||
|
KoZIhvcNAQELBQADggIBADnvcqMt+ESTM12BuX6E+4mA0iR//Lxp8FzQkZEb7YPR
|
||||||
|
eIor6iPVDX+oRo/uVhEPvjH+SXGb+9FOOexIoxoB4C+1UpBRHBS2PROX0BNmIDb7
|
||||||
|
abRY6iCkIlyrVkVAtswNZdJHLJX5OMPfV52p6HELd4oYlI+AnQDXkrHA8DD7Y59r
|
||||||
|
o5MonTJV26L2mq2+ceciqviZzQLA0QJxTOPLaz/pq1a2bauP0Q1EjhB0nYJ9hZxp
|
||||||
|
CuAWXrVA7veElXg7EKyrQrOt6kcnNqpBj7Pk3R1Zq2xNMlfMMqQlJFt7uKy49EwI
|
||||||
|
qGgmVj1ScL/Savp967LjRaTz0CnJhSLUlCmLq/4JGPWI/AKEi0Hg14EgRiGbha2B
|
||||||
|
E+3sQxWmCWDeIMLM6m3001VMyT1JgEoJkbhGruDayxPDQuG4nrpK8lNMrnS1Ji0j
|
||||||
|
6VQ6OL66RFlpK+/LRYc8cXsh6+hDUaXLQTPs9v880SpoerbjW5Rh9Z7Dh+fX2SJj
|
||||||
|
8x6IbNbppn7SGD4iOaHd6+gq0j6iB1zOcTaU5OnZGb4qWNyqm0m94UWFMMr5zlmn
|
||||||
|
/MwQAnvgLhfcQ1T5iq3AAIrC1D0jn0b5D2CdCFNW1DmbDZiy8db+Pz5g36G9OceQ
|
||||||
|
oFdxG1n7Nre84DwOlohVYtFkeYy3D6hd+/sbyNa5YqswuKLdm6fWrp/e3es1auXy
|
||||||
|
-----END CERTIFICATE-----
|
@ -0,0 +1,12 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
set -e
|
||||||
|
|
||||||
|
if [ "${1:0:1}" = '-' ]; then
|
||||||
|
set -- ejabberd "$@"
|
||||||
|
fi
|
||||||
|
|
||||||
|
case "$1" in
|
||||||
|
'ejabberd') exec $HOME/bin/ejabberd foreground ;;
|
||||||
|
'console') exec $HOME/bin/ejabberd console ;;
|
||||||
|
*) exit ;;
|
||||||
|
esac
|
@ -0,0 +1,329 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# define default configuration
|
||||||
|
POLL=true
|
||||||
|
SMP=enable
|
||||||
|
ERL_MAX_PORTS=32000
|
||||||
|
ERL_PROCESSES=250000
|
||||||
|
ERL_MAX_ETS_TABLES=1400
|
||||||
|
FIREWALL_WINDOW="4370-4380"
|
||||||
|
INET_DIST_INTERFACE=""
|
||||||
|
ERLANG_NODE=ejabberd@$(hostanme -s)
|
||||||
|
|
||||||
|
# define default environment variables
|
||||||
|
ROOT_DIR="/home/ejabberd"
|
||||||
|
HOME_DIR="$ROOT_DIR"
|
||||||
|
ERL="$ROOT_DIR"/erts-9.1.5/bin/erl
|
||||||
|
IEX="$ROOT_DIR"/erts-9.1.5/bin/iex
|
||||||
|
EPMD="$ROOT_DIR"/erts-9.1.5/bin/epmd
|
||||||
|
INSTALLUSER=ejabberd
|
||||||
|
|
||||||
|
# check the proper system user is used
|
||||||
|
case $(id -un) in
|
||||||
|
"$INSTALLUSER")
|
||||||
|
EXEC_CMD="as_current_user"
|
||||||
|
[ -e "$HOME"/config/ejabberd.yml ] && HOME_DIR="$HOME"
|
||||||
|
;;
|
||||||
|
root)
|
||||||
|
if [ -n "$INSTALLUSER" ] ; then
|
||||||
|
EXEC_CMD="as_install_user"
|
||||||
|
HOME=$(su - ejabberd -c pwd)
|
||||||
|
[ -e "$HOME"/config/ejabberd.yml ] && HOME_DIR="$HOME"
|
||||||
|
else
|
||||||
|
EXEC_CMD="as_current_user"
|
||||||
|
echo "WARNING: This is not recommended to run ejabberd as root" >&2
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
if [ -n "$INSTALLUSER" ] ; then
|
||||||
|
echo "ERROR: This command can only be run by root or the user $INSTALLUSER" >&2
|
||||||
|
exit 7
|
||||||
|
else
|
||||||
|
EXEC_CMD="as_current_user"
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# parse command line parameters
|
||||||
|
for arg; do
|
||||||
|
case $arg in
|
||||||
|
-n|--node) ERLANG_NODE_ARG=$2; shift;;
|
||||||
|
-s|--spool) SPOOL_DIR=$2; shift;;
|
||||||
|
-l|--logs) LOGS_DIR=$2; shift;;
|
||||||
|
-f|--config) EJABBERD_CONFIG_PATH=$2; shift;;
|
||||||
|
-c|--ctl-config) EJABBERDCTL_CONFIG_PATH=$2; shift;;
|
||||||
|
-d|--config-dir) ETC_DIR=$2; shift;;
|
||||||
|
-t|--no-timeout) NO_TIMEOUT="--no-timeout";;
|
||||||
|
--) :;;
|
||||||
|
*) break;;
|
||||||
|
esac
|
||||||
|
shift
|
||||||
|
done
|
||||||
|
|
||||||
|
# define ejabberd variables if not already defined from the command line
|
||||||
|
: "${ETC_DIR:="$HOME_DIR/config"}"
|
||||||
|
: "${LOGS_DIR:="$HOME_DIR/log"}"
|
||||||
|
: "${EJABBERD_CONFIG_PATH:="$ETC_DIR/ejabberd.yml"}"
|
||||||
|
: "${EJABBERDCTL_CONFIG_PATH:="$ETC_DIR/ejabberdctl.cfg"}"
|
||||||
|
[ -f "$EJABBERDCTL_CONFIG_PATH" ] && . "$EJABBERDCTL_CONFIG_PATH"
|
||||||
|
[ -n "$ERLANG_NODE_ARG" ] && ERLANG_NODE="$ERLANG_NODE_ARG"
|
||||||
|
[ "$ERLANG_NODE" = "${ERLANG_NODE%.*}" ] && S="-s"
|
||||||
|
: "${EJABBERD_LOG_PATH:="$LOGS_DIR/ejabberd.log"}"
|
||||||
|
: "${SPOOL_DIR:="$HOME_DIR/database/$ERLANG_NODE"}"
|
||||||
|
|
||||||
|
# define erl parameters
|
||||||
|
ERLANG_OPTS="+K $POLL -smp $SMP +P $ERL_PROCESSES $ERL_OPTIONS"
|
||||||
|
if [ -n "$FIREWALL_WINDOW" ] ; then
|
||||||
|
ERLANG_OPTS="$ERLANG_OPTS -kernel inet_dist_listen_min ${FIREWALL_WINDOW%-*} inet_dist_listen_max ${FIREWALL_WINDOW#*-}"
|
||||||
|
fi
|
||||||
|
if [ -n "$INET_DIST_INTERFACE" ] ; then
|
||||||
|
INET_DIST_INTERFACE2=$("$ERL" -noshell -eval 'case inet:parse_address("'$INET_DIST_INTERFACE'") of {ok,IP} -> io:format("~p",[IP]); _ -> ok end.' -s erlang halt)
|
||||||
|
if [ -n "$INET_DIST_INTERFACE2" ] ; then
|
||||||
|
ERLANG_OPTS="$ERLANG_OPTS -kernel inet_dist_use_interface $INET_DIST_INTERFACE2"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
ERL_LIBS="$ROOT_DIR/lib"
|
||||||
|
ERL_CRASH_DUMP="$LOGS_DIR"/erl_crash_$(date "+%Y%m%d-%H%M%S").dump
|
||||||
|
ERL_INETRC="$ETC_DIR"/inetrc
|
||||||
|
|
||||||
|
# define ejabberd parameters
|
||||||
|
EJABBERD_OPTS="$EJABBERD_OPTS\
|
||||||
|
$(sed '/^log_rate_limit/!d;s/:[ \t]*\([0-9]*\).*/ \1/;s/^/ /' "$EJABBERD_CONFIG_PATH")\
|
||||||
|
$(sed '/^log_rotate_size/!d;s/:[ \t]*\([0-9]*\).*/ \1/;s/^/ /' "$EJABBERD_CONFIG_PATH")\
|
||||||
|
$(sed '/^log_rotate_count/!d;s/:[ \t]*\([0-9]*\).*/ \1/;s/^/ /' "$EJABBERD_CONFIG_PATH")\
|
||||||
|
$(sed '/^log_rotate_date/!d;s/:[ \t]*\(.[^ ]*\).*/ \1/;s/^/ /' "$EJABBERD_CONFIG_PATH")"
|
||||||
|
[ -n "$EJABBERD_OPTS" ] && EJABBERD_OPTS="-ejabberd $EJABBERD_OPTS"
|
||||||
|
EJABBERD_OPTS="-mnesia dir \"$SPOOL_DIR\" $MNESIA_OPTIONS $EJABBERD_OPTS -s ejabberd"
|
||||||
|
|
||||||
|
# export global variables
|
||||||
|
export EJABBERD_CONFIG_PATH
|
||||||
|
export EJABBERD_LOG_PATH
|
||||||
|
export EJABBERD_PID_PATH
|
||||||
|
export ERL_CRASH_DUMP
|
||||||
|
export ERL_EPMD_ADDRESS
|
||||||
|
export ERL_INETRC
|
||||||
|
export ERL_MAX_PORTS
|
||||||
|
export ERL_MAX_ETS_TABLES
|
||||||
|
export CONTRIB_MODULES_PATH
|
||||||
|
export CONTRIB_MODULES_CONF_DIR
|
||||||
|
export ERL_LIBS
|
||||||
|
|
||||||
|
# export dynamic library path
|
||||||
|
case $(uname -m) in
|
||||||
|
i[3456]86) cpu="x86" ;;
|
||||||
|
i86pc) cpu="x86" ;;
|
||||||
|
armv7*) cpu="armhf" ;;
|
||||||
|
*) cpu=$(uname -m | tr A-Z a-z) ;;
|
||||||
|
esac
|
||||||
|
os=$(uname -s | tr A-Z a-z)
|
||||||
|
export LD_FALLBACK_LIBRARY_PATH="$ROOT_DIR"/lib/${os}-${cpu}
|
||||||
|
export DYLD_FALLBACK_LIBRARY_PATH="$LD_FALLBACK_LIBRARY_PATH"
|
||||||
|
|
||||||
|
# run command either directly or via su $INSTALLUSER
|
||||||
|
exec_cmd()
|
||||||
|
{
|
||||||
|
case $EXEC_CMD in
|
||||||
|
as_install_user) su -s /bin/sh -c '"$0" "$@"' "$INSTALLUSER" -- "$@" ;;
|
||||||
|
as_current_user) "$@" ;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
exec_erl()
|
||||||
|
{
|
||||||
|
NODE=$1; shift
|
||||||
|
exec_cmd "$ERL" ${S:--}name "$NODE" $ERLANG_OPTS "$@"
|
||||||
|
}
|
||||||
|
exec_iex()
|
||||||
|
{
|
||||||
|
NODE=$1; shift
|
||||||
|
exec_cmd "$IEX" -${S:--}name "$NODE" --erl "$ERLANG_OPTS" "$@"
|
||||||
|
}
|
||||||
|
|
||||||
|
# usage
|
||||||
|
debugwarning()
|
||||||
|
{
|
||||||
|
if [ "$EJABBERD_BYPASS_WARNINGS" != "true" ] ; then
|
||||||
|
echo "--------------------------------------------------------------------"
|
||||||
|
echo ""
|
||||||
|
echo "IMPORTANT: we will attempt to attach an INTERACTIVE shell"
|
||||||
|
echo "to an already running ejabberd node."
|
||||||
|
echo "If an ERROR is printed, it means the connection was not successful."
|
||||||
|
echo "You can interact with the ejabberd node if you know how to use it."
|
||||||
|
echo "Please be extremely cautious with your actions,"
|
||||||
|
echo "and exit immediately if you are not completely sure."
|
||||||
|
echo ""
|
||||||
|
echo "To detach this shell from ejabberd, press:"
|
||||||
|
echo " control+c, control+c"
|
||||||
|
echo ""
|
||||||
|
echo "--------------------------------------------------------------------"
|
||||||
|
echo "To bypass permanently this warning, add to ejabberdctl.cfg the line:"
|
||||||
|
echo " EJABBERD_BYPASS_WARNINGS=true"
|
||||||
|
echo "Press return to continue"
|
||||||
|
read -r input
|
||||||
|
echo ""
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
livewarning()
|
||||||
|
{
|
||||||
|
if [ "$EJABBERD_BYPASS_WARNINGS" != "true" ] ; then
|
||||||
|
echo "--------------------------------------------------------------------"
|
||||||
|
echo ""
|
||||||
|
echo "IMPORTANT: ejabberd is going to start in LIVE (interactive) mode."
|
||||||
|
echo "All log messages will be shown in the command shell."
|
||||||
|
echo "You can interact with the ejabberd node if you know how to use it."
|
||||||
|
echo "Please be extremely cautious with your actions,"
|
||||||
|
echo "and exit immediately if you are not completely sure."
|
||||||
|
echo ""
|
||||||
|
echo "To exit this LIVE mode and stop ejabberd, press:"
|
||||||
|
echo " q(). and press the Enter key"
|
||||||
|
echo ""
|
||||||
|
echo "--------------------------------------------------------------------"
|
||||||
|
echo "To bypass permanently this warning, add to ejabberdctl.cfg the line:"
|
||||||
|
echo " EJABBERD_BYPASS_WARNINGS=true"
|
||||||
|
echo "Press return to continue"
|
||||||
|
read -r input
|
||||||
|
echo ""
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
help()
|
||||||
|
{
|
||||||
|
echo ""
|
||||||
|
echo "Commands to start an ejabberd node:"
|
||||||
|
echo " start Start an ejabberd node in server mode"
|
||||||
|
echo " debug Attach an interactive Erlang shell to a running ejabberd node"
|
||||||
|
echo " iexdebug Attach an interactive Elixir shell to a running ejabberd node"
|
||||||
|
echo " live Start an ejabberd node in live (interactive) mode"
|
||||||
|
echo " iexlive Start an ejabberd node in live (interactive) mode, within an Elixir shell"
|
||||||
|
echo " foreground Start an ejabberd node in server mode (attached)"
|
||||||
|
echo ""
|
||||||
|
echo "Optional parameters when starting an ejabberd node:"
|
||||||
|
echo " --config-dir dir Config ejabberd: $ETC_DIR"
|
||||||
|
echo " --config file Config ejabberd: $EJABBERD_CONFIG_PATH"
|
||||||
|
echo " --ctl-config file Config ejabberdctl: $EJABBERDCTL_CONFIG_PATH"
|
||||||
|
echo " --logs dir Directory for logs: $LOGS_DIR"
|
||||||
|
echo " --spool dir Database spool dir: $SPOOL_DIR"
|
||||||
|
echo " --node nodename ejabberd node name: $ERLANG_NODE"
|
||||||
|
echo ""
|
||||||
|
}
|
||||||
|
|
||||||
|
# dynamic node name helper
|
||||||
|
uid()
|
||||||
|
{
|
||||||
|
uuid=$(uuidgen 2>/dev/null)
|
||||||
|
[ -z "$uuid" ] && [ -f /proc/sys/kernel/random/uuid ] && uuid=$(cat /proc/sys/kernel/random/uuid)
|
||||||
|
[ -z "$uuid" ] && uuid=$(printf "%X" "${RANDOM:-$$}$(date +%M%S)")
|
||||||
|
uuid=${uuid%%-*}
|
||||||
|
[ $# -eq 0 ] && echo "${uuid}-${ERLANG_NODE}"
|
||||||
|
[ $# -eq 1 ] && echo "${uuid}-${1}-${ERLANG_NODE}"
|
||||||
|
[ $# -eq 2 ] && echo "${uuid}-${1}@${2}"
|
||||||
|
}
|
||||||
|
|
||||||
|
# stop epmd if there is no other running node
|
||||||
|
stop_epmd()
|
||||||
|
{
|
||||||
|
"$EPMD" -names 2>/dev/null | grep -q name || "$EPMD" -kill >/dev/null
|
||||||
|
}
|
||||||
|
|
||||||
|
# make sure node not already running and node name unregistered
|
||||||
|
# if all ok, ensure runtime directory exists and make it current directory
|
||||||
|
check_start()
|
||||||
|
{
|
||||||
|
"$EPMD" -names 2>/dev/null | grep -q " ${ERLANG_NODE%@*} " && {
|
||||||
|
pgrep -f "$ERLANG_NODE" >/dev/null && {
|
||||||
|
echo "ERROR: The ejabberd node '$ERLANG_NODE' is already running."
|
||||||
|
exit 4
|
||||||
|
}
|
||||||
|
pgrep beam >/dev/null && {
|
||||||
|
echo "ERROR: The ejabberd node '$ERLANG_NODE' is registered,"
|
||||||
|
echo " but no related beam process has been found."
|
||||||
|
echo "Shutdown all other erlang nodes, and call 'epmd -kill'."
|
||||||
|
exit 5
|
||||||
|
}
|
||||||
|
"$EPMD" -kill >/dev/null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# allow sync calls
|
||||||
|
wait_status()
|
||||||
|
{
|
||||||
|
# args: status try delay
|
||||||
|
# return: 0 OK, 1 KO
|
||||||
|
timeout="$2"
|
||||||
|
status=4
|
||||||
|
while [ "$status" -ne "$1" ] ; do
|
||||||
|
sleep "$3"
|
||||||
|
timeout=$((timeout - 1))
|
||||||
|
if [ $timeout -eq 0 ] ; then
|
||||||
|
status="$1"
|
||||||
|
else
|
||||||
|
exec_erl "$(uid ctl)" -hidden -noinput -s ejabberd_ctl \
|
||||||
|
-extra "$ERLANG_NODE" $NO_TIMEOUT status > /dev/null
|
||||||
|
status="$?"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
[ $timeout -gt 0 ]
|
||||||
|
}
|
||||||
|
|
||||||
|
# ensure we can change current directory to SPOOL_DIR
|
||||||
|
[ -d "$SPOOL_DIR" ] || exec_cmd mkdir -p "$SPOOL_DIR"
|
||||||
|
cd "$SPOOL_DIR" || {
|
||||||
|
echo "ERROR: can not access directory $SPOOL_DIR"
|
||||||
|
exit 6
|
||||||
|
}
|
||||||
|
|
||||||
|
# main
|
||||||
|
case $1 in
|
||||||
|
start)
|
||||||
|
check_start
|
||||||
|
exec_erl "$ERLANG_NODE" $EJABBERD_OPTS -noinput -detached
|
||||||
|
;;
|
||||||
|
foreground)
|
||||||
|
check_start
|
||||||
|
exec_erl "$ERLANG_NODE" $EJABBERD_OPTS -noinput
|
||||||
|
;;
|
||||||
|
live)
|
||||||
|
livewarning
|
||||||
|
check_start
|
||||||
|
exec_erl "$ERLANG_NODE" $EJABBERD_OPTS
|
||||||
|
;;
|
||||||
|
debug)
|
||||||
|
debugwarning
|
||||||
|
exec_erl "$(uid debug)" -hidden -remsh "$ERLANG_NODE"
|
||||||
|
;;
|
||||||
|
etop)
|
||||||
|
exec_erl "$(uid top)" -hidden -node "$ERLANG_NODE" -s etop \
|
||||||
|
-s erlang halt -output text
|
||||||
|
;;
|
||||||
|
iexdebug)
|
||||||
|
debugwarning
|
||||||
|
exec_iex "$(uid debug)" --remsh "$ERLANG_NODE"
|
||||||
|
;;
|
||||||
|
iexlive)
|
||||||
|
livewarning
|
||||||
|
exec_iex "$ERLANG_NODE" --erl "$EJABBERD_OPTS" --app ejabberd
|
||||||
|
;;
|
||||||
|
ping)
|
||||||
|
PEER=${2:-$ERLANG_NODE}
|
||||||
|
[ "$PEER" = "${PEER%.*}" ] && PS="-s"
|
||||||
|
exec_cmd "$ERL" ${PS:--}name "$(uid ping "$(hostname $PS)")" $ERLANG_OPTS \
|
||||||
|
-noinput -hidden -eval 'io:format("~p~n",[net_adm:ping('"'$PEER'"')])' \
|
||||||
|
-s erlang halt -output text
|
||||||
|
;;
|
||||||
|
started)
|
||||||
|
wait_status 0 30 2 # wait 30x2s before timeout
|
||||||
|
;;
|
||||||
|
stopped)
|
||||||
|
wait_status 3 30 2 && stop_epmd # wait 30x2s before timeout
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
exec_erl "$(uid ctl)" -hidden -noinput -s ejabberd_ctl \
|
||||||
|
-extra "$ERLANG_NODE" $NO_TIMEOUT "$@"
|
||||||
|
result=$?
|
||||||
|
case $result in
|
||||||
|
2|3) help;;
|
||||||
|
*) :;;
|
||||||
|
esac
|
||||||
|
exit $result
|
||||||
|
;;
|
||||||
|
esac
|
@ -0,0 +1,10 @@
|
|||||||
|
use Mix.Config
|
||||||
|
|
||||||
|
# This is standard path in the context of ejabberd release
|
||||||
|
config :ejabberd,
|
||||||
|
file: "/home/p1/ejabberd/config/ejabberd.yml",
|
||||||
|
log_path: '/home/p1/ejabberd/log/ejabberd.log'
|
||||||
|
|
||||||
|
# Customize Mnesia directory:
|
||||||
|
config :mnesia,
|
||||||
|
dir: '/home/p1/ejabberd/database/'
|
@ -1,52 +0,0 @@
|
|||||||
FROM alpine:3.7
|
|
||||||
MAINTAINER ProcessOne <contact@process-one.net>
|
|
||||||
|
|
||||||
ENV REFRESHED_AT=2017-12-22 \
|
|
||||||
HOME=/home/p1 \
|
|
||||||
TERM=xterm \
|
|
||||||
LC_ALL=C.UTF-8 \
|
|
||||||
LANG=en_US.UTF-8 \
|
|
||||||
LANGUAGE=en_US.UTF-8 \
|
|
||||||
REPLACE_OS_VARS=true
|
|
||||||
|
|
||||||
# Create directory structure and user for ejabberd
|
|
||||||
RUN addgroup p1 -g 9000 && adduser -s /bin/bash -D -G p1 p1 -u 9000 && \
|
|
||||||
mkdir -p ${HOME}/ejabberd ${HOME}/ejabberd/config ${HOME}/ejabberd/log ${HOME}/ejabberd/mnesiadb && \
|
|
||||||
chown -R p1:p1 ${HOME}
|
|
||||||
|
|
||||||
ENV P1DATA=${HOME}/ejabberd/mnesiadb \
|
|
||||||
P1LOG=${HOME}/ejabberd/log \
|
|
||||||
P1CFG=${HOME}/ejabberd/config
|
|
||||||
|
|
||||||
COPY ejabberd.yml ${HOME}/ejabberd/config/
|
|
||||||
COPY server.pem ${HOME}/ejabberd/config/
|
|
||||||
|
|
||||||
# TODO Make it possible to define which version of Alpine we would like to use.
|
|
||||||
#RUN echo "http://nl.alpinelinux.org/alpine/v3.6/main" > /etc/apk/repositories && \
|
|
||||||
# echo "http://nl.alpinelinux.org/alpine/v3.6/community" >> /etc/apk/repositories && \
|
|
||||||
RUN apk upgrade --update musl && \
|
|
||||||
apk add bash su-exec libstdc++ ncurses-libs openssl expat yaml zlib sqlite && \
|
|
||||||
apk add curl ca-certificates && update-ca-certificates && \
|
|
||||||
rm -rf /var/cache/apk/*
|
|
||||||
|
|
||||||
EXPOSE 5222 5269 5280
|
|
||||||
|
|
||||||
WORKDIR ${HOME}
|
|
||||||
|
|
||||||
COPY ejabberd.tar.gz ./
|
|
||||||
RUN tar -xzf ejabberd.tar.gz -C ${HOME}/ejabberd/ && \
|
|
||||||
chmod -R 777 ${HOME}/ejabberd && \
|
|
||||||
rm ${HOME}/ejabberd.tar.gz
|
|
||||||
|
|
||||||
# Volumes that you may want make persistent (share and backup)
|
|
||||||
VOLUME ["/home/p1/ejabberd/log/","/home/p1/ejabberd/mnesiadb/","/home/p1/ejabberd/config/"]
|
|
||||||
|
|
||||||
WORKDIR ${HOME}/ejabberd
|
|
||||||
|
|
||||||
COPY docker-entrypoint.sh /
|
|
||||||
COPY ejabberd-api ${HOME}
|
|
||||||
|
|
||||||
# CMD ./bin/ejabberd foreground
|
|
||||||
ENTRYPOINT ["/docker-entrypoint.sh"]
|
|
||||||
CMD ["ejabberd"]
|
|
||||||
|
|
@ -1,28 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
set -e
|
|
||||||
|
|
||||||
if [ "${1:0:1}" = '-' ]; then
|
|
||||||
set -- ejabberd "$@"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "$1" = 'ejabberd' ]; then
|
|
||||||
mkdir -p "$P1DATA"
|
|
||||||
chmod 700 "$P1DATA"
|
|
||||||
chown -R p1 "$P1DATA"
|
|
||||||
mkdir -p "$P1LOG"
|
|
||||||
chmod 700 "$P1LOG"
|
|
||||||
chown -R p1 "$P1LOG"
|
|
||||||
|
|
||||||
su-exec p1 $HOME/ejabberd/bin/ejabberd foreground
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "$1" = 'console' ]; then
|
|
||||||
mkdir -p "$P1DATA"
|
|
||||||
chmod 700 "$P1DATA"
|
|
||||||
chown -R p1 "$P1DATA"
|
|
||||||
mkdir -p "$P1LOG"
|
|
||||||
chmod 700 "$P1LOG"
|
|
||||||
chown -R p1 "$P1LOG"
|
|
||||||
|
|
||||||
su-exec p1 $HOME/ejabberd/bin/ejabberd console
|
|
||||||
fi
|
|
@ -1,10 +0,0 @@
|
|||||||
use Mix.Config
|
|
||||||
|
|
||||||
# This is standard path in the context of ejabberd release
|
|
||||||
config :ejabberd,
|
|
||||||
file: "/Users/mremond/devel/p1/ejabberd/ejabberd/config/ejabberd.yml",
|
|
||||||
log_path: '/Users/mremond/devel/p1/ejabberd/ejabberd/log/ejabberd.log'
|
|
||||||
|
|
||||||
# Customize Mnesia directory:
|
|
||||||
config :mnesia,
|
|
||||||
dir: '/Users/mremond/devel/p1/ejabberd/ejabberd/mnesiadb/'
|
|
@ -1,18 +0,0 @@
|
|||||||
FROM alpine:3.7
|
|
||||||
MAINTAINER ProcessOne <contact@process-one.net>
|
|
||||||
|
|
||||||
RUN apk upgrade --update musl && \
|
|
||||||
apk add build-base git zlib-dev openssl-dev yaml-dev expat-dev sqlite-dev \
|
|
||||||
elixir erlang-crypto erlang-eunit erlang-mnesia erlang-xmerl erlang-erts \
|
|
||||||
erlang-tools erlang-os-mon erlang-syntax-tools erlang-parsetools \
|
|
||||||
erlang-runtime-tools erlang-reltool && \
|
|
||||||
rm -rf /var/cache/apk/*
|
|
||||||
|
|
||||||
RUN mix local.hex --force && \
|
|
||||||
mix local.rebar --force
|
|
||||||
|
|
||||||
EXPOSE 5222 5280
|
|
||||||
|
|
||||||
ENTRYPOINT ["/usr/bin/mix"]
|
|
||||||
|
|
||||||
CMD ["compile"]
|
|
@ -0,0 +1,18 @@
|
|||||||
|
FROM alpine:3.7
|
||||||
|
LABEL maintainer="ProcessOne <contact@process-one.net>" \
|
||||||
|
product="Ejabberd mix development environment"
|
||||||
|
|
||||||
|
# Install required dependencies
|
||||||
|
RUN apk upgrade --update musl \
|
||||||
|
&& apk add build-base git zlib-dev openssl-dev yaml-dev expat-dev sqlite-dev \
|
||||||
|
elixir erlang-crypto erlang-eunit erlang-mnesia erlang-xmerl erlang-erts \
|
||||||
|
erlang-tools erlang-os-mon erlang-syntax-tools erlang-parsetools \
|
||||||
|
erlang-runtime-tools erlang-reltool \
|
||||||
|
&& rm -rf /var/cache/apk/*
|
||||||
|
|
||||||
|
# Setup runtime environment
|
||||||
|
RUN mix local.hex --force \
|
||||||
|
&& mix local.rebar --force
|
||||||
|
|
||||||
|
ENTRYPOINT ["/usr/bin/mix"]
|
||||||
|
CMD ["compile"]
|
Loading…
Reference in New Issue