From b0be083a9922de4954286d34a31bfdf6edbf899b Mon Sep 17 00:00:00 2001 From: Jeffrey Boehm Date: Wed, 9 Aug 2017 20:49:56 +0200 Subject: [PATCH] Feature/spamassassin alpine (#25) spamassassin: - Switched from Debian to Alpine - Simplified start up and configuration --- Makefile | 1 + docker-compose.yml | 2 + spamassassin/Dockerfile | 53 +++++++++++++++---- spamassassin/rootfs/etc/spamassassin/local.cf | 9 ---- .../{supervisor/conf.d => }/supervisord.conf | 10 +--- spamassassin/rootfs/usr/local/bin/debug.sh | 5 ++ .../rootfs/usr/local/bin/sa-update.sh | 9 ++-- spamassassin/rootfs/usr/local/bin/spamd.sh | 45 ++-------------- 8 files changed, 60 insertions(+), 74 deletions(-) delete mode 100644 spamassassin/rootfs/etc/spamassassin/local.cf rename spamassassin/rootfs/etc/{supervisor/conf.d => }/supervisord.conf (62%) create mode 100755 spamassassin/rootfs/usr/local/bin/debug.sh diff --git a/Makefile b/Makefile index a6f0efbd..72d9964e 100644 --- a/Makefile +++ b/Makefile @@ -37,3 +37,4 @@ logs: $(compose-production) logs mda $(compose-production) logs web $(compose-production) logs db + $(compose-production) logs spamassassin diff --git a/docker-compose.yml b/docker-compose.yml index cbbac90b..a4876e2b 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -33,11 +33,13 @@ services: build: ./web restart: on-failure:5 env_file: .env + mem_limit: 128M spamassassin: image: jeboehm/mailserver-spamassassin:latest build: ./spamassassin restart: on-failure:5 + mem_limit: 192M volumes: data-db: diff --git a/spamassassin/Dockerfile b/spamassassin/Dockerfile index f4c0e6a4..cc00c664 100644 --- a/spamassassin/Dockerfile +++ b/spamassassin/Dockerfile @@ -1,19 +1,50 @@ -FROM debian:jessie +FROM alpine:3.6 MAINTAINER Jeffrey Boehm "jeff@ressourcenkonflikt.de" -RUN apt-get update && \ - apt-get install -y --no-install-recommends \ - supervisor \ - spamassassin \ - pyzor \ - razor \ - spamass-milter && \ - rm -rf /var/lib/apt/lists/* +ENV SPAMASS_USER=spamass \ + SPAMASS_GROUP=spamass \ + SPAMASS_CONF=/var/lib/spamassassin \ + SA_HOME=/var/lib/spamassassin/.spamassassin \ + SA_PORT=1783 + +RUN apk --no-cache add \ + libgcc \ + libmilter-dev \ + libstdc++ \ + openssl \ + perl-mail-spf \ + python3 \ + razor \ + spamassassin \ + spamassassin-client \ + supervisor \ + wget && \ + apk --no-cache add --virtual .fetch-deps \ + autoconf \ + automake \ + build-base && \ + pip3 install \ + pyzor && \ + wget https://github.com/andybalholm/spamass-milter/archive/master.tar.gz && \ + tar -xvf master.tar.gz && \ + cd spamass-milter-master && \ + ./autogen.sh && \ + make && \ + make install && \ + cd / && \ + rm -rf spamass-milter-master master.tar.gz && \ + apk del .fetch-deps && \ + addgroup -S ${SPAMASS_GROUP} && \ + adduser -D ${SPAMASS_USER} -G ${SPAMASS_GROUP} && \ + chgrp ${SPAMASS_GROUP} ${SPAMASS_CONF} && \ + chmod 775 ${SPAMASS_CONF} + +USER ${SPAMASS_USER} +VOLUME ["${SPAMASS_CONF}"] COPY rootfs/ / EXPOSE 9999 -VOLUME /var/lib/spamassassin - +HEALTHCHECK CMD spamc -K -p ${SA_PORT} || exit 1 CMD ["/usr/bin/supervisord"] diff --git a/spamassassin/rootfs/etc/spamassassin/local.cf b/spamassassin/rootfs/etc/spamassassin/local.cf deleted file mode 100644 index 7ab36ff8..00000000 --- a/spamassassin/rootfs/etc/spamassassin/local.cf +++ /dev/null @@ -1,9 +0,0 @@ -use_bayes 1 -bayes_auto_learn 1 -bayes_path /var/lib/spamassassin/.spamassassin/bayes - -use_pyzor 1 -pyzor_options --homedir /var/lib/spamassassin/.pyzor - -use_razor2 1 -razor_config /var/lib/spamassassin/.razor/razor-agent.conf diff --git a/spamassassin/rootfs/etc/supervisor/conf.d/supervisord.conf b/spamassassin/rootfs/etc/supervisord.conf similarity index 62% rename from spamassassin/rootfs/etc/supervisor/conf.d/supervisord.conf rename to spamassassin/rootfs/etc/supervisord.conf index 1f39e602..a5cb9f3f 100644 --- a/spamassassin/rootfs/etc/supervisor/conf.d/supervisord.conf +++ b/spamassassin/rootfs/etc/supervisord.conf @@ -2,28 +2,22 @@ nodaemon=true logfile=/dev/stderr logfile_maxbytes=0 -pidfile=/var/run/supervisord.pid +pidfile=/tmp/supervisord.pid [program:sa-update] command=/usr/local/bin/sa-update.sh redirect_stderr=true stdout_logfile=/dev/stderr stdout_logfile_maxbytes=0 -stderr_logfile=/dev/stderr -stderr_logfile_maxbytes=0 [program:spamd] command=/usr/local/bin/spamd.sh redirect_stderr=true stdout_logfile=/dev/stderr stdout_logfile_maxbytes=0 -stderr_logfile=/dev/stderr -stderr_logfile_maxbytes=0 [program:spamass-milter] -command=spamass-milter -p inet:9999@0.0.0.0 -u spamass-milter +command=spamass-milter -p inet:9999@0.0.0.0 -- -p %(ENV_SA_PORT)s redirect_stderr=true stdout_logfile=/dev/stderr stdout_logfile_maxbytes=0 -stderr_logfile=/dev/stderr -stderr_logfile_maxbytes=0 diff --git a/spamassassin/rootfs/usr/local/bin/debug.sh b/spamassassin/rootfs/usr/local/bin/debug.sh new file mode 100755 index 00000000..db4cb9f1 --- /dev/null +++ b/spamassassin/rootfs/usr/local/bin/debug.sh @@ -0,0 +1,5 @@ +#!/bin/sh + +echo asd > /tmp/spam +spamassassin -t -D < /tmp/spam +rm /tmp/spam diff --git a/spamassassin/rootfs/usr/local/bin/sa-update.sh b/spamassassin/rootfs/usr/local/bin/sa-update.sh index 63b99e80..b4bfd4aa 100755 --- a/spamassassin/rootfs/usr/local/bin/sa-update.sh +++ b/spamassassin/rootfs/usr/local/bin/sa-update.sh @@ -1,12 +1,9 @@ #!/bin/sh - -PIDFILE="/run/spamd.pid" +PIDFILE="${SA_HOME}/spamd.pid" do_update() { - start-stop-daemon \ - --chuid debian-spamd:debian-spamd --start \ - --exec /usr/bin/sa-update -- \ - --gpghomedir /var/lib/spamassassin/sa-update-keys 2>&1 + /usr/bin/sa-update \ + --gpghomedir ${SA_HOME}/sa-update-keys 2>&1 } do_reload() { diff --git a/spamassassin/rootfs/usr/local/bin/spamd.sh b/spamassassin/rootfs/usr/local/bin/spamd.sh index 2e8a6483..192183f8 100755 --- a/spamassassin/rootfs/usr/local/bin/spamd.sh +++ b/spamassassin/rootfs/usr/local/bin/spamd.sh @@ -1,47 +1,12 @@ #!/bin/sh -SA_HOME="/var/lib/spamassassin/.spamassassin" -PYZOR_HOME="/var/lib/spamassassin/.pyzor" -RAZOR_HOME="/var/lib/spamassassin/.razor" echo "Starting spamassassin.." -create_homedir() { - if ! [ -d ${SA_HOME} ] - then - mkdir ${SA_HOME} - chown debian-spamd ${SA_HOME} - fi -} - -pyzor_discover() { - start-stop-daemon \ - --chuid debian-spamd:debian-spamd --start \ - --exec /usr/bin/pyzor -- \ - --homedir ${PYZOR_HOME} discover -} - -razor_setup() { - if [ -d ${RAZOR_HOME} ] - then - return 0 - fi - - mkdir ${RAZOR_HOME} - - razor-admin -home=${RAZOR_HOME} -register - razor-admin -home=${RAZOR_HOME} -create - razor-admin -home=${RAZOR_HOME} -discover -} - -create_homedir -pyzor_discover -razor_setup - /usr/local/bin/sa-update.sh --startup -spamd \ - --username=debian-spamd \ +/usr/sbin/spamd \ --syslog stderr \ - --pidfile=/run/spamd.pid \ + --pidfile=${SA_HOME}/spamd.pid \ --max-children 5 \ - --helper-home-dir \ - --nouser-config + --helper-home-dir=${SA_HOME} \ + --nouser-config \ + --listen 127.0.0.1:${SA_PORT}