aboutsummaryrefslogtreecommitdiff
path: root/.github/container/Dockerfile
blob: 541dabd66dba0dbf86d59f96201e513da25dc518 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
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

COPY . ./ejabberd

WORKDIR ejabberd

RUN mv .github/container/ejabberdctl.template . \
    && ./autogen.sh \
    && ./configure --with-rebar=mix --enable-all \
    && make deps \
    && 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 BINPATH=$(dirname $(find /opt -name msgs))/bin/ \
    && mkdir -p $BINPATH \
    && cp tools/captcha*.sh $BINPATH

RUN [ ! -d .ejabberd-modules ] || cp -r .ejabberd-modules /opt/ejabberd/

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
ARG VERSION=master

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 /opt/ejabberd-$VERSION/bin/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=1m \
    --timeout=5s \
    --start-period=5s \
    --retries=10 \
    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"]