From 493ee7f5348ba3d6b177a26420ff00bbaba75b6f Mon Sep 17 00:00:00 2001 From: Badlop Date: Fri, 22 Apr 2022 20:35:35 +0200 Subject: [PATCH] Container: New Dockerfile, more simple than the one in ejabberd/ecs --- .github/container/Dockerfile | 117 +++++++++++++++++++++++++++++++++++ 1 file changed, 117 insertions(+) create mode 100644 .github/container/Dockerfile diff --git a/.github/container/Dockerfile b/.github/container/Dockerfile new file mode 100644 index 000000000..5b01c7393 --- /dev/null +++ b/.github/container/Dockerfile @@ -0,0 +1,117 @@ +FROM alpine:3.15.4 AS build +ARG VERSION=master + +RUN apk upgrade --update musl \ + && apk add \ + autoconf \ + automake \ + bash \ + build-base \ + curl \ + elixir \ + erlang-odbc \ + erlang-reltool \ + expat-dev \ + file \ + gd-dev \ + git \ + jpeg-dev \ + libpng-dev \ + libwebp-dev \ + linux-pam-dev \ + openssl \ + openssl-dev \ + sqlite-dev \ + yaml-dev \ + zlib-dev + +RUN mix local.hex --force \ + && mix local.rebar --force + +WORKDIR ejabberd + +RUN git clone https://github.com/processone/ejabberd.git . \ + && git checkout $VERSION \ + && mv .github/container/ejabberdctl.template . \ + && ./autogen.sh \ + && ./configure --with-rebar=mix --enable-all \ + && mix deps.get \ + && make rel + +RUN cp -r _build/prod/rel/ejabberd/ /opt/ejabberd-$VERSION \ + && mkdir -p /opt/ejabberd \ + && mv /opt/ejabberd-$VERSION/conf /opt/ejabberd/conf + +RUN DESCRIBE=$(git describe --tags) \ + && MIXVER=$(echo $DESCRIBE.0 | sed -e 's/-g.*//' -e 's/-/./' | tr -d '[:space:]') \ + && mkdir /opt/ejabberd-$VERSION/lib/ejabberd-$MIXVER/priv/bin \ + && cp tools/captcha*.sh /opt/ejabberd-$VERSION/lib/ejabberd-$MIXVER/priv/bin/ + +RUN export PEM=/opt/ejabberd/conf/server.pem \ + && curl -o "/opt/ejabberd/conf/cacert.pem" 'https://curl.se/ca/cacert.pem' \ + && openssl req -x509 \ + -batch \ + -nodes \ + -newkey rsa:4096 \ + -keyout $PEM \ + -out $PEM \ + -days 3650 \ + -subj "/CN=localhost" \ + && sed -i '/^loglevel:/a \ \ + \nca_file: /opt/ejabberd/conf/cacert.pem \ + \ncertfiles: \ + \n - /opt/ejabberd/conf/server.pem' "/opt/ejabberd/conf/ejabberd.yml" + +FROM alpine:3.15.4 +ENV HOME=/opt/ejabberd + +RUN apk upgrade --update musl \ + && apk add \ + expat \ + freetds \ + gd \ + jpeg \ + libgd \ + libpng \ + libstdc++ \ + libwebp \ + linux-pam \ + ncurses-libs \ + openssl \ + sqlite \ + sqlite-libs \ + unixodbc \ + yaml \ + zlib \ + && ln -fs /usr/lib/libtdsodbc.so.0 /usr/lib/libtdsodbc.so \ + && rm -rf /var/cache/apk/* + +COPY --from=build /opt /opt +RUN echo -e \ + "#!/bin/sh \ + \n[ -z \$ERLANG_NODE_ARG ] && export ERLANG_NODE_ARG=ejabberd@localhost \ + \nexport CONFIG_DIR=/opt/ejabberd/conf \ + \nexport LOGS_DIR=/opt/ejabberd/logs \ + \nexport SPOOL_DIR=/opt/ejabberd/database \ + \nexec $(find /opt -name ejabberdctl) \"\$@\"" > /usr/local/bin/ejabberdctl \ + && chmod +x /usr/local/bin/ejabberdctl + +RUN addgroup ejabberd -g 9000 \ + && adduser -s /bin/sh -D -G ejabberd ejabberd -u 9000 \ + && mkdir -p $HOME/conf $HOME/database $HOME/logs $HOME/upload \ + && chown -R ejabberd:ejabberd $HOME + +HEALTHCHECK \ + --interval=5s \ + --timeout=5s \ + --start-period=5s \ + --retries=120 \ + CMD /usr/local/bin/ejabberdctl status + +WORKDIR $HOME +USER ejabberd +VOLUME ["$HOME/conf", "$HOME/database", "$HOME/logs", "$HOME/upload"] +EXPOSE 1883 4369-4399 5222 5269 5280 5443 + +ENTRYPOINT ["/usr/local/bin/ejabberdctl"] +CMD ["foreground"]