91 lines
2.4 KiB
Docker
91 lines
2.4 KiB
Docker
# Build stage
|
|
FROM ubuntu:24.04 AS builder
|
|
|
|
ARG DEBIAN_FRONTEND=noninteractive
|
|
ARG POSTFIX_VERSION=3.10.8
|
|
ARG POSTFIX_TARBALL=postfix-${POSTFIX_VERSION}.tar.gz
|
|
ARG POSTFIX_URL=https://high5.nl/mirrors/postfix-release/official/${POSTFIX_TARBALL}
|
|
|
|
RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
build-essential \
|
|
ca-certificates \
|
|
wget \
|
|
tar \
|
|
gzip \
|
|
make \
|
|
perl \
|
|
m4 \
|
|
libc6-dev \
|
|
libdb-dev \
|
|
libssl-dev \
|
|
libsasl2-dev \
|
|
libpcre3-dev \
|
|
libpam0g-dev \
|
|
libssl-dev \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
WORKDIR /build
|
|
|
|
RUN wget -O ${POSTFIX_TARBALL} ${POSTFIX_URL} \
|
|
&& tar xzf ${POSTFIX_TARBALL}
|
|
|
|
WORKDIR /build/postfix-${POSTFIX_VERSION}
|
|
|
|
RUN make makefiles \
|
|
CCARGS='-I/usr/include/sasl -DNO_NIS -DHAS_PCRE -DUSE_SASL_AUTH -DUSE_TLS -DUSE_CYRUS_SASL -DHAS_PAM' \
|
|
AUXLIBS='-lssl -lcrypto -ldb -lsasl2 -lpam -lpcre'
|
|
|
|
RUN make -j"$(nproc)"
|
|
RUN make non-interactive-package install_root=/opt/postfix-dist
|
|
|
|
# Copy runtime libraries needed by Postfix binaries
|
|
RUN mkdir -p /opt/postfix-libs \
|
|
&& find /opt/postfix-dist -type f -executable -exec ldd {} \; \
|
|
| awk '/=> \// {print $3} /^\// {print $1}' \
|
|
| sort -u \
|
|
| xargs -r -I '{}' cp -v --parents '{}' /opt/postfix-libs
|
|
|
|
# Final image
|
|
FROM ubuntu:24.04
|
|
|
|
ARG DEBIAN_FRONTEND=noninteractive
|
|
|
|
RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
ca-certificates \
|
|
libc6 \
|
|
libdb5.3t64 \
|
|
libssl3 \
|
|
libsasl2-2 \
|
|
libpcre3 \
|
|
libpam0g \
|
|
ssl-cert \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
COPY --from=builder /opt/postfix-dist/ /
|
|
COPY --from=builder /opt/postfix-libs/ /
|
|
|
|
# Create postfix user and group
|
|
RUN groupadd -r postfix \
|
|
&& groupadd -r postdrop \
|
|
&& useradd -r -g postfix -G postdrop -d /var/spool/postfix -s /usr/sbin/nologin postfix
|
|
|
|
# Create necessary directories with correct permissions
|
|
RUN mkdir -p \
|
|
/var/spool/postfix \
|
|
/var/lib/postfix \
|
|
/var/mail \
|
|
/etc/postfix
|
|
|
|
# Spool directory must be owned by root and have specific permissions for Postfix to function correctly
|
|
RUN chown root:root /var/spool/postfix \
|
|
&& chmod 755 /var/spool/postfix \
|
|
&& /usr/sbin/postfix set-permissions
|
|
|
|
COPY entrypoint.sh /usr/local/bin/entrypoint.sh
|
|
RUN chmod +x /usr/local/bin/entrypoint.sh
|
|
|
|
# Expose ports for LMTP (24), SMTP (25), SMTPS (465), and submission (587)
|
|
EXPOSE 24 25 465 587
|
|
|
|
ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]
|