Mailcow : serveur mail tout-en-un docker

Mailcow : serveur mail tout-en-un docker

Mailcow dockerized package Postfix + Dovecot + Rspamd + SOGo + ClamAV dans une stack Docker Compose preconfiguree, avec UI web complete. La solution turnkey pour heberger son mail sans devenir expert Postfix.

Introduction

Mailcow :

  • Stack complete docker-compose : Postfix, Dovecot, Rspamd, ClamAV, SOGo (webmail + cal/cardDAV), Solr (search), Redis, MariaDB
  • UI web pour gerer domaines, boites, alias, ACL
  • DKIM auto-genere par domaine
  • Anti-spam Rspamd preconfigure
  • Quarantine et release des mails douteux
  • Whitelist / blacklist par boite
  • Backups simples
  • DNSBL, SPF, DMARC, ARC, etc.

Si vous voulez heberger votre mail mais sans toucher Postfix/Dovecot a la main, c'est la solution.

Prerequis

  • VPS Linux Debian 12 / Ubuntu 24.04
  • 4 vCPU, 6 Go RAM minimum (8 Go recommande), 20 Go SSD + espace pour les mails
  • IP publique avec rDNS configure
  • Domaine
  • Acces root
  • Ports : 25, 80, 110, 143, 443, 465, 587, 993, 995, 4190 disponibles

Etape 1 : Pre-checks DNS

Configurez d'abord :

mail.verycloud.fr.    A     VOTRE_IP
autodiscover.verycloud.fr.   CNAME mail.verycloud.fr.
autoconfig.verycloud.fr.     CNAME mail.verycloud.fr.

verycloud.fr.   MX 10 mail.verycloud.fr.
verycloud.fr.   TXT   "v=spf1 mx -all"
_dmarc.verycloud.fr.   TXT   "v=DMARC1; p=quarantine; rua=mailto:[email protected]"

DKIM sera ajoute apres installation.

Etape 2 : Installation Docker

sudo apt update
sudo apt install -y curl gnupg lsb-release ca-certificates

curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list

sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

sudo systemctl enable --now docker
docker --version
docker compose version

Etape 3 : Cloner Mailcow

cd /opt
sudo git clone https://github.com/mailcow/mailcow-dockerized
cd mailcow-dockerized

Etape 4 : Generer la config

sudo ./generate_config.sh

Repondez aux questions :

  • Hostname : mail.verycloud.fr
  • Timezone : Europe/Paris
  • Branch : master (stable)

Le script genere mailcow.conf. Editez si besoin :

sudo nano mailcow.conf

Variables interessantes :

MAILCOW_HOSTNAME=mail.verycloud.fr
HTTPS_PORT=443
HTTP_PORT=80
MAILCOW_PASS_SCHEME=BLF-CRYPT

# Skip Lets Encrypt si vous gerez vous-meme
SKIP_LETS_ENCRYPT=n
ADDITIONAL_SAN=

# Limites
DEFAULT_DKIM_KEY_LENGTH=2048

Etape 5 : Demarrer la stack

sudo docker compose pull
sudo docker compose up -d

Premier demarrage : 5-10 min. Mailcow tire ~15 images, configure tout.

Verifiez :

sudo docker compose ps

Tous les services doivent etre up.

Etape 6 : Premier acces

Visitez https://mail.verycloud.fr/.

Login defaut : admin / moohoo.

⚠️ Changez immediatement le mot de passe : Settings > Profile.

Etape 7 : Creer un domaine

UI > Mail Setup > Domains > Add domain.

Domain : verycloud.fr
Description : Mon domaine pro
Aliases : 200
Mailboxes : 20
Mailbox quota max : 5120 MB

Cliquez Add domain and restart SOGo.

Etape 8 : Recuperer le DKIM

Apres ajout du domaine, allez dans Configuration > Configuration > ARC/DKIM keys :

Vous voyez votre cle DKIM en format BIND. Copiez le record dkim._domainkey.verycloud.fr et publiez-le dans votre DNS :

dkim._domainkey.verycloud.fr.   TXT   "v=DKIM1; k=rsa; p=MIIBIjANBgkqhk..."

Verifiez avec :

dig dkim._domainkey.verycloud.fr TXT

Etape 9 : Creer une boite mail

UI > Mail Setup > Mailboxes > Add mailbox.

Username : mathys
Domain : verycloud.fr
Full name : Mathys
Password : XXX
Quota : 2048 MB

L'adresse [email protected] est creee.

Etape 10 : Configurer un client

Configuration auto :

  • Apple Mail / iOS : Mailcow expose Apple Mobileconfig via UI > Mailboxes > Profile > QR code
  • Outlook / Thunderbird : autodiscover/autoconfig actif

Configuration manuelle :

  • IMAP : mail.verycloud.fr, port 993 SSL/TLS
  • SMTP : mail.verycloud.fr, port 587 STARTTLS (ou 465 SSL/TLS)
  • Auth : login = adresse mail complete

Etape 11 : Webmail SOGo

Inclus dans Mailcow : https://mail.verycloud.fr/SOGo/

Login avec votre adresse mail. SOGo offre :

  • Webmail
  • Carnet d'adresses (CardDAV)
  • Calendrier (CalDAV)
  • Mobile sync via EAS (ActiveSync)

Pour les utilisateurs : https://mail.verycloud.fr/ redirige vers SOGo apres login.

Etape 12 : Backups

Mailcow fournit un script :

cd /opt/mailcow-dockerized
sudo ./helper-scripts/backup_and_restore.sh backup all

Cela sauvegarde :

  • Bases de donnees (MariaDB, Redis)
  • Volumes Maildir (vmail)
  • Volumes Rspamd, Solr
  • Config DKIM

Stockage : choisissez le path lors de l'execution.

Pour automatiser :

sudo crontab -e
0 3 * * * cd /opt/mailcow-dockerized && MAILCOW_BACKUP_LOCATION=/mnt/backups ./helper-scripts/backup_and_restore.sh backup all-attr --delete-days 30

⚠️ Pensez a un offsite (rsync, rclone vers S3).

Restore :

sudo ./helper-scripts/backup_and_restore.sh restore

Depannage

"Cannot start container" au premier launch

Souvent un port 25/80/443 deja pris :

sudo ss -tunlp | grep -E ':25 |:80 |:443 |:587 '

Stoppez le service conflictuel (par exemple un Nginx local).

Mails sortants rejetes

Verifiez avec https://www.mail-tester.com :

  • SPF, DKIM, DMARC OK ?
  • rDNS configure ?
  • IP pas blacklistee ?
sudo docker exec -it mailcowdockerized-postfix-mailcow-1 postqueue -p

Webmail SOGo timeout

sudo docker logs mailcowdockerized-sogo-mailcow-1 -f

Souvent un cache Redis corrompu. Restart :

sudo docker compose restart sogo-mailcow redis-mailcow

Disque qui se remplit

sudo du -sh /var/lib/docker/volumes/mailcowdockerized_vmail-vol-1/

Verifiez les quotas par boite. Mailcow log les overload dans UI > Logs.

Update Mailcow

cd /opt/mailcow-dockerized
sudo ./update.sh

Le script update les images, fait les migrations DB. Faites un backup avant.

Commandes utiles

# Stack
cd /opt/mailcow-dockerized
sudo docker compose ps
sudo docker compose logs -f postfix-mailcow
sudo docker compose restart
sudo docker compose pull && sudo docker compose up -d

# Update Mailcow
sudo ./update.sh -c

# Backup / restore
sudo ./helper-scripts/backup_and_restore.sh backup all
sudo ./helper-scripts/backup_and_restore.sh restore

# Reset mot de passe admin
sudo ./helper-scripts/mailcow-reset-admin.sh

# Voir les queues Postfix
sudo docker exec -it mailcowdockerized-postfix-mailcow-1 postqueue -p
sudo docker exec -it mailcowdockerized-postfix-mailcow-1 postsuper -d ALL

# Voir Rspamd stats
curl http://localhost:11334/stat | jq

# Logs combines
sudo docker compose logs -f --tail=100

Conclusion

Mailcow vous donne :

  • Serveur mail complet en 30 min
  • UI web pour gerer tout
  • DKIM, SPF, DMARC, anti-spam preconfigures
  • Webmail + cal/cardDAV inclus
  • Backups simples

Limites :

  • Necessite Docker
  • Ressources : 6+ Go RAM mini
  • Moins flexible que Postfix nu (mais c'est le but)

Pour aller plus loin :

  • Combinez avec un reverse proxy externe (Caddy / Nginx) si besoin
  • Migrez vos comptes existants avec imapsync
  • Pour de la HA, regardez la doc Mailcow multi-instance

Ressources

Rejoignez notre serveur communautaire Discord

Pour toute question, suggestion ou simplement pour discuter avec la communauté, rejoignez-nous sur Discord !

900+Membres