commit f5fb85be958c8eed2c2fa0a1bd7f06b07c34b64a Author: Andriy Oblivantsev Date: Sat Aug 22 12:45:50 2026 +0100 docker-mailserver stack for produktor.io (#77) diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d85c1ae --- /dev/null +++ b/.gitignore @@ -0,0 +1,8 @@ +.env +data/ +tls/ +setup.sh +config/opendkim/keys/ +*.log +postfix-accounts.cf +dovecot-quotas.cf diff --git a/compose.yaml b/compose.yaml new file mode 100644 index 0000000..066c579 --- /dev/null +++ b/compose.yaml @@ -0,0 +1,33 @@ +services: + mailserver: + image: docker.io/mailserver/docker-mailserver:latest + container_name: mailserver + hostname: mail.produktor.io + ports: + - "25:25" + - "465:465" + - "587:587" + - "143:143" + - "993:993" + volumes: + - ./data/mail-data/:/var/mail/ + - ./data/mail-state/:/var/mail-state/ + - ./data/mail-logs/:/var/log/mail/ + - ./config/:/tmp/docker-mailserver/ + - ./tls/mail.key:/tmp/docker-mailserver/ssl/mail.produktor.io-key.pem:ro + - ./tls/mail.crt:/tmp/docker-mailserver/ssl/mail.produktor.io-cert.pem:ro + - ./tls/mail.crt:/tmp/docker-mailserver/ssl/demoCA/cacert.pem:ro + - /etc/localtime:/etc/localtime:ro + environment: + - ENABLE_SPAMASSASSIN=1 + - ENABLE_CLAMAV=0 + - ENABLE_FAIL2BAN=1 + - ENABLE_POP3=0 + - SSL_TYPE=self-signed + - PERMIT_DOCKER=none + - ONE_DIR=1 + - SPOOF_PROTECTION=1 + cap_add: + - NET_ADMIN + - SYS_PTRACE + restart: unless-stopped diff --git a/maildata.env.example b/maildata.env.example new file mode 100644 index 0000000..6f25cd4 --- /dev/null +++ b/maildata.env.example @@ -0,0 +1,8 @@ +# Copy to .env and fill in real values. .env is gitignored — never commit it. +# Mailbox passwords are also stored here for the operator; rotate via +# ./setup.sh email update +MAIL_DOMAIN=produktor.io +MAIL_HOSTNAME=mail.produktor.io +INFO_PASSWORD=CHANGE_ME_STRONG_RANDOM +ANDRIY_PASSWORD=CHANGE_ME_STRONG_RANDOM +DKIM_SELECTOR=mail