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=letsencrypt 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}" # ??? PERMIT_DOCKER=connected-networks POSTFIX_INET_PROTOCOLS=ipv4 ENABLE_TLS=1 TLS_LEVEL=modern ENABLE_POSTGREY=1 ENABLE_RSPAMD=1 SMTP_ONLY=0 ENABLE_SRS=1 ENABLE_QUOTAS=1 LOG_LEVEL=info ENABLE_LDAP=0 LDAP_SERVER_HOST=ldap.example.com ENABLE_FETCHMAIL=0 ENABLE_DKIM=1 ENABLE_SPF=1 SPOOF_PROTECTION=0 ENABLE_MANAGESIEVE=1 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" - "4190:4190" 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" rainloop: <<: *common-service image: hardware/rainloop container_name: rainloop profiles: - imap depends_on: - mailserver environment: RAINLOOP_DEFAULT_HOST: "${RAINLOOP_DEFAULT_HOST:-mail.freedoh.net}" volumes: - rainloop_data:/rainloop/data ports: - "8081: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/' rainloop_data: driver: local driver_opts: type: 'none' o: 'bind' device: '/${BASEDIR}/dms/rainloop/data/' rspamd_data: driver: local driver_opts: type: 'none' o: 'bind' device: '/${BASEDIR}/dms/rspamd/data/' roundcube_data: driver: local driver_opts: type: 'none' o: 'bind' device: '/${BASEDIR}/dms/roundcube/data/' imapsync_config: driver: local driver_opts: type: 'none' o: 'bind' device: '/${BASEDIR}/dms/imapsync/config/' imapsync_logs: driver: local driver_opts: type: 'none' o: 'bind' device: '/${BASEDIR}/dms/imapsync/logs/'