build: Initial mail server docker image #6
@ -55,8 +55,14 @@ RUN chmod +x /docker-entrypoint.sh \
|
|||||||
# Create vmail user for system
|
# Create vmail user for system
|
||||||
&& groupadd -g 5000 vmail \
|
&& groupadd -g 5000 vmail \
|
||||||
&& useradd -g vmail -u 5000 vmail -d /var/vmail \
|
&& useradd -g vmail -u 5000 vmail -d /var/vmail \
|
||||||
|
# Ensure Backup directory is created
|
||||||
|
&& mkdir /backup \
|
||||||
|
&& chown root:root /backup \
|
||||||
|
&& chmod 700 /backup \
|
||||||
# create SSL directory for ssl certificates
|
# create SSL directory for ssl certificates
|
||||||
&& mkdir -p /ssl \
|
&& mkdir -p /ssl \
|
||||||
|
# Ensure scripts are executable
|
||||||
|
&& chmod +x /bin/backup.sh \
|
||||||
# Dovecot related commands
|
# Dovecot related commands
|
||||||
&& mkdir -p /srv/mail \
|
&& mkdir -p /srv/mail \
|
||||||
&& chown vmail:vmail /srv/mail \
|
&& chown vmail:vmail /srv/mail \
|
||||||
@ -82,9 +88,10 @@ RUN chmod +x /docker-entrypoint.sh \
|
|||||||
# Spammassassin related Commands
|
# Spammassassin related Commands
|
||||||
&& mkdir -p /var/spool/spamassassin \
|
&& mkdir -p /var/spool/spamassassin \
|
||||||
&& chmod 777 /var/spool/spamassassin \
|
&& chmod 777 /var/spool/spamassassin \
|
||||||
|
|
||||||
|
|
||||||
# Setup data volumes
|
# Setup data volumes
|
||||||
VOLUME /srv/mail /ssl /var/spool/spamassassin /var/log
|
VOLUME /srv/mail /ssl /var/spool/spamassassin /backup /var/log
|
||||||
|
|
||||||
# Configure postfix
|
# Configure postfix
|
||||||
RUN postconf -e "maillog_file=/var/log/postfix.log" \
|
RUN postconf -e "maillog_file=/var/log/postfix.log" \
|
||||||
|
53
include/bin/backup.sh
Normal file
53
include/bin/backup.sh
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
backup_version=1.0
|
||||||
|
back_file_name="mail_server-$backup_version-$(date +%Y-%m-%d-%H%M-%Z).tar.gz"
|
||||||
|
|
||||||
|
start=$(date '+%s')
|
||||||
|
|
||||||
|
includes=(/srv/mail)
|
||||||
|
includes+=(/ssl)
|
||||||
|
includes+=(/var/spool/spamassassin)
|
||||||
|
includes+=(/var/log)
|
||||||
|
includes+=(/var/lib/amavis)
|
||||||
|
|
||||||
|
|
||||||
|
backup_command="tar -czpvf $back_file_name ${includes[@]}"
|
||||||
|
|
||||||
|
cd /tmp
|
||||||
|
|
||||||
|
echo "$backup_command"
|
||||||
|
|
||||||
|
if ! $backup_command; then
|
||||||
|
status="tar failed"
|
||||||
|
elif ! mv "/tmp/$back_file_name" /backup/ ; then
|
||||||
|
status="mv failed"
|
||||||
|
else
|
||||||
|
status="success: version=$backup_version size=$(stat -c%s /backup/$back_file_name) duration=$((`date '+%s'` - $start)) command='$backup_command'"
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
logger -t backup "$status"
|
||||||
|
|
||||||
|
|
||||||
|
if [ "0$POST_MASTER_EMAIL" != "0" ]; then
|
||||||
|
|
||||||
|
cat << EOF | /usr/lib/dovecot/dovecot-lda -d "${POST_MASTER_EMAIL}" -o "plugin/quota=maildir:User quota:noenforcing"
|
||||||
|
Auto-Submitted: auto-generated
|
||||||
|
Date: $(date +'%a, %-d %b %Y %H:%M:%S %z')
|
||||||
|
To: ${POST_MASTER_EMAIL}
|
||||||
|
From: Mail Server <NO-REPLY@$(hostname -f)>
|
||||||
|
Subject: Backup $(date +%Y-%m-%d-%H:%M-%Z)
|
||||||
|
|
||||||
|
Server backups have occured on $(hostname -f)
|
||||||
|
|
||||||
|
Summary:
|
||||||
|
|
||||||
|
$status
|
||||||
|
|
||||||
|
EOF
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
6
include/etc/cron.d/container_backup
Normal file
6
include/etc/cron.d/container_backup
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
#
|
||||||
|
# Backup the docker container
|
||||||
|
#
|
||||||
|
# m h dom mon dow user command
|
||||||
|
01 0,3,6,9,12,15,18,21 * * * root /bin/backup.sh 2>&1
|
||||||
|
|
Reference in New Issue
Block a user