ITSkillsCenter
Développement Web

Auto-héberger Mailcow dans un conteneur Incus — serveur mail PME 2026

10 min de lecture

📍 Article principal du sujet : Incus 6 LTS — gérer conteneurs système et VMs Linux pour PME ouest-africaine

Pour une PME ouest-africaine qui paye 5 USD par boîte mail Microsoft 365 ou Google Workspace, l’addition annuelle pour quinze collaborateurs grimpe à 900 USD — soit plus de 540 000 FCFA pour un service que des outils libres reproduisent à équivalence fonctionnelle. Mailcow est l’option la plus mûre du marché : pile mail complète (Postfix, Dovecot, Rspamd, ClamAV, SOGo webmail) intégrée, configuration via interface web, anti-spam de qualité industrielle, support DKIM/SPF/DMARC/MTA-STS/ARC/BIMI. Ce tutoriel le déploie dans un conteneur Incus dédié, branché à un domaine de PME, prêt pour la production.

Le scénario type : un Hostinger Cloud VPS 4 Go RAM dédié au mail (séparé des autres services), un domaine exemple.org dont vous contrôlez les enregistrements DNS, et 15 à 50 boîtes mail à servir avec un anti-spam digne de Gmail. Coût mensuel : 5-6 USD pour le VPS, 0 USD pour Mailcow (open source), soit 30 fois moins que la solution commerciale équivalente.

Pourquoi Mailcow plutôt que Postfix nu ou Mailu

Configurer Postfix + Dovecot + Rspamd + DKIM + DMARC à la main est un excellent exercice pédagogique mais un cauchemar opérationnel : chaque mise à jour mineure peut casser une intégration, le tuning anti-spam demande des semaines, et un MX mal configuré se retrouve sur les listes noires en quelques jours. Mailcow regroupe tout en un seul produit testé en continu par sa communauté, avec des releases régulières et une interface admin qui rend les opérations courantes triviales.

Comparé à Mailu (autre stack mail open source populaire), Mailcow est plus mature, propose plus de fonctionnalités (gestion des alias, des domaines multiples, synchro CalDAV/CardDAV via SOGo, ActiveSync), et bénéficie d’une plus grosse communauté. Mailu est plus léger en RAM (1 Go suffit) ; Mailcow demande 4 Go pour fonctionner correctement.

Prérequis

  • VPS Linux 64 bits, 4 Go RAM minimum (Mailcow refuse de démarrer en dessous), 60 Go SSD
  • Adresse IP publique avec PTR (reverse DNS) configurable — point critique pour la délivrabilité
  • Port 25 sortant ouvert par l’hébergeur — vérifier ce point AVANT de commander le VPS
  • Domaine exemple.org avec accès admin DNS (chez OVH, Namecheap, Cloudflare ou autre)
  • Incus 6 LTS opérationnel — voir Installer Incus avec Zabbly
  • Niveau attendu : Linux confortable, notion de DNS et SMTP
  • Temps estimé : 2 à 3 heures pour la mise en service complète avec délivrabilité validée

Critique : avant tout, vérifier auprès de Hostinger que le port 25 sortant est ouvert sur votre VPS — beaucoup d’hébergeurs le bloquent par défaut anti-spam, et un mail server qui ne peut pas envoyer de mail est aussi utile qu’un téléphone sans micro. Hostinger ouvre le port 25 sur demande au support, généralement sous 24h. Sinon, prévoir un relay SMTP comme Brevo ou Postmark pour l’envoi.

Étape 1 — Préparer les enregistrements DNS

Avant de toucher au serveur, on configure les DNS. Tout faire dans le bon ordre évite plusieurs jours d’attente de propagation. Sur votre registrar/DNS :

; Enregistrements pour mail.exemple.org pointant vers IP_VPS
A     mail.exemple.org           IP_VPS                    300
AAAA  mail.exemple.org           IPv6_VPS (si dispo)       300

; MX du domaine principal
MX    exemple.org                10 mail.exemple.org       3600

; Autodiscover et autoconfig pour clients mail
CNAME autodiscover.exemple.org   mail.exemple.org          3600
CNAME autoconfig.exemple.org     mail.exemple.org          3600

; SPF (vous remplirez DKIM et DMARC après installation)
TXT   exemple.org                "v=spf1 mx ~all"          3600

Le PTR (reverse DNS) doit pointer de l’IP du VPS vers mail.exemple.org. Sur Hostinger, c’est configurable depuis le panneau VPS → DNS → PTR Records. Sans PTR cohérent, Gmail et Outlook rejetteront vos mails. C’est le détail qu’on oublie systématiquement et qui rend le mail server inutilisable trois jours.

Étape 2 — Conteneur Mailcow

Mailcow est livré sous forme de stack Docker Compose. On le déploie donc dans un conteneur Incus avec security.nesting activé pour autoriser Docker dedans.

incus profile create mailcow
incus profile edit mailcow
config:
  limits.cpu.allowance: 100%
  limits.memory: 4GB
  limits.processes: 2000
  security.nesting: true
description: Profil Mailcow auto-heberge
devices:
  eth0:
    name: eth0
    network: incusbr0
    type: nic
  smtp:
    bind: host
    connect: tcp:127.0.0.1:25
    listen: tcp:0.0.0.0:25
    type: proxy
  smtps:
    bind: host
    connect: tcp:127.0.0.1:465
    listen: tcp:0.0.0.0:465
    type: proxy
  smtp-submission:
    bind: host
    connect: tcp:127.0.0.1:587
    listen: tcp:0.0.0.0:587
    type: proxy
  imaps:
    bind: host
    connect: tcp:127.0.0.1:993
    listen: tcp:0.0.0.0:993
    type: proxy
  https:
    bind: host
    connect: tcp:127.0.0.1:443
    listen: tcp:0.0.0.0:443
    type: proxy
  root:
    path: /
    pool: default
    size: 50GB
    type: disk
name: mailcow
used_by: []

Cinq forwards de ports de l’hôte vers le conteneur : 25 (SMTP), 465 (SMTPS), 587 (Submission), 993 (IMAPS), 443 (HTTPS pour l’admin et le webmail). Le port 80 reste sur Caddy de l’hôte pour les certificats Let’s Encrypt si vous en exposez d’autres services en parallèle ; sinon, ajouter le forward 80 → conteneur.

incus launch images:debian/12 mailcow-srv -p mailcow
incus shell mailcow-srv

apt update && apt upgrade -y
apt install -y curl wget git ca-certificates gnupg

# Installer Docker (Mailcow exige Docker)
curl -fsSL https://get.docker.com | sh
systemctl enable --now docker

# Cloner Mailcow
cd /opt
git clone https://github.com/mailcow/mailcow-dockerized
cd mailcow-dockerized
./generate_config.sh
# Répondre à la question : Mail server hostname (FQDN) : mail.exemple.org

Le script generate_config.sh crée mailcow.conf avec les paramètres de base (FQDN, fuseau horaire, mots de passe générés). On peut éditer ce fichier pour ajuster les ports, la rétention du quarantine, la taille max des messages.

Étape 3 — Démarrer Mailcow

cd /opt/mailcow-dockerized
docker compose pull
docker compose up -d

Le téléchargement initial pèse environ 3 Go (8-10 images Docker) — comptez 10 minutes selon la bande passante. Une fois en route, Mailcow occupe environ 2 Go de RAM en exploitation normale, jusqu’à 3,5 Go en pic d’analyse anti-spam.

L’interface admin est accessible sur https://mail.exemple.org/ (login par défaut admin / moohoo, à changer immédiatement). Première opération : Configuration → Edit administrator → changer le mot de passe et activer le 2FA via TOTP.

Étape 4 — Créer un domaine et des boîtes mail

Dans l’admin, Email → Configuration → Domains → Add domain. Saisir exemple.org, valider. Mailcow génère immédiatement la clé DKIM correspondante.

Récupérer la clé DKIM (Configuration → Configuration & Details → ARC/DKIM keys → exemple.org → bouton « Copy »). Cette clé est un enregistrement TXT à ajouter dans votre DNS :

; Dans votre DNS
TXT  dkim._domainkey.exemple.org  "v=DKIM1; k=rsa; t=s; s=email; p=MIIBIjANBgkqhkiG..."
TXT  _dmarc.exemple.org           "v=DMARC1; p=quarantine; rua=mailto:dmarc@exemple.org; pct=100"
TXT  _mta-sts.exemple.org         "v=STSv1; id=2026042900;"

Pour créer une boîte mail : Email → Mailboxes → Add mailbox. Saisir le nom, le mot de passe, le quota (5 Go par défaut), valider. La boîte est immédiatement opérationnelle ; l’utilisateur peut se connecter via SOGo (webmail intégré, accessible sur la même URL /SOGo) ou un client desktop (Thunderbird, Apple Mail, Outlook).

Étape 5 — Tester la délivrabilité

Premier test : envoyer un mail vers une adresse Gmail à vous, et vérifier que le mail arrive dans la boîte de réception (et pas dans les spams). Pour un diagnostic complet, deux outils gratuits incontournables :

  • mail-tester.com — envoyer un mail à l’adresse fournie, voir le rapport. Score cible : 9/10 minimum, idéalement 10/10.
  • mxtoolbox.com — entrer le domaine, vérifier MX, SPF, DKIM, DMARC, blacklists, PTR.

Si le score mail-tester est bas, les causes habituelles : DKIM mal copié dans le DNS, PTR absent, IP du VPS sur une liste noire (vérifier avec MXToolbox), SPF trop laxiste. Chaque point se corrige individuellement, et un re-test mail-tester confirme l’amélioration.

Étape 6 — Configurer les clients mail

Mailcow expose les paramètres standard auto-discoverable. Sur Thunderbird ou Apple Mail, entrer juste l’adresse et le mot de passe — la configuration est détectée automatiquement. Pour les setups manuels :

  • IMAP : mail.exemple.org port 993, SSL/TLS
  • SMTP : mail.exemple.org port 587, STARTTLS, authentification mot de passe
  • CalDAV : https://mail.exemple.org/SOGo/dav/utilisateur@exemple.org/Calendar/personal/

Pour les utilisateurs mobiles, l’app SOGo Connect ou simplement le client mail natif iOS/Android avec autoconfig fonctionnent. Sur ActiveSync (pour Outlook), Mailcow inclut Z-Push automatiquement.

Étape 7 — Sauvegardes

Mailcow inclut un script de backup (helper-scripts/backup_and_restore.sh) qui sauvegarde tous les volumes Docker en un coup. On l’enchaîne avec le pipeline backup S3 distant pour pousser vers Bunny ou Wasabi.

cd /opt/mailcow-dockerized/helper-scripts
./backup_and_restore.sh backup all --delete-days 7
# Crée un dossier /var/lib/docker/volumes/backup/mailcow-YYYYMMDD/
rclone copy /var/lib/docker/volumes/backup/ bunny:backups-itskills/mailcow/

Combiné à un cron quotidien, on obtient une stratégie de backup standard : 7 jours locaux + push S3 distant. La restauration sur un autre VPS suit la procédure inverse — réinstaller Mailcow sur la nouvelle machine, exécuter backup_and_restore.sh restore.

Erreurs fréquentes

Erreur Cause Solution
Mails sortants en spam Gmail Manque PTR ou DKIM mal configuré Vérifier sur mxtoolbox.com et corriger PTR + DKIM
Port 25 timeout Hébergeur bloque le port 25 sortant Demander l’ouverture au support Hostinger ou utiliser un relay SMTP (Brevo, Postmark)
SOGo webmail blanc à la connexion Cookies tiers bloqués ou cache navigateur Vider le cache, désactiver les bloqueurs ; vérifier que le HTTPS est valide
Mailcow consomme 100% CPU Rspamd recheck massif après import Patience à l’install initial, baisse à charge normale après quelques heures
Boîte saturée à 5 Go Quota par défaut Edit mailbox → augmenter quota

Adaptation au contexte ouest-africain

Pour une ONG dakaroise avec 20 collaborateurs, le calcul mensuel : 6 USD VPS + 0 USD Mailcow vs 100-160 USD pour Microsoft 365 Business Standard. Économie annuelle : plus de 1 200 USD, soit 720 000 FCFA — l’équivalent du salaire mensuel d’un comptable. Sur trois ans, la migration self-hosted finance le recrutement d’un sysadmin junior.

L’argument souveraineté est aussi sensible que pour Nextcloud : les mails restent sur un serveur que l’organisation contrôle, ne transitent pas par les datacenters US où s’appliquent le Cloud Act et le Patriot Act. Pour les structures qui correspondent avec des avocats, des médecins ou des journalistes, c’est un argument professionnel concret.

Côté support, l’écosystème Mailcow francophone est actif, et le forum officiel répond rapidement. Pour les structures qui ne veulent pas d’auto-support, des prestataires d’infogérance Mailcow facturent 20 à 50 USD/mois de support — toujours bien moins cher que Microsoft 365.

Tutoriels frères

Pour aller plus loin

FAQ

Combien de boîtes mail sur un VPS 4 Go ?
50 boîtes en usage standard (envoi/réception modéré). Pour des boîtes de communication intensive (newsletters, support client), prévoir 8 Go.

ActiveSync (Outlook synchro complète) inclus ?
Oui, via Z-Push intégré. Outlook 2019/2021/365 fonctionnent avec sync calendrier et contacts.

Comment migrer depuis Microsoft 365 ?
Mailcow inclut imapsync : Configuration → Sync jobs → Add. Cela copie les boîtes une à une depuis le serveur source. Compter 1-2 heures par boîte de 5 Go.

Anti-spam aussi efficace que Gmail ?
Très proche grâce à Rspamd, surtout après quelques semaines d’apprentissage. La précision dépend du tuning continu mais le score baseline est satisfaisant pour 95 % des cas.

Mailcow et CardDAV/CalDAV ?
Oui via SOGo intégré. Les clients DAVx5 (Android) et la synchro native iOS fonctionnent sans configuration spéciale.

Besoin d'un site web ?

Confiez-nous la Création de Votre Site Web

Site vitrine, e-commerce ou application web — nous transformons votre vision en réalité digitale. Accompagnement personnalisé de A à Z.

À partir de 250.000 FCFA
Parlons de Votre Projet
Publicité