[{"data":1,"prerenderedAt":186},["ShallowReactive",2],{"seo-verification":3,"blog-deployer-avec-caddy-ma-fr":6,"promo-bar-likely":185},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-deployer-avec-caddy-ma-fr",{"id":9,"slug":10,"slugs":11,"title":15,"excerpt":16,"readTime":17,"views":18,"isPinned":19,"noindex":19,"publishedAt":20,"updatedAt":21,"category":22,"categories":27,"featuredImage":29,"bgImage":30,"posterImage":31,"relatedSolution":32,"intro":34,"sections":35,"ctaTitle":127,"ctaBody":128,"ctaButton":129,"ctaUrl":130,"relatedPosts":131},39,"deployer-avec-caddy",{"fr":10,"en":12,"ar":13,"es":14},"deploy-your-applications-with-caddy-on-a-vps","انشر-تطبيقاتك-باستخدام-caddy-على-خادم-vps","desplegar-con-caddy","Caddy en reverse proxy sur VPS : guide complet","Installez et configurez Caddy comme reverse proxy sur votre VPS : HTTPS automatique Let's Encrypt, multi-apps, sécurité et dépannage des erreurs courantes.",8,4,false,"2026-05-12T00:00:00+00:00","2026-09-25T23:43:04+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":25},3,"Déploiement","deploiement","bg-success\u002F10 text-success",[28],{"id":23,"name":24,"slug":25,"color":26,"icon":25},null,"\u002Fblog\u002Fcovers\u002Fbg.svg","\u002Fblog\u002Fcovers\u002Fdeployer-avec-caddy-poster.svg",{"categorySlug":25,"appSlug":33},"caddy","Caddy est un serveur web écrit en Go qui gère l'intégralité du cycle TLS — négociation ACME, renouvellement, redirection HTTP → HTTPS — sans la moindre ligne de configuration dédiée. Là où Nginx demande Certbot, un cron et un vhost par domaine, un seul `Caddyfile` de dix lignes suffit pour exposer plusieurs applications sur le même VPS en HTTPS. Ce guide couvre l'installation, la configuration multi-applications, le durcissement et les erreurs les plus courantes.",[36,40,50,53,78,81,117,120,124],{"type":37,"title":38,"body":39},"h2","Pourquoi choisir Caddy comme frontal sur votre VPS ?","La plupart des reverse proxys délèguent la gestion TLS à un outil externe — Certbot, acme.sh ou un script cron maison. Caddy intègre ce mécanisme de bout en bout : dès qu'un nom de domaine est déclaré dans le `Caddyfile`, il contacte Let's Encrypt, obtient le certificat et le renouvelle avant expiration, sans intervention manuelle. Le résultat est une configuration qui se lit en quelques lignes et qui se déploie identiquement sur tous vos VPS, sans état externe à synchroniser.",{"type":41,"title":42,"items":43},"ul","Les atouts de Caddy en production",[44,45,46,47,48,49],"**HTTPS automatique** : Let's Encrypt ACME HTTP-01 activé dès qu'un nom de domaine est déclaré — aucun cron, aucun plugin à installer","**Syntaxe concise** : un bloc de cinq lignes remplace un vhost Nginx de quarante lignes avec son fichier de configuration Certbot","**Zéro rechargement à froid** : `caddy reload` applique le nouveau `Caddyfile` sans couper les connexions en cours","**HTTP\u002F2 et HTTP\u002F3 (QUIC) par défaut** : activés sans configuration supplémentaire sur toutes les versions 2.x","**API JSON** : la configuration est modifiable à chaud via une API REST, utile pour les environnements dynamiques ou conteneurisés","**Image Docker officielle légère** : `caddy:2-alpine` pèse moins de 20 Mo et suffit pour la majorité des cas de production",{"type":37,"title":51,"body":52},"Prérequis","Avant de démarrer, vérifiez que votre VPS répond aux conditions suivantes.\n\n**Ressources minimales** : 512 Mo de RAM et 1 vCPU suffisent pour Caddy seul. Comptez 1 Go de RAM et 2 vCPU si vous hébergez plusieurs applications derrière.\n\n**Ports 80 et 443 libres** : Caddy les occupe pour ACME HTTP-01 (port 80) et pour le trafic HTTPS (port 443). Vérifiez qu'aucun autre processus ne les utilise :\n```bash\nss -tlnp | grep -E ':80|:443'\n```\n\n**Nom de domaine pointant sur le VPS** : Let's Encrypt valide la propriété du domaine en interrogeant le port 80 de votre IP. Votre enregistrement DNS `A` doit être actif et propagé avant de lancer Caddy.\n\n**Système d'exploitation** : Debian 11\u002F12 ou Ubuntu 22.04\u002F24.04. Les commandes de ce guide sont testées sur ces distributions.\n\n**Docker (optionnel)** : si vous déployez Caddy en conteneur, Docker Engine 24+ et Docker Compose v2 sont nécessaires.",{"type":54,"title":55,"steps":56},"steps","Déployer Caddy en reverse proxy",[57,60,63,66,69,72,75],{"title":58,"body":59},"Méthode 1 — Installation via le dépôt APT officiel","Caddy propose un dépôt APT signé. Ajoutez-le, puis installez le paquet :\n```bash\napt install -y debian-keyring debian-archive-keyring apt-transport-https curl\ncurl -1sLf 'https:\u002F\u002Fdl.cloudsmith.io\u002Fpublic\u002Fcaddy\u002Fstable\u002Fgpg.key' \\\n  | gpg --dearmor -o \u002Fusr\u002Fshare\u002Fkeyrings\u002Fcaddy-stable-archive-keyring.gpg\ncurl -1sLf 'https:\u002F\u002Fdl.cloudsmith.io\u002Fpublic\u002Fcaddy\u002Fstable\u002Fdebian.deb.txt' \\\n  | tee \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fcaddy-stable.list\napt update && apt install caddy\n```\nVérifiez la version installée : `caddy version` doit afficher `v2.9.x` ou supérieur.",{"title":61,"body":62},"Méthode 2 — Déploiement avec Docker Compose","Si vos applications tournent déjà sous Docker, un service Caddy dans le même `compose.yml` est l'approche la plus simple. Créez un fichier `compose.yml` à la racine de votre projet :\n```bash\nservices:\n  caddy:\n    image: caddy:2-alpine\n    restart: unless-stopped\n    ports:\n      - \"80:80\"\n      - \"443:443\"\n      - \"443:443\u002Fudp\"\n    volumes:\n      - .\u002FCaddyfile:\u002Fetc\u002Fcaddy\u002FCaddyfile\n      - caddy_data:\u002Fdata\n      - caddy_config:\u002Fconfig\n    networks:\n      - proxy\n\nvolumes:\n  caddy_data:\n  caddy_config:\n\nnetworks:\n  proxy:\n    external: true\n```\nCréez le réseau partagé une seule fois : `docker network create proxy`. Vos autres services rejoignent ce réseau pour être accessibles par Caddy.",{"title":64,"body":65},"Créer le Caddyfile de base","Le `Caddyfile` est le fichier de configuration central. Pour une installation APT, il se trouve dans `\u002Fetc\u002Fcaddy\u002FCaddyfile`. Pour Docker, placez-le à côté de votre `compose.yml`.\n\nVoici un exemple minimal qui expose une application sur le port 3000 :\n```bash\nmonapp.com {\n    reverse_proxy localhost:3000\n}\n```\nC'est tout. Caddy détecte que `monapp.com` est un nom de domaine, contacte Let's Encrypt via ACME HTTP-01, obtient un certificat et redirige automatiquement tout le trafic HTTP vers HTTPS. Les certificats sont stockés dans `~\u002F.local\u002Fshare\u002Fcaddy\u002F` (APT) ou dans le volume `caddy_data` (Docker).",{"title":67,"body":68},"Configuration multi-applications (multi-vhost)","Héberger plusieurs applications sur le même VPS ne demande que des blocs supplémentaires dans le même fichier :\n```bash\napp1.votredomaine.com {\n    reverse_proxy localhost:3000\n}\n\napp2.votredomaine.com {\n    reverse_proxy localhost:4000\n}\n\nblog.votredomaine.com {\n    reverse_proxy localhost:8080\n}\n```\nChaque bloc obtient son propre certificat Let's Encrypt. Caddy gère les renouvellements de manière indépendante pour chaque domaine, en parallèle, sans interruption de service.",{"title":70,"body":71},"Appliquer le Caddyfile sans interruption","Pour APT, rechargez la configuration sans couper les connexions :\n```bash\nsystemctl reload caddy\n# ou, si vous avez modifié le fichier en dehors de \u002Fetc\u002Fcaddy\u002F :\ncaddy reload --config \u002Fchemin\u002Fvers\u002FCaddyfile\n```\nPour Docker :\n```bash\ndocker compose exec caddy caddy reload --config \u002Fetc\u002Fcaddy\u002FCaddyfile\n```\nVérifiez que la syntaxe est correcte avant de recharger : `caddy validate --config \u002Fetc\u002Fcaddy\u002FCaddyfile`.",{"title":73,"body":74},"Ajouter les en-têtes de sécurité et le rate limiting","Caddy supporte les en-têtes de sécurité natifs via la directive `header`. Voici un bloc renforcé pour une application en production :\n```bash\nmonapp.com {\n    reverse_proxy localhost:3000\n\n    header {\n        Strict-Transport-Security \"max-age=31536000; includeSubDomains; preload\"\n        X-Content-Type-Options \"nosniff\"\n        X-Frame-Options \"SAMEORIGIN\"\n        Referrer-Policy \"strict-origin-when-cross-origin\"\n        -Server\n    }\n\n    log {\n        output file \u002Fvar\u002Flog\u002Fcaddy\u002Fmonapp.log {\n            roll_size 10mb\n            roll_keep 5\n        }\n    }\n}\n```\nPour le rate limiting, le module `caddy-ratelimit` s'installe via `xcaddy build` et s'utilise avec la directive `rate_limit`. La version Docker officielle ne l'inclut pas — construisez votre propre image ou utilisez un pare-feu applicatif en amont si le besoin est critique.",{"title":76,"body":77},"Activer et vérifier le service systemd (APT)","Après installation via APT, le service est activé automatiquement. Contrôlez son état et les journaux :\n```bash\nsystemctl status caddy\njournalctl -u caddy -f\n```\nPour que Caddy démarre au reboot : `systemctl enable caddy` (déjà fait par le paquet). Testez que le certificat Let's Encrypt a bien été émis :\n```bash\ncurl -sv https:\u002F\u002Fmonapp.com 2>&1 | grep -E 'subject|issuer|expire'\n```",{"type":37,"title":79,"body":80},"Comment fonctionne le HTTPS automatique de Caddy","Caddy implémente le protocole ACME (Automated Certificate Management Environment) de manière intégrée. Dès qu'un bloc de `Caddyfile` contient un nom de domaine qualifié, Caddy enclenche automatiquement le défi **ACME HTTP-01** : Let's Encrypt place un jeton de vérification sur `http:\u002F\u002Fvotredomaine.com\u002F.well-known\u002Facme-challenge\u002F`, Caddy répond à cette requête et prouve ainsi qu'il contrôle le serveur. Let's Encrypt émet alors un certificat valable 90 jours.\n\nCaddy renouvelle ce certificat en avance (à partir de 30 jours avant expiration) et recharge la configuration à chaud, sans interruption de service. Les certificats et les données ACME sont conservés localement — dans `~\u002F.local\u002Fshare\u002Fcaddy\u002F` pour une installation APT, dans le volume `caddy_data` pour Docker. **Ne supprimez pas ce volume** : Caddy y stocke aussi l'état ACME, et des demandes trop fréquentes vers Let's Encrypt déclenchent des limites de taux (rate limits) qui peuvent bloquer l'émission de nouveaux certificats pendant plusieurs heures.\n\nPour les **certificats wildcard** (`*.votredomaine.com`), ACME HTTP-01 ne fonctionne pas : il faut le défi **DNS-01**, qui exige l'accès à l'API de votre fournisseur DNS. Caddy supporte nativement plusieurs fournisseurs via des modules (`caddy-dns\u002Fcloudflare`, `caddy-dns\u002Fovh`…) compilés avec `xcaddy`.",{"type":82,"title":83,"headers":84,"rows":88},"comparison","Caddy vs Nginx : quand choisir l'un ou l'autre",[85,86,87],"Critère","Caddy","Nginx",[89,93,97,101,105,109,113],[90,91,92],"Configuration TLS","Automatique, zéro configuration manuelle","Manuel (Certbot ou acme.sh requis)",[94,95,96],"Courbe d'apprentissage","Faible — syntaxe lisible, peu de directives","Modérée — syntaxe verbeuse, nombreux contextes",[98,99,100],"Performance brute (requêtes\u002Fs)","Excellente pour la majorité des charges","Légèrement supérieure sous très haute charge",[102,103,104],"Modules et écosystème","Croissant, xcaddy pour compiler des modules","Très large, modules tiers nombreux et matures",[106,107,108],"Reload sans interruption","Natif (`caddy reload`)","Natif (`nginx -s reload`), similaire",[110,111,112],"Cas d'usage idéal","VPS personnel, projets d'équipe, microservices Docker","Grandes plateformes, CDN frontal, cas avancés (GeoIP, Lua…)",[114,115,116],"Support HTTP\u002F3 (QUIC)","Activé par défaut depuis Caddy 2.6","Expérimental, requiert compilation avec quiche ou ngx_http_v3",{"type":37,"title":118,"body":119},"Dépannage : les erreurs courantes","**Port 80 déjà occupé.** Caddy a besoin du port 80 pour ACME HTTP-01. Si Apache ou Nginx tourne déjà, l'arrêter avant de démarrer Caddy : `systemctl stop apache2` ou `systemctl stop nginx`. Vérifiez ensuite avec `ss -tlnp | grep :80`.\n\n**Échec ACME \u002F certificat non émis.** Let's Encrypt ne peut pas contacter votre serveur. Vérifiez : (1) votre enregistrement DNS `A` pointe bien sur l'IP du VPS — `dig +short votre-domaine.com` doit retourner votre IP ; (2) le port 80 est accessible depuis l'extérieur — les pare-feux VPS (iptables, ufw) bloquent parfois ce port même si Caddy l'écoute. Consultez les journaux Caddy avec `journalctl -u caddy` pour lire le message d'erreur ACME précis.\n\n**`permission denied` sur les ports 80\u002F443.** Les ports inférieurs à 1024 sont réservés sous Linux. Pour une installation APT, le paquet configure automatiquement la capacité `CAP_NET_BIND_SERVICE` sur le binaire Caddy. Si vous avez compilé Caddy manuellement, appliquez-la : `setcap cap_net_bind_service=+ep $(which caddy)`.\n\n**DNS non résolu \u002F `no such host`.** Caddy résout les noms des backends déclarés dans `reverse_proxy`. Si votre application s'appelle `app` dans Docker Compose, assurez-vous que Caddy et l'application partagent le même réseau Docker. Vérifiez avec : `docker compose exec caddy nslookup app`.\n\n**Volume `caddy_data` supprimé par erreur.** Caddy doit renégocier tous les certificats depuis zéro. Let's Encrypt impose une limite de 5 certificats par domaine sur 7 jours. Si vous atteignez cette limite, utilisez l'environnement de staging ACME (`acme_ca https:\u002F\u002Facme-staging-v02.api.letsencrypt.org\u002Fdirectory` dans le `Caddyfile`) pour tester, puis repassez en production une fois la fenêtre expirée.",{"type":121,"title":122,"body":123},"tip","Pour héberger plusieurs applications sur le même VPS","Créez un réseau Docker partagé (`docker network create proxy`) et connectez chaque service à ce réseau. Le `Caddyfile` référence alors les services par leur nom de conteneur plutôt que par `localhost:PORT` — la configuration ne change pas lorsque vous ajoutez ou retirez des applications. Exemple : `reverse_proxy mon-service:3000` au lieu de `reverse_proxy localhost:3000`.",{"type":121,"title":125,"body":126},"La documentation officielle","La référence complète des directives, des modules et de l'API JSON est disponible sur `\u003Ca href=\"https:\u002F\u002Fcaddyserver.com\u002Fdocs\u002F\">caddyserver.com\u002Fdocs\u003C\u002Fa>`. Le forum communautaire (`\u003Ca href=\"https:\u002F\u002Fcaddy.community\">caddy.community\u003C\u002Fa>`) est la référence communautaire pour les questions avancées — les mainteneurs y répondent directement.","Votre VPS, prêt à accueillir Caddy","Déployez Caddy sur un VPS ServOrbit et bénéficiez d'un environnement Debian 12, ports 80 et 443 ouverts, accès SSH immédiat.","Voir les offres VPS","\u002Fvps-cloud",[132,148,168],{"id":133,"slug":134,"slugs":135,"title":139,"excerpt":140,"readTime":141,"views":23,"isPinned":19,"noindex":19,"publishedAt":142,"updatedAt":143,"category":144,"categories":145,"featuredImage":29,"bgImage":30,"posterImage":147,"relatedSolution":29},38,"deployer-avec-traefik",{"fr":134,"en":136,"ar":137,"es":138},"deploy-your-applications-with-traefik-on-a-vps","انشر-تطبيقاتك-باستخدام-traefik-على-خادم-vps","desplegar-con-traefik","Déployer vos applications avec Traefik sur un VPS","Déployez Traefik en reverse proxy sur votre VPS : routage automatique des conteneurs Docker, certificats SSL Let's Encrypt et load balancing.",11,"2026-05-13T00:00:00+00:00","2026-11-08T01:13:13+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":25},[146],{"id":23,"name":24,"slug":25,"color":26,"icon":25},"\u002Fblog\u002Fcovers\u002Fdeployer-avec-traefik-poster.svg",{"id":149,"slug":150,"slugs":151,"title":155,"excerpt":156,"readTime":17,"views":157,"isPinned":19,"noindex":19,"publishedAt":158,"updatedAt":159,"category":160,"categories":165,"featuredImage":29,"bgImage":30,"posterImage":167,"relatedSolution":29},116,"certificats-ssl-lets-encrypt-vps",{"fr":150,"en":152,"ar":153,"es":154},"free-ssl-certificates-with-lets-encrypt-on-a-vps","شهادات-ssl-مجانية-باستخدام-lets-encrypt-على-خادم-vps","certificados-ssl-gratis-con-lets-encrypt-en-un-vps","Certificats SSL gratuits avec Let's Encrypt sur VPS","Guide complet Let's Encrypt sur VPS : certbot nginx, wildcard DNS-01, renouvellement systemd, hardening TLS, dépannage rate-limits et comparatif certbot\u002Facme.sh\u002FCaddy.",0,"2026-02-24T00:00:00+00:00","2026-09-30T11:20:34+00:00",{"id":17,"name":161,"slug":162,"color":163,"icon":164},"Sécurité & Monitoring","securite-monitoring","bg-rose-500\u002F10 text-rose-400","security",[166],{"id":17,"name":161,"slug":162,"color":163,"icon":164},"\u002Fblog\u002Fcovers\u002Fcertificats-ssl-lets-encrypt-vps-poster.svg",{"id":169,"slug":170,"slugs":171,"title":175,"excerpt":176,"readTime":177,"views":178,"isPinned":19,"noindex":19,"publishedAt":179,"updatedAt":180,"category":181,"categories":182,"featuredImage":29,"bgImage":30,"posterImage":184,"relatedSolution":29},229,"docker-compose-production-checklist",{"fr":170,"en":172,"ar":173,"es":174},"docker-compose-in-production-10-point-checklist","docker-compose-في-الإنتاج-قائمة-التحقق-من-10-نقاط","checklist-docker-compose-en-produccion","Docker Compose en production : checklist des 10 points","Docker Compose en production : 10 réglages, health checks, secrets, rollback, dépannage et passage de docker-compose v1 à docker compose sur Ubuntu 26.04.",12,1,"2026-08-06T00:00:00+00:00","2026-10-23T13:27:09+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":25},[183],{"id":23,"name":24,"slug":25,"color":26,"icon":25},"\u002Fblog\u002Fcovers\u002Fdocker-compose-production-checklist-poster.svg",true,1794270692140]