📘 Tutoriel : Auto-hébergement complet d’un serveur mail avec Mailcow

🎯 Objectif

Mettre en place un serveur mail sécurisé et autonome, capable d’envoyer et recevoir des e-mails avec un nom de domaine personnalisé (example.com), en s’appuyant sur Mailcow, Docker, Nginx et Let’s Encrypt.


🧱 Pré-requis


🛠️ Étape 1 — Installation de Docker

sudo apt update
sudo apt install -y curl gnupg2 ca-certificates lsb-release apt-transport-https software-properties-common

curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker.gpg

echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
sudo systemctl enable docker && sudo systemctl start docker

🐄 Étape 2 — Installer Mailcow

mkdir -p /opt/mailcow-dockerized
cd /opt/mailcow-dockerized
git clone https://github.com/mailcow/mailcow-dockerized .
./generate_config.sh

➡️ Entrer comme FQDN : email.example.com


⚙️ Étape 3 — Modifier les ports Mailcow

Dans mailcow.conf :

HTTP_PORT=8080
HTTPS_PORT=8443

Redémarrage :

docker compose down
docker compose up -d

🌐 Étape 4 — Configurer Nginx comme reverse proxy

Fichier /etc/nginx/sites-available/mailcow :

server {
    listen 80;
    server_name email.example.com;
    return 301 https://email.example.com$request_uri;
}

server {
    listen 443 ssl;
    server_name email.example.com;

    ssl_certificate /etc/letsencrypt/live/email.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/email.example.com/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}
ln -s /etc/nginx/sites-available/mailcow /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx

🔐 Étape 5 — Générer un certificat SSL Let’s Encrypt

sudo certbot --nginx -d email.example.com

📡 Étape 6 — Configurer les DNS

Type Nom Valeur
A email 192.168.25.22
MX @ email.example.com
TXT @ v=spf1 mx ~all
TXT email._domainkey (DKIM via Mailcow)
TXT _dmarc v=DMARC1; p=quarantine; rua=mailto:admin@example.com

📨 Étape 7 — Créer une adresse et tester

  1. Aller sur https://email.example.com
  2. Se connecter en admin
  3. Créer une boîte mail : admin@example.com
  4. Aller sur https://email.example.com/SOGo
  5. Envoyer et recevoir un message

🧠 Astuces post-installation


✅ Résultat

Un serveur mail 100 % fonctionnel, sécurisé, avec un domaine personnalisé, capable de gérer plusieurs adresses.