Go to file
bilak 07ec823f45 - added DMARC (opendmarc) support with basic setup 2016-01-26 18:26:50 +01:00
bin Fixed error reported by jderusse 2015-12-05 19:08:39 +01:00
postfix - added DMARC (opendmarc) support with basic setup 2016-01-26 18:26:50 +01:00
spamassassin Fixes #8 - BC BREAK - User configuration is no longer in docker-compose.yml to make it easier to maintain 2015-07-16 19:35:11 +02:00
test Add pop3 support 2016-01-24 02:41:25 -03:00
.gitignore - added DKIM support 2016-01-20 16:41:34 +01:00
.travis.yml Added new line when needed and fixed a test 2015-10-18 21:30:53 +02:00
Dockerfile - added DMARC (opendmarc) support with basic setup 2016-01-26 18:26:50 +01:00
LICENCE Added Licence 2015-05-22 14:40:00 +02:00
Makefile Merge pull request #56 from bilak/master 2016-01-26 12:27:54 +01:00
README.md - added DMARC (opendmarc) support with basic setup 2016-01-26 18:26:50 +01:00
SSL.md Fixes #65 and improves SSL documentation about LetsEncrypt. 2016-01-25 18:23:35 +01:00
assert.sh Added assert.sh in the project to avoid eternal dependency 2016-01-12 01:00:18 +01:00
docker-compose.yml.dist Cleaned code after live testing and improved documentation 2015-12-05 17:32:33 +01:00
start-mailserver.sh - added DMARC (opendmarc) support with basic setup 2016-01-26 18:26:50 +01:00

README.md

docker-mailserver

Build Status

A fullstack but simple mail server (smtp, imap, antispam, antivirus...).
Only configuration files, no SQL database. Keep it simple and versioned.
Easy to deploy and upgrade.

Includes:

  • postfix with smtp auth
  • courier-imap with ssl support
  • amavis
  • spamassasin
  • clamav with automatic updates
  • opendkim
  • opendmarc (basic setup)
  • LetsEncrypt and self-signed certificates
  • optional pop3 server (add -e ENABLE_POP3=1 to enable pop3 server)

Why I created this image: Simple mail server with Docker

informations:

  • only config files, no *sql database required
  • mails are stored in /var/mail/${domain}/${username}
  • you should use a data volume container for /var/mail for data persistence
  • email login are full email address (username1@my-domain.com)
  • user accounts are managed in ./postfix/accounts.cf
  • aliases and fowards/redirects are managed in ./postfix/virtual
  • antispam rules are managed in ./spamassassin/rules.cf
  • files must be mounted to /tmp in your container (see docker-compose.yml template)
  • ssl is strongly recommended, read SSL.md to use LetsEncrypt or Self-Signed Certificates
  • includes integration tests
  • builds automated on docker hub
  • dkim public key will be echoed to log. If you have your previous configuration, you can mount volume with it -v "$(pwd)/opendkim":/etc/opendkim"

installation

docker pull tvial/docker-mailserver

build

docker build -t tvial/docker-mailserver .

run

docker run --name mail \
-v "$(pwd)/postfix":/tmp/postfix \
-v "$(pwd)/spamassassin":/tmp/spamassassin \
-v "$(pwd)/letsencrypt/etc":/etc/letsencrypt \
-p "25:25" -p "143:143" -p "587:587" -p "993:993" \
-e DMS_SSL=letsencrypt \
-h mail.domain.com \
-t tvial/docker-mailserver
mail:
  image: tvial/docker-mailserver
  hostname: mail
  domainname: domain.com
  ports:
  - "25:25"
  - "143:143"
  - "587:587"
  - "993:993"
  volumes:
  - ./spamassassin:/tmp/spamassassin/
  - ./postfix:/tmp/postfix/
  - ./letsencrypt/etc:/etc/letsencrypt
  environment:
  - DMS_SSL=letsencrypt

Volumes allow to:

  • Insert custom antispam rules
  • Manage mail users, passwords and aliases
  • Manage SSL certificates

usage

docker-compose up -d mail

client configuration

# imap
username:         <username1@my-domain.com>
password:         <username1password>
server:           <your-server-ip-or-hostname>
imap port:        143 or 993 with ssl (recommended)
imap path prefix:   INBOX
auth method:      md5 challenge-response

# smtp
smtp port:        25 or 587 with ssl (recommended)
username:         <username1@my-domain.com>
password:         <username1password>
auth method:      md5 challenge-response

backups

Assuming that you use docker-compose and a data volume container named maildata, you can backup your user mails like this:

docker run --rm \
--volumes-from maildata_1 \
-v "$(pwd)":/backups \
-ti tvial/docker-mailserver \
tar cvzf /backups/docker-mailserver-`date +%y%m%d-%H%M%S`.tgz /var/mail

todo

Things to do or to improve are stored on Github, some open by myself. Feel free to improve this docker image.

wanna help?

Fork, improve, add tests and PR. ;-)