Installer Caddy sur un VPS Linux moderne (Ubuntu 24.04, Debian 12) prend 5 minutes en suivant la procédure officielle. Voici les étapes pas à pas avec configuration recommandée pour la production en 2026 (informations vérifiées en avril 2026, susceptibles d’évoluer).
Voir notre guide Caddy complet.
Méthode 1 — Package manager (recommandé)
# Ubuntu 24.04 / Debian 12
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https curl
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' \
| sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' \
| sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo apt update
sudo apt install caddy
# Vérifier
caddy version
systemctl status caddy
Le package installe :
- Binaire
/usr/bin/caddy - Service systemd
caddy.service - User dédié
caddy(sans shell) - Caddyfile
/etc/caddy/Caddyfile - Web root
/var/www/html - Données
/var/lib/caddy(certificats inclus)
Méthode 2 — Binaire statique
# Télécharger depuis caddyserver.com/download
wget -O caddy.tar.gz https://caddyserver.com/api/download?os=linux&arch=amd64
tar xzf caddy.tar.gz
sudo mv caddy /usr/local/bin/
sudo chmod +x /usr/local/bin/caddy
# Vérifier
caddy version
Pratique pour les distributions non supportées par le repository officiel ou pour avoir une version spécifique.
Méthode 3 — Build avec plugins (xcaddy)
# Installer xcaddy (nécessite Go)
go install github.com/caddyserver/xcaddy/cmd/xcaddy@latest
# Build Caddy avec plugins
xcaddy build \
--with github.com/caddy-dns/cloudflare \
--with github.com/mholt/caddy-ratelimit
# Le binaire ./caddy contient les plugins
sudo mv caddy /usr/local/bin/
Étape — Permissions ports privilégiés
# Permettre à Caddy de bind 80 et 443 sans root
sudo setcap cap_net_bind_service=+ep /usr/local/bin/caddy
# Le service systemd du package gère déjà ça via AmbientCapabilities
Étape — Service systemd
Si vous avez installé via le package, le service est déjà là. Pour une installation manuelle, créez :
# /etc/systemd/system/caddy.service
[Unit]
Description=Caddy
After=network.target
[Service]
Type=notify
User=caddy
Group=caddy
ExecStart=/usr/local/bin/caddy run --environ --config /etc/caddy/Caddyfile
ExecReload=/usr/local/bin/caddy reload --config /etc/caddy/Caddyfile
TimeoutStopSec=5s
LimitNOFILE=1048576
PrivateTmp=true
ProtectSystem=full
AmbientCapabilities=CAP_NET_BIND_SERVICE
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable --now caddy
sudo systemctl status caddy
Étape — Caddyfile minimal de démarrage
# /etc/caddy/Caddyfile
{
email admin@exemple.sn
}
exemple.sn {
root * /var/www/exemple.sn
file_server
encode gzip zstd
}
sudo systemctl reload caddy
# HTTPS apparaît en quelques secondes
Étape — Logs et debug
# Logs systemd
journalctl -u caddy -f --no-pager
# Logs JSON structurés
{
log {
output file /var/log/caddy/access.log
format json
}
}
Étape — Tester la config avant reload
caddy validate --config /etc/caddy/Caddyfile
caddy fmt --overwrite /etc/caddy/Caddyfile # auto-format
sudo systemctl reload caddy
Adaptation Afrique de l’Ouest
Caddy gère HTTPS sans aucun setup, idéal pour les développeurs sénégalais ou ivoiriens qui ne veulent pas s’embêter avec Certbot. Le binaire compilé statiquement (~30 Mo) est facile à transférer même sur connexion lente.
Erreurs fréquentes
| Erreur | Cause | Solution |
|---|---|---|
| « address already in use :443 » | Nginx ou autre tient déjà 443 | systemctl stop nginx ou changer ports |
| Certificat ne se génère pas | Port 80 fermé ou DNS faux | Vérifier UFW et dig |
| Caddy ne démarre pas | Caddyfile syntax error | caddy validate |
| Permission denied dans /var/www | User caddy pas accès | chown caddy:caddy /var/www/site |
Sur un angle proche
Hostinger pour vos premiers déploiements
Le panel hPanel reste l’un des plus accessibles du marché pour les débutants en self-hosting.
Lien d affiliation. Si vous achetez via ce lien, le blog reçoit une petite commission sans surcoût pour vous.
Etape 1 : Choisir la distribution et provisionner le VPS
Caddy tourne sans probleme sur Debian 12, Ubuntu 24.04 LTS et Rocky Linux 9. Pour un projet en production en Afrique de l Ouest, partez sur Ubuntu 24.04 LTS chez Hetzner (datacenter Helsinki ou Falkenstein) ou Contabo (Allemagne) : la latence vers Dakar et Abidjan reste sous 120 ms, et les prix demarrent a 4,50 EUR/mois soit environ 2 950 FCFA au taux fixe 1 EUR = 655,957 FCFA.
Provisionnez un CX22 chez Hetzner (2 vCPU, 4 Go RAM, 40 Go SSD), c’est largement suffisant pour servir 5 sites WordPress avec Caddy en frontal. Notez l’IP publique communiquee par Hetzner Cloud dans la console : vous en aurez besoin a l’etape 4 pour configurer le DNS.
Etape 2 : Securiser le serveur avant d installer Caddy
Connectez-vous en SSH sur le port 22 avec l’utilisateur root, puis creez immediatement un utilisateur non-root et desactivez le login root par mot de passe. C’est la regle de base avant d’exposer quoi que ce soit sur le web.
adduser caddyops; usermod -aG sudo caddyops; mkdir -p /home/caddyops/.ssh; cp ~/.ssh/authorized_keys /home/caddyops/.ssh/; chown -R caddyops:caddyops /home/caddyops/.ssh; chmod 700 /home/caddyops/.ssh; chmod 600 /home/caddyops/.ssh/authorized_keysEditez ensuite /etc/ssh/sshd_config pour passer PermitRootLogin no et PasswordAuthentication no, puis redemarrez sshd avec systemctl restart ssh. Verifiez la connexion en tant que caddyops AVANT de fermer la session root, sinon vous vous bloquez dehors.
Etape 3 : Installer Caddy depuis le depot officiel
N’utilisez jamais le binaire pre-compile traine sur des forks GitHub. Le depot APT officiel signe par Cloudsmith garantit les mises a jour de securite automatiques au meme rythme que les CVE Caddy.
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https curl; curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg; curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list; sudo apt update; sudo apt install -y caddyVerifiez l’installation avec caddy version. Vous devez voir au minimum la version 2.8.x. Le service systemd caddy.service est active et lance automatiquement au demarrage.
Etape 4 : Configurer le DNS avant d editer le Caddyfile
Ouvrez votre registrar (OVH, Namecheap, Cloudflare DNS) et creez deux enregistrements A pointant vers l’IP du VPS : un pour example.com et un pour www.example.com. Sur Cloudflare, desactivez le proxy orange (passez en gris) sinon Caddy ne pourra pas obtenir le certificat Let’s Encrypt en mode TLS-ALPN-01.
Attendez 2 a 5 minutes la propagation. Verifiez avec dig +short example.com que vous voyez bien votre IP avant de continuer. Si dig retourne autre chose ou rien, ne lancez pas Caddy : vous epuiserez le quota Let’s Encrypt et serez bloque pendant une semaine.
Etape 5 : Editer le Caddyfile pour servir un premier site HTTPS
Le Caddyfile vit dans /etc/caddy/Caddyfile. Sa magie : 3 lignes suffisent pour avoir HTTPS automatique avec renouvellement transparent, sans copier-coller des commandes certbot.
example.com, www.example.com { root * /var/www/example; file_server; encode gzip zstd }Creez le dossier /var/www/example, deposez-y un index.html de test, puis lancez sudo systemctl reload caddy. Tapez https://example.com dans le navigateur : le cadenas vert apparait en moins de 30 secondes. Caddy a obtenu le certificat Let’s Encrypt automatiquement.
Etape 6 : Mettre en place le reverse proxy vers une app Node ou PHP
Pour une API Node ecoutant sur le port 3000, ou une app PHP-FPM, le Caddyfile devient particulierement concis comparative a une configuration nginx equivalente.
api.example.com { reverse_proxy localhost:3000 } blog.example.com { root * /var/www/blog; php_fastcgi unix//run/php/php8.3-fpm.sock; file_server }Apres caddy reload, testez les deux sous-domaines. Caddy genere un certificat distinct par hote, gere les renouvellements 30 jours avant expiration, et logue tout dans /var/log/caddy/ si vous activez l’option log globale dans le bloc d’options.
Etape 7 : Activer les headers de securite et HSTS
Caddy active HTTPS par defaut mais n’envoie pas les headers de securite recommandes par OWASP. Ajoutez ce bloc header dans chaque site pour passer un audit Mozilla Observatory au-dessus de B+.
example.com { root * /var/www/example; file_server; header { Strict-Transport-Security "max-age=31536000; includeSubDomains"; X-Content-Type-Options "nosniff"; Referrer-Policy "strict-origin-when-cross-origin"; -Server } }Le -Server retire le header qui revele ‘Caddy’ : utile pour ne pas faciliter la tache des scanners automatises type WPScan ou Shodan. Testez vos headers sur securityheaders.com : vous devez decrocher au moins un B avec ces 4 lignes.
Etape 8 : Surveiller, sauvegarder et automatiser les mises a jour
Configurez unattended-upgrades pour les patchs de securite Ubuntu, et planifiez un cron hebdomadaire qui sauvegarde le Caddyfile et les certificats vers un stockage hors-site.
sudo apt install -y unattended-upgrades; sudo dpkg-reconfigure -plow unattended-upgradesStockez les sauvegardes hors du serveur via rsync vers un Object Storage Hetzner ou Backblaze B2 (a partir de 5 USD/To/mois). Testez la restauration une fois par trimestre, sinon vous n’avez pas de backup mais une illusion de backup, ce qui est pire car cela rassure faussement.
Etape 9 : Aller plus loin avec les modules Caddy
Caddy se compile avec des modules tiers via xcaddy : authentification GitHub, brotli, replays anti-DDoS, integration Cloudflare DNS pour wildcard. Pour un cluster a Dakar avec plusieurs sous-domaines, le module DNS Cloudflare evite les certificats individuels et permet un wildcard *.example.com renouvele automatiquement via l’API Cloudflare.
Voir aussi notre categorie DevOps et la section Securite dans la continuité sur le hardening serveur et la mise en production de stacks complexes.
Etape 10 : Verifier la performance reelle depuis l Afrique de l Ouest
Apres la mise en production, testez la latence et le TTFB depuis Dakar via WebPageTest (location Lagos disponible) ou en SSH depuis un VPS de test a Abidjan. Vous devez voir un TTFB sous 350 ms si le serveur est en Allemagne et que Caddy compresse correctement la reponse. Au-dela, branchez Cloudflare en mode ‘orange cloud’ avec Caddy en origin pull pour rapprocher le contenu statique des utilisateurs ouest-africains via les PoP Cloudflare de Lagos et Casablanca.
Etape 11 : Heberger plusieurs sites avec un seul Caddyfile
Caddy gere plusieurs sites en parallele sans alourdir la configuration. Chaque hote vit dans son propre bloc, les sections d’options globales restent communes (email Let’s Encrypt, formats de logs). Pour un freelance qui mutualise un VPS pour 5 clients a Dakar, cette structure evite la duplication de 80 % du code.
{ email admin@example.com } site1.com { root * /var/www/site1; file_server } site2.com { reverse_proxy 127.0.0.1:8080 } api.site3.com { reverse_proxy unix//run/site3.sock }Apres caddy reload, Caddy demande automatiquement 3 certificats Let’s Encrypt distincts et les stocke dans /var/lib/caddy/.local/share/caddy/certificates/. Aucune intervention manuelle requise pour les renouvellements suivants, contrairement a une stack nginx + certbot qui necessite un cron explicite.
Etape 12 : Diagnostiquer les erreurs frequentes en production
Trois pannes reviennent sans cesse. Premiere : Caddy ne demarre pas apres reboot car le port 80 est pris par Apache residuel — desactivez avec systemctl disable apache2. Deuxieme : echec d’obtention du certificat car le DNS n’a pas propage — verifiez avec dig et patientez avant de relancer. Troisieme : 502 Bad Gateway sur le reverse proxy car l’app backend est tombee — branchez un systemctl status sur le service amont et configurez un Restart=always dans son unit systemd.
journalctl -u caddy -n 100 --no-pager | tail -50Cette commande affiche les 50 dernieres lignes du log Caddy, ce qui suffit pour identifier 95 % des incidents. Pour les pannes recurrentes, branchez Loki ou un simple syslog distant pour conserver l’historique au-dela des limites du journal local.
Etape 13 : Industrialiser avec Ansible pour plusieurs VPS
Quand vous gerez plus de 3 VPS Caddy, scriptez l’install via Ansible. Un playbook de 40 lignes provisionne le serveur, installe Caddy depuis le depot Cloudsmith, deploie un Caddyfile templatise par hote, et configure les sauvegardes. Vous reduisez le temps de provisioning d’un nouveau client de 2 heures a 5 minutes, avec une configuration garantie identique d’un VPS a l’autre.
ansible-playbook -i inventory.yml caddy-deploy.yml --limit dakar-prodSortie attendue : ‘PLAY RECAP’ avec 0 failed et 0 unreachable. Conservez le playbook dans un repo Git prive et versionnez chaque modification du Caddyfile, c’est votre garantie de reproduire la prod a l’identique en cas d’incident majeur sur un VPS.
Etape 14 : Recap et checklist finale avant mise en prod
Reprenez avant le go-live : utilisateur non-root cree, login root SSH desactive, Caddy installe depuis le depot officiel, DNS propage et verifie via dig, Caddyfile valide via caddy validate, certificats obtenus, headers de securite presents, unattended-upgrades actif, sauvegardes hors-site planifiees et restauration testee. Cette checklist en 8 points vous evite 90 % des incidents post-deploiement et rend la stack reproductible sur n’importe quel autre VPS chez Hetzner, OVH ou Contabo.
Etape 15 : Sur un angle proche avec Caddy en cluster
Pour un trafic croissant qui depasse 50 000 visites mensuelles, basculez vers une paire de VPS Caddy derriere un load balancer Hetzner Cloud (5,83 EUR/mois). Synchronisez les certificats via le module storage S3 et exposez une route healthcheck pour permettre au LB de retirer un noeud en panne automatiquement, ce qui vous donne une disponibilite proche de 99,95 % sans architecture complexe.
Etape 16 : Notes finales pour un freelance ouest-africain
Facturez l’install Caddy + 5 sites a 150 000 FCFA forfait, puis 25 000 FCFA mensuels pour le monitoring et les mises a jour. Cette grille reste competitive face aux offres mutualisees Hostinger et garantit une marge confortable, en gardant la main sur la stack technique au lieu de dependre d’un panel proprietaire.