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