From 63dd7acd2b2a3d756572ea9f5869dcb7db411fb4 Mon Sep 17 00:00:00 2001 From: Marcus Brown Date: Mon, 13 Jan 2025 13:47:48 +1100 Subject: [PATCH] initial --- docker-compose.yml | 166 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 166 insertions(+) diff --git a/docker-compose.yml b/docker-compose.yml index e69de29..79e1b06 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -0,0 +1,166 @@ +version: "3.9" + +# Define reusable templates for common service settings +x-common-service: + &common-service + restart: unless-stopped + environment: + TZ: "${TZ:-Etc/UTC}" + volumes: + - /etc/localtime:/etc/localtime:ro + +x-mailserver-service: + &mailserver-service + <<: *common-service + hostname: mail + domainname: freedoh.net + environment: + ENABLE_SPAMASSASSIN: "${ENABLE_SPAMASSASSIN:-1}" + ENABLE_CLAMAV: "${ENABLE_CLAMAV:-1}" + ENABLE_POP3: "${ENABLE_POP3:-1}" + ENABLE_IMAP: "${ENABLE_IMAP:-1}" + ENABLE_MANAGESIEVE: "${ENABLE_MANAGESIEVE:-1}" + RELAY_HOST: "${RELAY_HOST:-}" + POSTMASTER_ADDRESS: "${POSTMASTER_ADDRESS:-postmaster@example.com}" + SSL_TYPE: "${SSL_TYPE:-manual}" + SSL_CERT_PATH: "/etc/ssl/mail/fullchain.pem" + SSL_KEY_PATH: "/etc/ssl/mail/privkey.pem" + DKIM_SELECTOR: "${DKIM_SELECTOR:-mail}" + DKIM_DOMAIN: "${DKIM_DOMAIN:-freedoh.net}" + volumes: + - dmsdata:/var/mail + - dmsstate:/var/mail-state + - dmslogs:/var/log/mail + - dmsconfig:/tmp/docker-mailserver + - dmscerts:/etc/ssl/mail:ro + ports: + - "25:25" + - "465:465" + - "587:587" + - "993:993" + - "995:995" + +services: + # Primary mailserver instance + mailserver: + <<: *mailserver-service + image: mailserver/docker-mailserver:latest + container_name: dms + profiles: + - imap + - smtp + environment: + ENABLE_FAIL2BAN: "0" + + # Fail2Ban-enabled mailserver instance + mailserver-fail2ban: + <<: *mailserver-service + image: mailserver/docker-mailserver:latest + container_name: dms + profiles: + - fail2ban + environment: + ENABLE_FAIL2BAN: "1" + cap_add: + - NET_ADMIN # Required for Fail2Ban + + rspamd: + <<: *common-service + image: rspamd/rspamd + container_name: rspamd + profiles: + - smtp + environment: + RSPAMD_PASSWORD: "${RSPAMD_PASSWORD:-rspamd_admin_password}" + volumes: + - rspamd_data:/var/lib/rspamd + ports: + - "11334:11334" + - "11332:11332" + command: ["-i", "127.0.0.1"] + + roundcube: + <<: *common-service + image: roundcube/roundcubemail:latest + container_name: roundcube + profiles: + - imap + depends_on: + - mailserver + environment: + ROUNDCUBEMAIL_DEFAULT_HOST: "${ROUNDCUBEMAIL_DEFAULT_HOST:-mail.example.com}" + ROUNDCUBEMAIL_SMTP_SERVER: "${ROUNDCUBEMAIL_SMTP_SERVER:-mail.example.com}" + ROUNDCUBEMAIL_SMTP_PORT: "${ROUNDCUBEMAIL_SMTP_PORT:-587}" + ROUNDCUBEMAIL_PLUGINS: "${ROUNDCUBEMAIL_PLUGINS:-managesieve}" + PHP_MEMORY_LIMIT: "${PHP_MEMORY_LIMIT:-256M}" + volumes: + - roundcube_data:/var/www/html + ports: + - "8080:80" + + imapsync: + <<: *common-service + image: gilleslamiral/imapsync + container_name: imapsync + profiles: + - imap + command: "sleep infinity" + volumes: + - imapsync_config:/sync/config + - imapsync_logs:/sync/logs + +volumes: + dmsdata: + driver: local + driver_opts: + type: 'none' + o: 'bind' + device: '/${BASEDIR}/dms/data/' + dmsstate: + driver: local + driver_opts: + type: 'none' + o: 'bind' + device: '/${BASEDIR}/dms/state/' + dmslogs: + driver: local + driver_opts: + type: 'none' + o: 'bind' + device: '/${BASEDIR}/dms/logs/' + dmsconfig: + driver: local + driver_opts: + type: 'none' + o: 'bind' + device: '/${BASEDIR}/dms/config/' + dmscerts: + driver: local + driver_opts: + type: 'none' + o: 'bind' + device: '/${BASEDIR}/dms/certs/' + rspamd_data: + driver: local + driver_opts: + type: 'none' + o: 'bind' + device: '/${BASEDIR}/rspamd/data/' + roundcube_data: + driver: local + driver_opts: + type: 'none' + o: 'bind' + device: '/${BASEDIR}/roundcube/data/' + imapsync_config: + driver: local + driver_opts: + type: 'none' + o: 'bind' + device: '/${BASEDIR}/imapsync/config/' + imapsync_logs: + driver: local + driver_opts: + type: 'none' + o: 'bind' + device: '/${BASEDIR}/imapsync/logs/'