Dockermail is now modular
This commit is contained in:
@@ -7,35 +7,37 @@ RUN locale-gen en_GB en_GB.UTF-8 && dpkg-reconfigure locales
|
||||
RUN apt-get update && apt-get install -y \
|
||||
ssl-cert \
|
||||
postfix \
|
||||
dovecot-imapd \
|
||||
dovecot-imapd && \
|
||||
apt-get clean && \
|
||||
rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
|
||||
|
||||
# postfix configuration
|
||||
# Postfix configuration
|
||||
ADD ./config/postfix.main.cf /etc/postfix/main.cf
|
||||
ADD ./config/postfix.master.cf.append /etc/postfix/master-additional.cf
|
||||
RUN cat /etc/postfix/master-additional.cf >> /etc/postfix/master.cf
|
||||
|
||||
# configure settings script
|
||||
VOLUME ["/mail_settings"]
|
||||
COPY boot /boot
|
||||
RUN chmod 755 /boot
|
||||
|
||||
# add user vmail who own all mail folders
|
||||
VOLUME ["/vmail"]
|
||||
RUN groupadd -g 5000 vmail
|
||||
RUN useradd -g vmail -u 5000 vmail -d /vmail -m
|
||||
|
||||
# dovecot configuration
|
||||
# Dovecot configuration
|
||||
ADD ./config/dovecot.mail /etc/dovecot/conf.d/10-mail.conf
|
||||
ADD ./config/dovecot.ssl /etc/dovecot/conf.d/10-ssl.conf
|
||||
ADD ./config/dovecot.auth /etc/dovecot/conf.d/10-auth.conf
|
||||
ADD ./config/dovecot.master /etc/dovecot/conf.d/10-master.conf
|
||||
ADD ./config/dovecot.lda /etc/dovecot/conf.d/15-lda.conf
|
||||
ADD ./config/dovecot.imap /etc/dovecot/conf.d/20-imap.conf
|
||||
|
||||
# Uncomment to add verbose logging
|
||||
# ADD ./config/dovecot.logging /etc/dovecot/conf.d/10-logging.conf
|
||||
|
||||
# Nice place for your settings
|
||||
VOLUME ["/mail_settings"]
|
||||
|
||||
# Configure boot script
|
||||
COPY boot /
|
||||
RUN chmod 755 /boot
|
||||
|
||||
# Volume to store email
|
||||
VOLUME ["/vmail"]
|
||||
# Add user vmail that ownes mail
|
||||
RUN groupadd -g 5000 vmail
|
||||
RUN useradd -g vmail -u 5000 vmail -d /vmail -m
|
||||
|
||||
EXPOSE 25 143 587
|
||||
ENTRYPOINT /boot; service rsyslog start; service postfix start; dovecot -F
|
||||
|
||||
46
email_core/README.md
Normal file
46
email_core/README.md
Normal file
@@ -0,0 +1,46 @@
|
||||
Dockermail - Email Core
|
||||
==========
|
||||
This image provides a secure, minimal mail server based on 'postfix' and 'dovecot'.
|
||||
|
||||
All incoming mail to your domains is accepted.
|
||||
For outgoing mail, only authenticated (logged in with username and password) clients can send messages via STARTTLS.
|
||||
|
||||
### Setup
|
||||
You will need 2 folder on your host, one to store your configuration and another one to store your email.
|
||||
In the instructions below we will use the following:
|
||||
* `/opt/dockermail/settings` to store configuration
|
||||
* `/opt/dockermail/vmail` to store the mail
|
||||
|
||||
Use the the example config files in `config/example` to get you started.
|
||||
|
||||
1. Add all domains you want to receive mail for to the file `/opt/dockermail/settings/domains`, like this:
|
||||
|
||||
example.org
|
||||
example.net
|
||||
|
||||
2. Add user aliases to the file `/opt/dockermail/settings/aliases`:
|
||||
|
||||
johndoe@example.org john.doe@example.org
|
||||
john.doe@example.org john.doe@example.org
|
||||
admin@forum.example.org forum-admin@example.org
|
||||
@example.net catch-all@example.net
|
||||
|
||||
An IMAP mail account is created for each entry on the right hand side.
|
||||
Every mail sent to one of the addresses in the left column will be delivered to the corresponding account in the right column.
|
||||
|
||||
3. Add user passwords to the file `/opt/dockermail/settings/passwords` like this
|
||||
|
||||
john.doe@example.org:{PLAIN}password123
|
||||
admin@example.org:{SHA256-CRYPT}$5$ojXGqoxOAygN91er$VQD/8dDyCYOaLl2yLJlRFXgl.NSrB3seZGXBRMdZAr6
|
||||
|
||||
To get the hash values, you can either install dovecot locally or use `docker exec -it [email_core_container_name] bash` to attach to the running container (step 6) and run `doveadm pw -s <scheme-name>` inside, remember to restart your container if you update the settings!
|
||||
|
||||
4. Change the hostname in file `/opt/dockermail/settings/myhostname` to the correct fully qualified domain of your server.
|
||||
|
||||
5. Build container
|
||||
|
||||
docker build -t dockermail_email_core .
|
||||
|
||||
6. Run container and map ports 25 and 143 from the host to the container.
|
||||
|
||||
`docker run -name dockermail -d -p 25:25 -p 587:587 -p 143:143 -v /opt/dockermail/settings:/mail_settings -v /opt/dockermail/vmail:/vmail dockermail_email_core`
|
||||
@@ -1,10 +1,12 @@
|
||||
# Check if we have SSL certificates in config, otherwise copy it there
|
||||
|
||||
# First the key file
|
||||
if [ -f /mail_settings/ssl-cert-snakeoil.key ]; then
|
||||
cp /mail_settings/ssl-cert-snakeoil.key /etc/ssl/private/ssl-cert-snakeoil.key
|
||||
else
|
||||
cp /etc/ssl/private/ssl-cert-snakeoil.key /mail_settings/ssl-cert-snakeoil.key
|
||||
fi
|
||||
|
||||
# Then the pem file
|
||||
if [ -f /mail_settings/ssl-cert-snakeoil.pem ]; then
|
||||
cp /mail_settings/ssl-cert-snakeoil.pem /etc/ssl/certs/ssl-cert-snakeoil.pem
|
||||
@@ -12,32 +14,52 @@ else
|
||||
cp /etc/ssl/certs/ssl-cert-snakeoil.pem /mail_settings/ssl-cert-snakeoil.pem
|
||||
fi
|
||||
|
||||
|
||||
# Update hostname if given
|
||||
if [ -f /mail_settings/myhostname ]; then
|
||||
sed -i -e "s/myhostname = localhost/myhostname = $(sed 's:/:\\/:g' /mail_settings/myhostname)/" /etc/postfix/main.cf
|
||||
echo $(sed 's:/:\\/:g' /mail_settings/myhostname) > /etc/mailname
|
||||
fi
|
||||
|
||||
# configure mail delivery to dovecot
|
||||
# Configure mail delivery to dovecot
|
||||
cp /mail_settings/aliases /etc/postfix/virtual
|
||||
cp /mail_settings/domains /etc/postfix/virtual-mailbox-domains
|
||||
|
||||
# parse mailbox settings
|
||||
# Parse mailbox settings
|
||||
mkdir /etc/postfix/tmp
|
||||
awk < /etc/postfix/virtual '{ print $2 }' > /etc/postfix/tmp/virtual-receivers
|
||||
sed -r 's,(.+)@(.+),\2/\1/,' /etc/postfix/tmp/virtual-receivers > /etc/postfix/tmp/virtual-receiver-folders
|
||||
paste /etc/postfix/tmp/virtual-receivers /etc/postfix/tmp/virtual-receiver-folders > /etc/postfix/virtual-mailbox-maps
|
||||
|
||||
# give postfix ownership of its files
|
||||
# Give postfix ownership of its files
|
||||
chown -R postfix:postfix /etc/postfix
|
||||
|
||||
# map virtual aliases and user/filesystem mappings
|
||||
# Map virtual aliases and user/filesystem mappings
|
||||
postmap /etc/postfix/virtual
|
||||
postmap /etc/postfix/virtual-mailbox-maps
|
||||
chown -R postfix:postfix /etc/postfix
|
||||
|
||||
# make user vmail own all mail folders
|
||||
# Make user vmail own all mail folders
|
||||
chown -R vmail:vmail /vmail
|
||||
chmod u+w /vmail
|
||||
|
||||
# Add password file
|
||||
cp /mail_settings/passwords /etc/dovecot/passwd
|
||||
|
||||
|
||||
# OpenDKIM config
|
||||
POSTFIX_MAIN_CF=/etc/postfix/main.cf
|
||||
if [ -z "$OPEN_DKIM" ]; then
|
||||
# Add config block if not present already
|
||||
if grep -q "# OpenDKIM - dockermail" "$POSTFIX_MAIN_CF"; then
|
||||
echo "# OpenDKIM - dockermail" >> "$POSTFIX_MAIN_CF"
|
||||
echo "milter_default_action = accept" >> "$POSTFIX_MAIN_CF"
|
||||
echo "milter_protocol = 2" >> "$POSTFIX_MAIN_CF"
|
||||
echo "smtpd_milters = $OPEN_DKIM_PORT_8891_ADDR" >> "$POSTFIX_MAIN_CF"
|
||||
echo "non_smtpd_milters = $OPEN_DKIM_PORT_8891_ADDR" >> "$POSTFIX_MAIN_CF"
|
||||
echo "# OpenDKIM - dockermail - end" >> "$POSTFIX_MAIN_CF"
|
||||
fi
|
||||
else
|
||||
# Remove OpenDKIM block
|
||||
sed '/# OpenDKIM - dockermail/,/# OpenDKIM - dockermail - end/d' "$POSTFIX_MAIN_CF"
|
||||
fi
|
||||
|
||||
@@ -69,9 +69,3 @@ smtpd_tls_auth_only = yes
|
||||
smtpd_sasl_auth_enable = yes
|
||||
smtpd_sasl_type = dovecot
|
||||
smtpd_sasl_path = private/auth
|
||||
|
||||
# DKIM
|
||||
milter_default_action = accept
|
||||
milter_protocol = 2
|
||||
smtpd_milters = inet:localhost:8891
|
||||
non_smtpd_milters = inet:localhost:8891
|
||||
|
||||
Reference in New Issue
Block a user