Ce guide suit les documentations officielles relues le 14 octobre 2026 : HTTPS automatique de Caddy et sa page de démarrage en proxy inverse, l'image Docker officielle de Caddy, les résolveurs ACME de Traefik et les instructions de Certbot. Versions publiées à cette date : Caddy 2.11.7, Traefik 3.7.14, Certbot 5.8.0.
Avant tout : ce que Let's Encrypt vérifie
Let's Encrypt ne délivre un certificat qu'au serveur qui prouve contrôler le domaine. Avec la méthode la plus courante, il vient lire un fichier sur le port 80. Trois conditions, donc :
- Le domaine pointe vers le serveur :
dig +short app.votre-domaine.frrépond son adresse. Voir Pointer un nom de domaine vers son VPS. - Les ports 80 et 443 sont joignables depuis Internet, sans pare-feu qui les bloque en amont.
- Un seul programme écoute sur ces ports. Deux proxys inverses ne peuvent pas cohabiter : choisissez-en un.
Choisir sa méthode
| Situation | Méthode conseillée |
|---|---|
| Applications dans des conteneurs Docker, réglages en fichiers | Caddy ou Traefik |
| Applications Docker, réglages dans une interface web | Nginx Proxy Manager |
| Nginx ou Apache installé sur le serveur, hors Docker | Certbot |
| Plateforme comme Coolify ou Dokploy | son propre proxy, rien à ajouter |
Avec Caddy
Caddy obtient le certificat dès qu'un nom de domaine figure dans sa configuration, et redirige seul le HTTP vers le HTTPS. L'exemple sert une application de conteneur nommée app, qui écoute sur le port 3000, placée dans le même fichier compose que Caddy :
- Créez un dossier
~/caddy/confet placez-y un fichierCaddyfile:
app.votre-domaine.fr {
reverse_proxy app:3000
}
- Dans
~/caddy, créez lecompose.yamlci-dessous, tiré de l'image officielle, en remplaçant l'image deapppar celle de votre application. - Lancez-le :
docker compose up -d - Après une modification du
Caddyfile, rechargez sans couper :docker compose exec -w /etc/caddy caddy caddy reload
services:
caddy:
image: caddy:2.11
restart: unless-stopped
ports:
- "80:80"
- "443:443"
- "443:443/udp"
volumes:
- ./conf:/etc/caddy
- caddy_data:/data
- caddy_config:/config
app:
image: votre-application:1.0
restart: unless-stopped
volumes:
caddy_data:
caddy_config:
Les services d'un même fichier compose se joignent par leur nom : app n'a donc pas besoin de section ports:. Pour une application décrite dans un autre fichier, faites-les partager un réseau Docker, comme dans le guide de Traefik. Le volume caddy_data garde les certificats : la documentation de l'image insiste pour qu'il soit conservé, il ne s'agit pas d'un cache. La ligne 443:443/udp sert au HTTP/3 ; sans elle, le site fonctionne en HTTPS ordinaire.
Avec Traefik
Traefik demande le certificat au premier passage sur un routeur qui porte l'étiquette tls.certresolver. Le résolveur se déclare une fois, avec une adresse e-mail, un fichier de stockage et le point d'entrée du port 80. L'installation complète, étiquettes comprises, est dans Traefik : reverse proxy pour Docker.
Avec Certbot, pour Nginx installé sur le serveur
Certbot s'installe par snap, comme le recommandent ses instructions. Si la commande snap manque, ce qui est le cas habituel sur Debian, installez d'abord snapd en suivant la page de Snapcraft.
- Retirez un éventuel Certbot installé par apt :
sudo apt remove certbot - Installez-le :
sudo snap install --classic certbot - Rendez la commande accessible :
sudo ln -s /snap/bin/certbot /usr/local/bin/certbot - Obtenez le certificat et laissez Certbot modifier la configuration de Nginx :
sudo certbot --nginx - Testez le renouvellement :
sudo certbot renew --dry-run
Le renouvellement est ensuite automatique : le paquet pose une tâche planifiée, visible avec systemctl list-timers. Si vous préférez modifier Nginx vous-même, remplacez l'étape 4 par sudo certbot certonly --nginx. Sans serveur web en place, sudo certbot certonly --standalone lance son propre serveur le temps de la validation, ce qui suppose que le port 80 soit libre.
Quand la validation échoue
- « Connection refused » ou délai dépassé : le port 80 n'est pas joignable, ou rien n'écoute dessus.
- Mauvaise adresse dans le message d'erreur : le domaine pointe encore ailleurs, souvent par un ancien enregistrement AAAA.
- Message de limite de fréquence (« rate limit ») : Let's Encrypt plafonne les demandes répétées pour un même nom. Corrigez la cause avant de relancer, plutôt que de recommencer en boucle.
- Nuage orange chez Cloudflare : le trafic passe par Cloudflare. Pour une première mise en service, passez l'enregistrement en nuage gris le temps d'obtenir le certificat. Voir Certificat SSL gratuit : passer son site en HTTPS pour le contenu mixte et les autres pièges du passage au HTTPS.
Sur un VPS Hubspace
Le pare-feu réseau placé devant le serveur ouvre déjà 80 et 443, ce qui suffit à Let's Encrypt. Le port UDP 443 du HTTP/3, lui, est fermé à la livraison : pour l'activer, ajoutez une règle UDP 443 dans l'onglet « Firewalls » de votre espace client. Sans elle, le site reste servi en HTTPS ordinaire, ce qui ne gêne rien. Docker et Compose sont installés, utilisables par le compte admin sans sudo. La sauvegarde quotidienne couvre le disque du serveur, où Docker range ses volumes et donc les certificats ; un disque supplémentaire monté sur /mnt/data n'y est pas compris. Les serveurs VPS décrivent ce qui est livré.
Questions fréquentes
Un certificat Let's Encrypt est-il vraiment gratuit ?
Oui. Let's Encrypt est une autorité de certification à but non lucratif. Son certificat chiffre la connexion aussi bien qu'un certificat payant ; il ne porte pas le nom de votre entreprise, ce que presque aucun site n'utilise.
Faut-il renouveler le certificat à la main ?
Non. Caddy, Traefik et Certbot le renouvellent seuls avant son expiration, tant que le domaine pointe vers le serveur et que le port 80 reste joignable.
Peut-on obtenir un certificat pour tous les sous-domaines d'un coup ?
Oui, un certificat générique (*.votre-domaine.fr), mais il exige une validation par le DNS : l'outil doit pouvoir créer un enregistrement dans votre zone, par l'API du service qui la gère. Un certificat par sous-domaine, obtenu automatiquement, est plus simple à tenir.
Articles liés
- Pointer un nom de domaine vers son VPSPointer un nom de domaine ou un sous-domaine vers l'adresse IP de votre VPS avec un enregistrement A, vérifier la propagation et préparer le certificat HTTPS.
- Déployer sur son VPS avec GitHub ActionsDéployer une application sur son serveur à chaque push avec GitHub Actions et SSH : clé dédiée, secrets du dépôt, clé du serveur et workflow complet.
- Certificat SSL : comment ça marcheCertificat SSL (TLS) : ce qu'il contient, la chaîne de confiance, les niveaux DV, OV et EV, sa durée de validité et la façon de lire celui d'un site.