In questo scenario vogliamo eseguire il backup di un mail server basato su mailcow-dockerized, un mail server diffuso specialmente per la sua semplicità di installazione e configurazione. Attraverso questa guida vedremo come utilizzare Borgbackup unitamente a Borgmatic per per eseguire il backup dei dati di mailcow direttamente in una shared folder del nostro NAS.
Installazione di docker-borgmatic
Il primo passo fondamentale è ottenere l’immagine di docker-borgmatic ed istanziarne un container. Nei punti seguenti si ipotizza che il percorso di mailcow-dockerized sia quello di default. Per creare il primo file necessario docker-compose.override.yml
seguiamo quindi questi passaggi:
cd /opt/mailcow-dockerized
vi docker-compose.override.yml
/mnt/nas-folder
in questo esempio) e la variabile d’ambiente BORG_PASSPHRASE
version: '2.1'
services:
borgmatic-mailcow:
image: ghcr.io/borgmatic-collective/borgmatic
hostname: mailcow
restart: always
dns: ${IPV4_NETWORK:-172.22.1}.254
volumes:
- vmail-vol-1:/mnt/source/vmail:ro
- crypt-vol-1:/mnt/source/crypt:ro
- redis-vol-1:/mnt/source/redis:ro
- rspamd-vol-1:/mnt/source/rspamd:ro
- postfix-vol-1:/mnt/source/postfix:ro
- mysql-socket-vol-1:/var/run/mysqld/
- borg-config-vol-1:/root/.config/borg
- borg-cache-vol-1:/root/.cache/borg
- ./data/conf/borgmatic/etc:/etc/borgmatic.d:Z
- ./data/conf/borgmatic/ssh:/root/.ssh:Z
# Personalizzare con il percorso di mount della cartella del NAS /mnt/nas-folder
- /mnt/nas-folder:/mnt/source/borgfiles
environment:
- TZ=${TZ}
# Personalizzare con una propria passphrase
- BORG_PASSPHRASE=YouBetterPutSomethingRealGoodHere
networks:
mailcow-network:
aliases:
- borgmatic
volumes:
borg-cache-vol-1:
borg-config-vol-1:
Creiamo ora il file di configurazione di borgmatic. Seguiamo questi passaggi per crearlo automaticamente (minimizzando così il rischio di errore). Carichiamo il file mailcow.conf
source mailcow.conf
E ora generiamo il file di configurazione di borgmatic
cat < data/conf/borgmatic/etc/config.yaml
source_directories:
- /mnt/source/vmail
- /mnt/source/crypt
- /mnt/source/redis
- /mnt/source/rspamd
- /mnt/source/postfix
repositories:
- path: ssh://user@rsync.net:22/./mailcow
label: rsync
exclude_patterns:
- '/mnt/source/postfix/public/'
- '/mnt/source/postfix/private/'
- '/mnt/source/rspamd/rspamd.sock'
keep_hourly: 24
keep_daily: 7
keep_weekly: 4
keep_monthly: 6
mysql_databases:
- name: ${DBNAME}
username: ${DBUSER}
password: ${DBPASS}
options: --default-character-set=utf8mb4
EOF
Creiamo ora il file data/conf/borgmatic/etc/crontab.txt
vi data/conf/borgmatic/etc/crontab.txt
Ed inseriamo al suo interno lo scheduling che vogliamo che il backup segua (in questo esempio lo eseguiamo ogni giorno alle 15:30
30 15 * * * PATH=$PATH:/usr/local/bin /usr/local/bin/borgmatic --stats -v 0 2>&1
Istanziamento del container docker-borgmatic
Siamo ora pronti per istanziare il container di docker-borgmatic. Lanciamo il seguente comando:
docker compose up -d
Inizializzazione del repository
Possiamo finalmente inizializzare il repository di Borg. Lanciamo quindi il seguente comando:
docker compose exec borgmatic-mailcow borgmatic init --encryption repokey-blake2
BORG_PASSPHRASE
. Operazioni aggiuntive
Al fine di mantenere il nostro nuovo Borg repository che contiene i dati di backup, possiamo fare riferimento a una serie di utili comandi.
Esecuzione manuale del task di backup
Nei passaggi precedenti abbiamo impostato una crontab affinché il backup avvenga automaticamente, ma è comunque possibile eseguire manualmente il task di backup lanciando il seguente comando:
docker compose exec borgmatic-mailcow borgmatic -v 2
Elenco dei backup contenuti nel repository
Nei passaggi precedenti abbiamo impostato una crontab affinché il backup avvenga automaticamente, ma è comunque possibile eseguire manualmente il task di backup lanciando il seguente comando:
docker compose exec borgmatic-mailcow borgmatic list