Skip to content

Commit a8a0ad7

Browse files
author
N.Mikhail
committed
Init
1 parent ee15c95 commit a8a0ad7

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

69 files changed

+5858
-0
lines changed

.env

+45
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
#####################
2+
# Project setting #
3+
#####################
4+
5+
COMPOSE_PROJECT_NAME=mailserver
6+
PROJECT_IP_MASK=172.23.1
7+
8+
####################
9+
# PostgreSQL #
10+
####################
11+
12+
POSTGRES_DB=DB_NAME
13+
POSTGRES_USER=DB_USER
14+
POSTGRES_PASSWORD=DB_PASSWORD
15+
16+
####################
17+
# PostfixAdmin #
18+
####################
19+
20+
POSTFIXADMIN_DB_TYPE=pgsql
21+
POSTFIXADMIN_DB_HOST=172.23.1.2
22+
POSTFIXADMIN_DB_USER=DB_USER
23+
POSTFIXADMIN_DB_NAME=DB_NAME
24+
POSTFIXADMIN_DB_PASSWORD=DB_PASSWORD
25+
26+
###################
27+
# Dovecot #
28+
###################
29+
30+
DOVECOT_VERSION=CHANGE_ME
31+
32+
###################
33+
# Redis #
34+
###################
35+
36+
REDIS_PASSWORD=REDIS_PASSWORD
37+
REDIS_PORT=6379
38+
REDIS_PRODECTED_MODE=yes
39+
40+
###################
41+
# Rspam #
42+
###################
43+
44+
RSPAM_enable_password=yes
45+
RSPAM_password=RSPAM_password

build/dovecot/Dockerfile

+115
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,115 @@
1+
FROM alpine:3.17 as build
2+
3+
ARG vmail_gid
4+
ARG VMAIL_GROUP
5+
ARG VMAIL_USER
6+
ARG vmail_uid
7+
ARG dovecot_tag
8+
ARG dovecot_branch=main
9+
ARG pigeonhole_branch
10+
ARG DOVECOT_PREFIX=/usr/local/dovecot
11+
12+
#
13+
# ARG ACCESS_FIX="/run/dovecot /var/run/dovecot"
14+
#
15+
16+
# build options
17+
ARG dovecot_config="--without-pam \
18+
--without-cdb \
19+
--with-zlib \
20+
--with-bzlib \
21+
--with-storages=maildir \
22+
--without-ldap \
23+
--with-ssl=openssl \
24+
--sysconfdir=/etc \
25+
--prefix=${DOVECOT_PREFIX} \
26+
--with-sql=yes \
27+
--without-sqlite \
28+
--without-apparmor \
29+
--without-mysql \
30+
--with-pgsql \
31+
--without-docs \
32+
--without-libcap \
33+
--without-sql-drivers \
34+
--without-mysql \
35+
--without-sodium \
36+
--without-systemd \
37+
--localstatedir=/var/lib/dovecot \
38+
--enable-dependency-tracking"
39+
40+
ARG pigeonhole_config="--with-dovecot=../dovecot --sysconfdir=/etc --prefix=${DOVECOT_PREFIX} --localstatedir=/var/lib/dovecot \
41+
--with-managesieve=yes \
42+
--with-ldap=no"
43+
44+
RUN addgroup -S -g ${vmail_gid} vmail || export VMAIL_GROUP=root && adduser -S -D -H -u $vmail_uid -G $VMAIL_GROUP -g "Dovecot Vmail" ${VMAIL_USER} && \
45+
set -x && \
46+
apk update && \
47+
apk add --no-cache --virtual .build-deps \
48+
bzip2-dev lz4-dev xz-dev zlib-dev \
49+
runc \
50+
postgresql-dev mariadb-dev sqlite-dev \
51+
openldap-dev \
52+
heimdal-dev \
53+
gnu-libiconv \
54+
linux-headers git automake cmake \
55+
gawk \
56+
g++ \
57+
make \
58+
openldap-dev zlib-dev bzip2-dev autoconf libtool libc-dev gettext gcc bison flex gnutls-dev gettext-dev rpcgen openssl-dev file && \
59+
mkdir -p /opt/dovecot && cd /opt/dovecot && \
60+
git init . && \
61+
git remote add -t ${dovecot_branch} origin https://github.com/dovecot/core && \
62+
git fetch --depth 1 && git checkout ${dovecot_tag} && \
63+
./autogen.sh && \
64+
mkdir -p ${DOVECOT_PREFIX} && \
65+
PANDOC=false ./configure ${dovecot_config} ### && \
66+
RUN set -x && \
67+
cd /opt/dovecot && \
68+
make -s -j$(nproc)
69+
RUN set -x && \
70+
cd /opt/dovecot && \
71+
make install && \
72+
mkdir /opt/pigeonhole/ && \
73+
cd /opt/pigeonhole && \
74+
git init . && git remote add -t ${pigeonhole_branch} origin https://github.com/dovecot/pigeonhole.git && \
75+
git fetch --depth=1 && git checkout ${pigeonhole_branch} && ./autogen.sh && \
76+
./configure ${pigeonhole_config} && \
77+
make -s -j$(nproc) && make install && \
78+
### Setup Container for Dovecot
79+
rm -rf /etc/dovecot/* && \
80+
mkdir -p /var/lib/dovecot && \
81+
chown -R ${VMAIL_USER}:${VMAIL_GROUP} /var/mail && \
82+
chown -R ${VMAIL_USER}:${VMAIL_GROUP} /var/lib/dovecot/ ${DOVECOT_PREFIX}
83+
84+
### Networking Configuration
85+
EXPOSE 1143 2525 1024 1587 1993 4190
86+
87+
88+
FROM alpine:3.17
89+
90+
ARG vmail_gid
91+
ARG VMAIL_GROUP
92+
ARG VMAIL_USER
93+
ARG vmail_uid
94+
95+
COPY --from=build /usr/local/dovecot /usr/local/dovecot
96+
97+
RUN apk update && \
98+
apk add zlib wget \
99+
bzip2 \
100+
lz4 \
101+
rspamd-client \
102+
bzip2-dev lz4-dev xz-dev zlib-dev libpq-dev && \
103+
addgroup -S -g ${vmail_gid} vmail || export VMAIL_GROUP=root && adduser -S -D -H -u $vmail_uid -G $VMAIL_GROUP -g "Dovecot Vmail" ${VMAIL_USER} && \
104+
mkdir -p /var/lib/dovecot && \
105+
mkdir -p /etc/dovecot && \
106+
mkdir -p /var/run/dovecot && \
107+
chown -R ${VMAIL_USER}:${VMAIL_GROUP} /var/lib/dovecot/ /var/run/dovecot/ ${DOVECOT_PREFIX} && \
108+
chown -R ${VMAIL_USER}:${VMAIL_GROUP} /etc/dovecot && \
109+
chmod u+x /usr/local/dovecot/libexec/dovecot/dovecot-lda && \
110+
adduser vmail mem
111+
112+
USER ${VMAIL_USER}
113+
114+
CMD ["/usr/local/dovecot/sbin/dovecot", "-F"]
115+
# CMD ["/bin/sh"]

build/exim/Dockerfile

+93
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
FROM debian:bullseye-slim as build
2+
3+
ARG EXIM_GID
4+
ARG EXIM_GROUP
5+
ARG EXIM_USER
6+
ARG EXIM_UID
7+
8+
ARG EXIM_IP=0.0.0.0
9+
ARG EXIM_VERSION=4.98
10+
# EXIM_VERSION_GITHUB [4.96.2 | 4.97-RC2 | 4.96.1]
11+
# ARG EXIM_VERSION=master
12+
13+
# ARG EXIM_SOURCE=https://github.com/Exim/exim/archive/refs/tags/exim-4.96.2.tar.gz - Working
14+
ARG EXIM_SOURCE=http://exim.mirror.iphh.net/ftp/exim/exim4/exim-${EXIM_VERSION}.tar.gz
15+
16+
ENV EXIM_PORTS="25 : 465 : 587"
17+
ENV EXIM_TLS_ON_CONNECT_PORTS=465
18+
# ENV DOMAIN=TakeItFromDotEnv
19+
20+
21+
RUN set -x && \
22+
addgroup --system --gid ${EXIM_GID} ${EXIM_GROUP} || export EXIM_GROUP=root && \
23+
adduser --disabled-login --no-create-home --uid $EXIM_UID --ingroup $EXIM_GROUP --gecos EXIM $EXIM_USER && \
24+
adduser --disabled-login --no-create-home --uid 501 --ingroup $EXIM_GROUP --gecos EXIM exim && \
25+
apt-get -y update \
26+
&& apt-get -y upgrade \
27+
&& apt-get install -y libldap2-dev tzdata \
28+
wget libpcre2-dev build-essential libdb-dev libpq-dev \
29+
libopendmarc-dev libspf2-dev \
30+
libldap2-dev libldap-common \
31+
libdkim-dev \
32+
libssl-dev \
33+
libidn11-dev && \
34+
dpkg-reconfigure -f noninteractive tzdata
35+
36+
37+
RUN set -eux; \
38+
mkdir -p /usr/src && cd /usr/src && \
39+
# git clone https://github.com/exim/exim -b $EXIM_VERSION exim && \
40+
# echo "$EXIM_DOWNLOAD_SHA *exim.tar.gz" | sha256sum -c -; \ TBD!
41+
wget ${EXIM_SOURCE} && tar -zxvf exim-${EXIM_VERSION}.tar.gz && mv exim-${EXIM_VERSION} exim && \
42+
# mkdir -p /usr/src/exim/Local && \
43+
mkdir -p /etc/exim4
44+
45+
46+
ADD Makefile /usr/src/exim/Local/
47+
48+
RUN set -eux; \
49+
cd /usr/src/exim && \
50+
sed -i "s/EXIM_LOCAL_USER/${EXIM_USER}/g" Local/Makefile && \
51+
sed -i "s/EXIM_LOCAL_GROUP/${EXIM_GROUP}/g" Local/Makefile && \
52+
make && make install && \
53+
rm -rf /usr/src && \
54+
apt-get remove -y build-essential libpcre3-dev libdkim-dev git && \
55+
apt-get -y autoremove --purge && apt-get clean && rm -rf /var/lib/apt/lists/*
56+
57+
FROM debian:bullseye-slim
58+
59+
ARG EXIM_GID
60+
ARG EXIM_GROUP
61+
ARG EXIM_USER
62+
ARG EXIM_UID
63+
ARG DOMAIN
64+
ARG EXIM_IP=0.0.0.0
65+
66+
ENV EXIM_PORTS="25 : 465 : 587"
67+
ENV EXIM_TLS_ON_CONNECT_PORTS=465
68+
69+
RUN set -x && \
70+
apt-get -y update \
71+
&& apt-get -y upgrade \
72+
&& apt-get install -y libspf2-2 ca-certificates minicpan libgetopt-complete-perl libpq-dev && \
73+
addgroup --system --gid ${EXIM_GID} ${EXIM_GROUP} || export EXIM_GROUP=root && \
74+
adduser --disabled-login --no-create-home --uid $EXIM_UID --ingroup $EXIM_GROUP --gecos EXIM $EXIM_USER && \
75+
adduser --disabled-login --no-create-home --uid 501 --ingroup $EXIM_GROUP --gecos EXIM exim && \
76+
yes | perl -MCPAN -e getopt::std
77+
COPY --from=build /usr/exim /usr/exim
78+
ADD exim.conf /etc/exim4/exim.conf
79+
ADD update-exim4.conf.conf /etc/exim4/update-exim4.conf.conf
80+
81+
ARG ACCESS_FIX="/etc/exim4 /var/log/exim /var/spool/exim"
82+
# fix access, log to stderr
83+
RUN set -x && \
84+
for d in ${ACCESS_FIX} ; do mkdir -p $d ; done && \
85+
chown -R ${EXIM_USER}:${EXIM_GROUP} ${ACCESS_FIX} && \
86+
find ${ACCESS_FIX} -type d -exec chmod g+wx {} \;
87+
88+
COPY entrypoint.sh /usr/local/bin/entrypoint.sh
89+
RUN chmod +x /usr/local/bin/entrypoint.sh
90+
USER ${EXIM_USER}
91+
ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]
92+
93+
CMD ["/bin/bash"]

0 commit comments

Comments
 (0)