[{"data":1,"prerenderedAt":219},["ShallowReactive",2],{"seo-verification":3,"blog-traefik-v3-vps-reverse-proxy-fr":6},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-traefik-v3-vps-reverse-proxy-fr",{"id":9,"slug":10,"slugs":11,"title":15,"excerpt":16,"readTime":17,"views":18,"isPinned":19,"publishedAt":20,"updatedAt":21,"category":22,"categories":27,"featuredImage":29,"bgImage":30,"posterImage":31,"relatedSolution":29,"intro":32,"sections":33,"ctaTitle":29,"ctaBody":29,"ctaButton":150,"ctaUrl":151,"relatedPosts":152},434,"traefik-v3-vps-reverse-proxy",{"fr":10,"en":12,"ar":13,"es":14},"traefik-v3-vps-docker-reverse-proxy-https","traefik-v3-على-vps-ريفرس-بروكسي-docker","traefik-v3-vps-reverse-proxy-docker-https","Traefik v3 sur VPS : reverse proxy Docker HTTPS automatique","Déployez Traefik v3 sur votre VPS : HTTPS automatique Let's Encrypt, routing par labels Docker, dashboard sécurisé.",9,0,false,"2026-10-12T00:00:00+00:00","2026-10-13T14:10:28+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\u002Ftraefik-v3-vps-reverse-proxy-poster.svg","Vous avez trois conteneurs Docker sur votre VPS : une app Node, un backend Python, un outil d'administration. Chacun écoute sur un port différent, vous gérez les certificats à la main, et chaque nouveau service implique de modifier nginx et de rechanger la configuration. Traefik v3 résout exactement ce problème : il lit les labels Docker de vos conteneurs, configure les routes en temps réel, renouvelle les certificats Let's Encrypt de façon autonome, et expose un dashboard de monitoring — le tout sans qu'une seule ligne de configuration nginx soit nécessaire.",[34,38,49,52,74,77,84,87,90,98,137,140,147],{"type":35,"title":36,"body":37},"h2","Pourquoi Traefik v3 plutôt que nginx pour votre stack Docker","nginx est un excellent serveur HTTP, mais sa configuration est statique : chaque nouveau service nécessite un nouveau fichier de vhost, un rechargement du processus et souvent une modification manuelle du renouvellement ACME. Traefik a été conçu pour les environnements conteneurisés où la topologie change constamment. En version 3, il pousse cette logique encore plus loin avec le support natif de HTTP\u002F3 (QUIC), une syntaxe de middlewares simplifiée et un runtime plus strict qui sécurise les configurations ambiguës.",{"type":39,"items":40},"ul",[41,42,43,44,45,46,47,48],"Découverte automatique des conteneurs via les labels Docker — aucun rechargement manuel quand vous ajoutez un service.","HTTPS automatique avec Let's Encrypt (challenge TLS-ALPN-01 ou HTTP-01) : certificats obtenus, stockés et renouvelés sans intervention.","Middlewares natifs déclarables par label : BasicAuth, rate-limit, headers de sécurité, redirections — sans écrire de module nginx.","Dashboard temps réel intégré : visualisez toutes les routes, middlewares et état des certificats depuis un navigateur.","Support HTTP\u002F3 (QUIC) en une ligne de configuration : améliore la performance sur les connexions à forte latence.","Routage par Host, PathPrefix, Headers ou toute combinaison — les règles s'écrivent en Go template expressif.","API REST interne : interrogez l'état du routeur, inspectez les backends actifs, automatisez des intégrations CI\u002FCD.","Compatible Docker Swarm, Kubernetes et Nomad — vous pouvez migrer sans changer vos labels.",{"type":35,"title":50,"body":51},"Prérequis techniques avant de commencer","Cette installation nécessite un VPS sous Debian 12 ou Ubuntu 22.04\u002F24.04 (les commandes sont identiques), Docker Engine 25+ et Docker Compose v2.24+ (la commande `docker compose` sans tiret). Vérifiez que les ports 80 et 443 sont ouverts dans votre pare-feu — en entrée depuis Internet. Vous aurez besoin d'un nom de domaine dont vous contrôlez les DNS : pointez un enregistrement A sur l'IP de votre VPS avant de commencer, sans quoi Let's Encrypt ne pourra pas émettre le certificat. Un compte e-mail valide est requis pour les notifications d'expiration ACME.",{"type":53,"title":54,"steps":55},"steps","Installation complète de Traefik v3 étape par étape",[56,58,60,62,64,66,68,70,72],{"body":57},"**Créer le réseau Docker partagé.** Traefik doit être sur le même réseau que les services qu'il proxifie. Créez-le une seule fois : `docker network create traefik-public`. Ce réseau sera référencé dans chaque `docker-compose.yml` de vos services.",{"body":59},"**Créer le fichier `acme.json` pour les certificats.** Let's Encrypt écrira ses certificats dans ce fichier. Il doit appartenir à root avec les permissions 600 strictement : `touch \u002Fopt\u002Ftraefik\u002Facme.json && chmod 600 \u002Fopt\u002Ftraefik\u002Facme.json`. Si les permissions sont incorrectes, Traefik refusera de démarrer.",{"body":61},"**Créer le `docker-compose.yml` Traefik.** Placez ce fichier dans `\u002Fopt\u002Ftraefik\u002Fdocker-compose.yml` :\n\n```yaml\nservices:\n  traefik:\n    image: traefik:v3.3\n    container_name: traefik\n    restart: unless-stopped\n    ports:\n      - \"80:80\"\n      - \"443:443\"\n      - \"443:443\u002Fudp\"   # HTTP\u002F3 QUIC\n    command:\n      - \"--api.dashboard=true\"\n      - \"--providers.docker=true\"\n      - \"--providers.docker.exposedbydefault=false\"\n      - \"--entrypoints.web.address=:80\"\n      - \"--entrypoints.web.http.redirections.entrypoint.to=websecure\"\n      - \"--entrypoints.web.http.redirections.entrypoint.scheme=https\"\n      - \"--entrypoints.websecure.address=:443\"\n      - \"--entrypoints.websecure.http3=true\"\n      - \"--certificatesresolvers.letsencrypt.acme.tlschallenge=true\"\n      - \"--certificatesresolvers.letsencrypt.acme.email=admin@votre-domaine.com\"\n      - \"--certificatesresolvers.letsencrypt.acme.storage=\u002Facme.json\"\n      - \"--log.level=INFO\"\n    volumes:\n      - \"\u002Fvar\u002Frun\u002Fdocker.sock:\u002Fvar\u002Frun\u002Fdocker.sock:ro\"\n      - \".\u002Facme.json:\u002Facme.json\"\n    networks:\n      - traefik-public\n    labels:\n      - \"traefik.enable=true\"\n      - \"traefik.http.routers.dashboard.rule=Host(`traefik.votre-domaine.com`)\"\n      - \"traefik.http.routers.dashboard.entrypoints=websecure\"\n      - \"traefik.http.routers.dashboard.tls.certresolver=letsencrypt\"\n      - \"traefik.http.routers.dashboard.service=api@internal\"\n      - \"traefik.http.routers.dashboard.middlewares=dashboard-auth\"\n      - \"traefik.http.middlewares.dashboard-auth.basicauth.users=admin:$$2y$$10$$abc...\"\n\nnetworks:\n  traefik-public:\n    external: true\n```",{"body":63},"**Générer le hash BasicAuth pour le dashboard.** Remplacez la chaîne en dur par un vrai hash bcrypt généré avec : `echo $(htpasswd -nB admin) | sed -e 's\u002F\\$\u002F\\$\\$\u002Fg'`. La commande `htpasswd` est dans le paquet `apache2-utils` sous Debian\u002FUbuntu. Les signes `$` doivent être doublés (`$$`) dans la valeur du label Docker Compose.",{"body":65},"**Démarrer Traefik.** Depuis `\u002Fopt\u002Ftraefik\u002F` : `docker compose up -d`. Vérifiez les logs : `docker compose logs -f traefik`. Vous devriez voir `\"Starting provider\" providerType=Docker` puis `\"Attaching router\" routerName=dashboard`. Si vous voyez une erreur sur `acme.json`, vérifiez les permissions.",{"body":67},"**Ajouter un service derrière Traefik.** Voici un exemple avec une application web Node.js. Dans son propre `docker-compose.yml` :\n\n```yaml\nservices:\n  monapp:\n    image: monapp:latest\n    restart: unless-stopped\n    networks:\n      - traefik-public\n    labels:\n      - \"traefik.enable=true\"\n      - \"traefik.http.routers.monapp.rule=Host(`app.votre-domaine.com`)\"\n      - \"traefik.http.routers.monapp.entrypoints=websecure\"\n      - \"traefik.http.routers.monapp.tls.certresolver=letsencrypt\"\n      - \"traefik.http.services.monapp.loadbalancer.server.port=3000\"\n\nnetworks:\n  traefik-public:\n    external: true\n```\nDès que vous faites `docker compose up -d`, Traefik détecte le conteneur, obtient le certificat et la route est active — sans toucher à sa propre configuration.",{"body":69},"**Vérifier les certificats Let's Encrypt.** Inspectez le fichier `acme.json` : `cat \u002Fopt\u002Ftraefik\u002Facme.json | python3 -m json.tool | grep -A3 'domain'`. Vous devez voir vos domaines listés avec une date d'expiration à 90 jours. Alternativement, le dashboard Traefik sur `traefik.votre-domaine.com` liste tous les certificats actifs sous l'onglet *Routers*.",{"body":71},"**Valider la redirection HTTP→HTTPS.** Testez avec curl : `curl -v http:\u002F\u002Fapp.votre-domaine.com`. Vous devez recevoir un `301 Moved Permanently` vers `https:\u002F\u002F`. Si vous obtenez une connexion refusée sur le port 80, vérifiez que les règles de pare-feu autorisent ce port.",{"body":73},"**Activer HTTP\u002F3 côté navigateur.** Ajoutez le header `Alt-Svc` via un middleware global dans vos labels Traefik ou dans un fichier de configuration statique `traefik.yml`. Le header `Alt-Svc: h3=\":443\"; ma=86400` indique au navigateur que votre serveur supporte QUIC. Vérifiez l'activation avec `curl --http3 https:\u002F\u002Fapp.votre-domaine.com -v`.",{"type":35,"title":75,"body":76},"Middlewares essentiels : BasicAuth, rate-limit et headers de sécurité","Les middlewares Traefik s'appliquent par label Docker directement sur le routeur du service concerné. Voici les trois middlewares les plus utiles en production, déclarés sur le service lui-même sans toucher à la configuration centrale de Traefik.",{"type":39,"items":78},[79,80,81,82,83],"**BasicAuth sur une route privée** — pour protéger un outil d'administration (Adminer, Flower, etc.) : ajoutez les labels `traefik.http.middlewares.adminauth.basicauth.users=admin:$$hash$$` et `traefik.http.routers.monadmin.middlewares=adminauth` sur le service concerné.","**Rate-limit anti-abus** — protège une API ou un formulaire de contact : `traefik.http.middlewares.ratelimit.ratelimit.average=100` (100 requêtes\u002Fseconde en moyenne), `traefik.http.middlewares.ratelimit.ratelimit.burst=50` (rafale de 50 tolérée). Appliquez ensuite le middleware sur le routeur : `traefik.http.routers.monapi.middlewares=ratelimit`.","**Headers de sécurité HTTP** — `X-Frame-Options`, `X-Content-Type-Options`, `Strict-Transport-Security` : le middleware `headers` de Traefik accepte toutes ces valeurs directement en label, sans fichier de configuration nginx séparé.","**Redirect Regex** — pour rediriger `www.votre-domaine.com` vers `votre-domaine.com` : utilisez le middleware `redirectregex` avec `permanent=true` et une regex `^https:\u002F\u002Fwww\\.(.+)` → `https:\u002F\u002F${1}`.","**Compress** — activez la compression gzip\u002Fbrotli sur toutes les réponses textuelles avec un seul label : `traefik.http.middlewares.compress.compress=true`. Appliquez-le globalement en l'ajoutant comme middleware par défaut dans la configuration statique.",{"type":85,"body":86},"tip","**HTTP\u002F3 (QUIC) en deux lignes.** Dans la section `command` du `docker-compose.yml` Traefik, ajoutez `--entrypoints.websecure.http3=true` et exposez le port UDP 443 (`443:443\u002Fudp`). Le protocole QUIC établit les connexions jusqu'à 30 % plus vite sur des réseaux à pertes, et élimine le head-of-line blocking de TLS-sur-TCP. Les navigateurs modernes (Chrome 87+, Firefox 88+, Safari 16.4+) l'activent automatiquement après le premier échange via l'en-tête `Alt-Svc`. Aucune modification côté application n'est nécessaire.",{"type":35,"title":88,"body":89},"Migration depuis Traefik v2 : les changements cassants","Traefik v3 introduit des ruptures intentionnelles avec v2 pour nettoyer les ambiguïtés accumulées. La bonne nouvelle : la migration est progressive — vous pouvez faire coexister des configurations v2 et v3 pendant la transition. Voici les points qui cassent le plus fréquemment.",{"type":39,"items":91},[92,93,94,95,96,97],"**`docker.swarmMode` renommé en `docker.swarmmode`** (tout en minuscules). Si votre configuration v2 utilise l'ancienne casse, Traefik v3 l'ignore silencieusement et la découverte Swarm ne fonctionne pas.","**Règle `PathPrefix` sans slash trailing** : en v3, `PathPrefix('\u002Fapi')` est équivalent à `PathPrefix('\u002Fapi\u002F')` — le trailing slash est normalisé. Si vous aviez des règles qui dépendaient de ce comportement pour discriminer `\u002Fapi` de `\u002Fapiv2`, révisez-les.","**`tls.certificates` en configuration dynamique** : en v2, on pouvait définir des certificats manuels directement dans la configuration dynamique d'un fournisseur de fichiers. En v3, cette section doit être dans la configuration statique (`traefik.yml`) ou via un fournisseur dédié.","**Middleware `errors`** : le paramètre `query` est renommé en `url`. Toute configuration qui utilisait `errors.query` doit être mise à jour vers `errors.url`.","**Suppression du support du protocole `spiffe`** : si vous utilisiez l'authentification SPIFFE dans une infrastructure Consul, migrez vers une solution de mTLS standard avant de passer à v3.","**Configuration Docker `constraints`** : la syntaxe des contraintes a changé pour s'aligner sur le format standard des tags Docker. Vérifiez votre liste de contraintes si vous filtriez les services par tag.",{"type":99,"title":100,"headers":101,"rows":106},"comparison","Traefik v3 vs nginx vs Caddy : quel reverse proxy pour Docker ?",[102,103,104,105],"Critère","Traefik v3","nginx","Caddy v2",[107,112,117,122,127,132],[108,109,110,111],"Configuration","Labels Docker, TOML ou YAML — rechargement automatique à chaud","Fichiers vhost statiques — rechargement manuel (`nginx -s reload`)","Caddyfile déclaratif — rechargement automatique à chaud",[113,114,115,116],"HTTPS automatique","Intégré nativement (ACME v2, challenge TLS-ALPN ou HTTP-01)","Requiert certbot + cron + script de rechargement","Intégré nativement, le plus simple à configurer (une ligne)",[118,119,120,121],"Routing dynamique Docker","Natif : découverte en temps réel des conteneurs via le socket Docker","Non natif : nécessite nginx-proxy ou modification manuelle","Natif via le plugin caddy-docker-proxy (non officiel)",[123,124,125,126],"HTTP\u002F3 (QUIC)","Supporté nativement depuis v3 (2024), activable en une ligne","Supporté depuis nginx 1.25 (2023), configuration supplémentaire","Supporté nativement depuis Caddy 2.6 (2022)",[128,129,130,131],"Performances brutes","Légèrement inférieur à nginx sur les très hauts débits (>50k req\u002Fs)","Référence industrielle pour les débits élevés et la concurrence","Comparable à nginx sur la plupart des charges web standard",[133,134,135,136],"Courbe d'apprentissage","Modérée — concepts de routeur\u002Fservice\u002Fmiddleware à assimiler","Élevée pour HTTPS + Docker — documentation fragmentée","Faible — la configuration la plus concise pour des cas simples",{"type":35,"title":138,"body":139},"Dépannage : les cinq erreurs les plus fréquentes","La majorité des problèmes Traefik en production viennent de trois sources : les permissions du fichier `acme.json`, le réseau Docker manquant, et les labels mal échappés dans Compose. Voici les erreurs avec leurs messages réels.",{"type":39,"items":141},[142,143,144,145,146],"**`level=error msg=\"Unable to obtain ACME certificate\" error=\"acme: error 403\"` ou `unauthorized`** — Let's Encrypt ne peut pas vérifier votre domaine. Vérifiez que le port 80 est ouvert depuis Internet (`curl http:\u002F\u002Fvotre-domaine.com` depuis une machine externe) et que le DNS de votre domaine pointe bien sur l'IP du VPS (`dig +short votre-domaine.com`).","**`level=error msg=\"The acme.json file has bad file permissions\"` puis Traefik refuse de démarrer** — les permissions du fichier ne sont pas 600. Corrigez : `chmod 600 \u002Fopt\u002Ftraefik\u002Facme.json`. Ce check est intentionnellement bloquant : un fichier lisible par d'autres utilisateurs exposerait vos clés privées.","**Service accessible depuis le dashboard Traefik mais erreur 502 Bad Gateway** — le conteneur du service n'est pas sur le réseau `traefik-public`. Vérifiez avec `docker inspect \u003Ccontainer> | grep -A20 Networks`. Ajoutez le réseau dans le `docker-compose.yml` du service et recréez le conteneur.","**Labels ignorés silencieusement, route absente du dashboard** — vous avez oublié `traefik.enable=true` sur le service, ou `--providers.docker.exposedbydefault=false` est actif (recommandé) et le label est absent. Vérifiez aussi que le nom du routeur dans `traefik.http.routers.\u003Cnom>.rule` est unique parmi tous vos services.","**`invalid character '$' in label value`** — les signes `$` dans les hashes BasicAuth ne sont pas doublés dans le fichier Compose. La syntaxe correcte est `$$2y$$10$$...` (chaque `$` devient `$$`) quand la valeur est dans un `docker-compose.yml`. Si vous passez la valeur via une variable d'environnement, un seul `$` suffit.",{"type":35,"title":148,"body":149},"Prochaine étape : hardener votre stack Docker en production","Traefik v3 gère le routing et le TLS, mais une stack Docker production-ready demande davantage : healthchecks sur les conteneurs, politique de redémarrage, logs centralisés, rotation des secrets, sauvegardes des volumes. Consultez notre guide **docker-compose-production-checklist** pour une liste de contrôle complète à appliquer avant de mettre en production n'importe quel service conteneurisé sur votre VPS.","Découvrir nos VPS Cloud","\u002Fvps-cloud",[153,169,189,204],{"id":154,"slug":155,"slugs":156,"title":160,"excerpt":161,"readTime":23,"views":162,"isPinned":19,"publishedAt":163,"updatedAt":164,"category":165,"categories":166,"featuredImage":29,"bgImage":30,"posterImage":168,"relatedSolution":29},38,"deployer-avec-traefik",{"fr":155,"en":157,"ar":158,"es":159},"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.",2,"2026-05-13T00:00:00+00:00","2026-09-07T11:26:10+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":25},[167],{"id":23,"name":24,"slug":25,"color":26,"icon":25},"\u002Fblog\u002Fcovers\u002Fdeployer-avec-traefik-poster.svg",{"id":170,"slug":171,"slugs":172,"title":176,"excerpt":177,"readTime":178,"views":179,"isPinned":19,"publishedAt":180,"updatedAt":164,"category":181,"categories":186,"featuredImage":29,"bgImage":30,"posterImage":188,"relatedSolution":29},227,"choisir-reverse-proxy-vps-caddy-traefik-nginx",{"fr":171,"en":173,"ar":174,"es":175},"caddy-traefik-or-nginx-proxy-manager-which-to-choose","caddy-أم-traefik-أم-nginx-proxy-manager-أيهما-تختار","elegir-reverse-proxy-vps-caddy-traefik-nginx","Caddy, Traefik ou Nginx Proxy Manager : lequel choisir ?","Guide de choix entre Caddy, Traefik et Nginx Proxy Manager pour self-hosters Docker sur VPS. Critères, tableau comparatif et recommandations par profil.",10,1,"2026-08-06T00:00:00+00:00",{"id":182,"name":183,"slug":184,"color":185,"icon":184},5,"Comparatif","comparatif","bg-info\u002F10 text-info",[187],{"id":182,"name":183,"slug":184,"color":185,"icon":184},"\u002Fblog\u002Fcovers\u002Fchoisir-reverse-proxy-vps-caddy-traefik-nginx-poster.svg",{"id":190,"slug":191,"slugs":192,"title":196,"excerpt":197,"readTime":17,"views":18,"isPinned":19,"publishedAt":198,"updatedAt":199,"category":200,"categories":201,"featuredImage":29,"bgImage":30,"posterImage":203,"relatedSolution":29},384,"nginx-proxy-manager-vps-reverse-proxy",{"fr":191,"en":193,"ar":194,"es":195},"nginx-proxy-manager-vps-reverse-proxy-setup","nginx-proxy-manager-على-vps-إعداد-reverse-proxy","nginx-proxy-manager-vps-proxy-inverso","Nginx Proxy Manager sur VPS : reverse proxy avec SSL automatique","Configurez un reverse proxy visuel sur votre VPS avec Nginx Proxy Manager : SSL Let's Encrypt automatique, routage multi-apps Docker, sans éditer nginx.conf.","2026-09-26T00:00:00+00:00","2026-09-29T14:40:42+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":25},[202],{"id":23,"name":24,"slug":25,"color":26,"icon":25},"\u002Fblog\u002Fcovers\u002Fnginx-proxy-manager-vps-reverse-proxy-poster.svg",{"id":205,"slug":206,"slugs":207,"title":211,"excerpt":212,"readTime":213,"views":18,"isPinned":19,"publishedAt":180,"updatedAt":214,"category":215,"categories":216,"featuredImage":29,"bgImage":30,"posterImage":218,"relatedSolution":29},229,"docker-compose-production-checklist",{"fr":206,"en":208,"ar":209,"es":210},"docker-compose-in-production-10-point-checklist","docker-compose-في-الإنتاج-قائمة-التحقق-من-10-نقاط","checklist-docker-compose-en-produccion","Docker Compose en production : checklist des 10 points","Checklist Docker Compose en production : 10 réglages essentiels, health checks, secrets sans downtime, rollback, dépannage des erreurs courantes, CVE-2026-17106.",12,"2026-09-29T14:40:45+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":25},[217],{"id":23,"name":24,"slug":25,"color":26,"icon":25},"\u002Fblog\u002Fcovers\u002Fdocker-compose-production-checklist-poster.svg",1791900995468]