Backup pour mailcow — guide

Installation

  1. Le module est livré avec le mailcow Toolkit 0.7.0 ou plus récent (un paquet, une licence par produit). Sur l’hôte mailcow, en root, lancez l’installateur du Toolkit comme d’habitude : sudo ./install.sh --mailcow-dir /opt/mailcow-dockerized --name <instance>, ou mettez à jour le Toolkit depuis System → Updates (Toolkit). L’installateur copie data/web/mlw-backup/, installe le script hôte /usr/local/sbin/mlw-mailcow-backup-<instance>, crée la table d’historique et le minuteur mlw-mailcow-backup-<instance>.timer (toutes les 5 minutes, il vérifie si une sauvegarde est due).
  2. Installez GnuPG sur l’hôte s’il manque : apt install gnupg.
  3. Ouvrez System → Backup dans le menu d’administration de mailcow.

Licence

Ouvrez System → Updates (Toolkit) et repérez la carte Backup for mailcow : collez la clé et activez-la, ou démarrez l’essai de 30 jours. En ligne de commande : php /web/mlw-toolkit/cli.php activate mailcow-backup <KEY> dans php-fpm-mailcow.

Sans licence valide, les sauvegardes planifiées et les envois vers Google Drive s’arrêtent. La vérification, la restauration et la suppression continuent de fonctionner, vous pouvez donc toujours récupérer vos données.

Première configuration

  1. Settings → Local folder : un chemin absolu sur l’hôte, idéalement sur un autre disque que celui de mailcow (par exemple /srv/backup/mailcow ou un disque monté). Il est créé lisible par root uniquement. Prévoyez de la place pour environ deux sauvegardes.
  2. Encryption : cliquez sur Set avec generated (recommended) : la phrase secrète n’est affichée qu’une fois — conservez-la en dehors du serveur (gestionnaire de mots de passe, papier). Ou choisissez my own et saisissez deux fois une phrase d’au moins 12 caractères.
  3. Back up now dans la carte Status lance la première sauvegarde ; la progression et le journal s’affichent en direct.

Planification, composants et rétention

Dans Settings :

  • Scheduled backups activé ou désactivé ; Times (heure du serveur, plusieurs possibles, p. ex. 03:15, 15:15) et Days.
  • What is backed up : courrier (vmail), clés de chiffrement (crypt — nécessaires pour lire le courrier chiffré), redis, rspamd, postfix, base de données (SQL). Tous sont activés par défaut.
  • Local copies kept et Copies kept on Drive : les N plus récentes sont conservées ; les plus anciennes sont supprimées après chaque sauvegarde.
  • Compression threads pour le script de mailcow.
  • E-mail : en cas d’échec uniquement (par défaut), après chaque sauvegarde, ou jamais ; adresse vide = l’adresse de notification du Toolkit.

Une sauvegarde manquée pendant que le serveur était éteint s’exécute une fois à son retour. Les sauvegardes planifiées tournent avec une priorité CPU et disque basse.

Ce qu’est une sauvegarde

Le script backup_and_restore.sh de mailcow lui-même écrit les composants choisis ; le module les regroupe dans une seule archive et la chiffre avec GnuPG (AES-256, avec protection de l’intégrité) sous votre phrase secrète :

Fichier Contenu
mailcow-<host>-<date>.tar.gpg l’archive chiffrée (les fichiers backup_*.tar.zst de mailcow et son mailcow.conf)
mailcow-<host>-<date>.json le manifeste : composants et tailles, SHA-256 de l’archive, identifiant de la phrase secrète, versions de mailcow et du Toolkit

Sans mailcow : gpg -d mailcow-…tar.gpg > backup.tar demande la phrase secrète et restitue le dossier de sauvegarde habituel de mailcow.

Google Drive

Le module utilise votre propre client OAuth Google, de sorte que l’accès à votre Drive reste sur votre serveur :

  1. Dans Google Cloud Console, créez (ou choisissez) un projet et activez la Google Drive API.
  2. OAuth consent screen : type External, votre adresse e-mail comme contact d’assistance et contact développeur ; puis Publish app (« In production »). En mode test, Google fait expirer l’accès au bout de 7 jours.
  3. Credentials → Create credentials → OAuth client ID, type Web application, avec l’URI de redirection affichée sur la page : https://<your mailcow UI host>/mlw-backup/oauth.php.
  4. Collez le Client ID et le client secret dans Google Drive sur la page, cliquez sur Save, puis sur Connect Google Drive et autorisez l’accès. Google peut avertir que l’application n’est pas validée : c’est votre propre application, continuez.
  5. Dans Settings, activez Upload every backup to Google Drive et choisissez le nom du dossier.

La portée (scope) est drive.file : le module ne voit que les fichiers qu’il a créés, jamais le reste de votre Drive. Les envois se font par parties de 32 Mio et reprennent après une erreur réseau. Test liste le dossier ; Disconnect révoque l’accès (les sauvegardes restent sur Drive).

Vérifier et restaurer

Dans Backups, chaque sauvegarde indique où elle se trouve (en local, sur Drive ou les deux) :

  • Verify : déchiffre et lit toute l’archive (téléchargée depuis Drive si elle n’est pas en local) sans rien restaurer.
  • Restore… : cochez les composants, tapez RESTORE, confirmez. Le SHA-256 de l’archive est contrôlé par rapport à son manifeste, elle est déchiffrée et ses chemins sont vérifiés, puis chaque composant est restauré selon les étapes de la restauration de mailcow elle-même : les conteneurs concernés sont arrêtés puis redémarrés ; la base de données arrête tout mailcow pendant quelques minutes et reprend les identifiants SQL du mailcow.conf de la sauvegarde. Ce qui a changé dans ces composants après la date de la sauvegarde est perdu. Aucune resynchronisation forcée du courrier n’est lancée ; si une boîte aux lettres semble incorrecte ensuite : docker exec $(docker ps -qf name=dovecot-mailcow) doveadm force-resync -A '*'.
  • Delete : supprime la sauvegarde en local et sur Drive.

Un nouveau serveur

  1. Installez mailcow et le Toolkit, activez la licence (ou restaurez sans licence).
  2. Encryption → my own : saisissez l’ancienne phrase secrète (sur un serveur qui en a déjà une, cochez for older backups only).
  3. Google Drive : utilisez le même client OAuth Google et connectez-vous ; les anciennes sauvegardes apparaissent (le module voit les fichiers que son client a créés).
  4. Restore… de la sauvegarde la plus récente, tous les composants.

Ligne de commande et fichiers

Le script hôte peut être lancé à la main (en root) : MLW_TK_CONF=/etc/mlw-mailcow-toolkit/<instance>.conf mlw-mailcow-backup-<instance> backup|verify NAME|list. La progression se trouve dans data/hooks/phpfpm/.mlw-toolkit/backup/run.json et run.log ; l’historique, dans la table mlw_bk_run de la base de données de mailcow. uninstall.sh conserve les sauvegardes locales et celles sur Drive.

Le téléchargement nécessite une licence ou l’essai gratuit de 30 jours.