[{"data":1,"prerenderedAt":204},["ShallowReactive",2],{"seo-verification":3,"blog-deployer-avec-nginx-proxy-manager-ma-fr":6,"promo-bar-likely":203},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-deployer-avec-nginx-proxy-manager-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":29,"intro":32,"sections":33,"ctaTitle":147,"ctaBody":148,"ctaButton":149,"ctaUrl":150,"relatedPosts":151},37,"deployer-avec-nginx-proxy-manager",{"fr":10,"en":12,"ar":13,"es":14},"deploy-your-applications-with-nginx-proxy-manager-on-a-vps","انشر-تطبيقاتك-باستخدام-nginx-proxy-manager-على-خادم-vps","desplegar-con-nginx-proxy-manager","Déployer vos applications avec Nginx Proxy Manager sur un VPS","Gérez domaines, SSL et reverse proxy de plusieurs services sur un VPS avec Nginx Proxy Manager : installation, réseaux Docker, dépannage 502 et configuration avancée.",10,7,false,"2026-05-14T00:00:00+00:00","2026-11-08T01:13:14+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-nginx-proxy-manager-poster.svg","Nginx Proxy Manager (NPM) place une interface web claire au-dessus de Nginx pour gérer reverse proxies, domaines et certificats SSL sans éditer un seul fichier de configuration. Dès que vous hébergez plus d'une application sur un VPS — une API, un Gitea, un Portainer, un n8n — vous avez besoin d'une brique de routage HTTP fiable. Ce guide vous emmène de l'installation Docker jusqu'aux réglages avancés : réseaux isolés, listes d'accès, wildcard SSL et dépannage des erreurs courantes.",[34,38,49,52,86,89,93,96,104,144],{"type":35,"title":36,"body":37},"h2","Pourquoi un reverse proxy sur votre VPS","Un VPS expose une seule adresse IP publique. Derrière cette IP, vous pouvez faire tourner cinq, dix ou vingt services sur des ports internes différents. Sans reverse proxy, exposer chaque service sur un port public implique d'ouvrir ces ports dans le pare-feu, de gérer manuellement les certificats TLS pour chacun, et d'en informer chaque utilisateur. Un reverse proxy résout ces trois problèmes d'un coup : il reçoit tout le trafic sur les ports 80 et 443, identifie le domaine demandé, et redirige la requête vers le bon conteneur interne. Nginx Proxy Manager ajoute une couche d'interface graphique à cette mécanique : pas de fichier de conf à écrire, pas de reload manuel, et les certificats Let's Encrypt se gèrent en quelques clics. C'est particulièrement adapté aux agences qui hébergent plusieurs applications clientes sur le même serveur, ou aux développeurs indépendants qui font tourner plusieurs projets en parallèle.",{"type":39,"title":40,"items":41},"ul","NPM face à la configuration Nginx manuelle : 7 avantages concrets",[42,43,44,45,46,47,48],"Pas de fichier de configuration : chaque proxy host se crée depuis l'interface web, sans syntaxe Nginx à mémoriser.","Certificats Let's Encrypt automatiques : NPM demande, installe et renouvelle les certificats sans intervention. Wildcard possible via DNS challenge.","Gestion centralisée : tous vos domaines, sous-domaines et redirections dans un seul écran, au lieu d'une dizaine de fichiers dans `\u002Fetc\u002Fnginx\u002Fsites-enabled\u002F`.","Listes d'accès (Access Lists) intégrées : protéger un service par IP ou par mot de passe sans toucher aux config de chaque app.","Logs par hôte consultables dans l'interface : identifier une erreur 502 ou un abus sans ssh dans le conteneur.","Redirections HTTP→HTTPS et 404 personnalisés configurables visuellement.","Découverte par nom de conteneur Docker : cibler `portainer:9000` plutôt qu'une IP interne instable qui change au redémarrage.",{"type":35,"title":50,"body":51},"Prérequis chiffrés avant d'installer NPM","NPM ne fait que router du trafic, il est donc léger. Un VPS avec 1 Go de RAM et 1 vCPU suffit si NPM est le seul service notable. Si vous hébergez également les applications derrière lui, dimensionnez selon la somme de leurs besoins. Prévoyez 15 Go de disque SSD (certificats, base SQLite, logs). Logiciel requis : Docker Engine 28 ou plus récent (avant la 28.0, un port publié sur `127.0.0.1` restait joignable depuis le réseau local) et le plugin Compose v2 (`docker compose`, pas l'ancienne commande `docker-compose`). Réseau : les ports 80 et 443 doivent être libres sur le VPS — NPM en est l'unique occupant. Le port 81 est réservé à l'interface d'administration ; il ne doit jamais être exposé directement sur Internet. DNS : faites pointer vos enregistrements A vers l'IP du VPS avant de demander les certificats. Pour un wildcard `*.votre-domaine.com`, il faut une clé API auprès de votre fournisseur DNS (Cloudflare, OVH, etc.).",{"type":53,"title":54,"steps":55},"steps","Installation et première configuration de Nginx Proxy Manager",[56,59,62,65,68,71,74,77,80,83],{"title":57,"body":58},"Installer Docker sur le VPS","Sur un serveur Debian\u002FUbuntu : `curl -fsSL https:\u002F\u002Fget.docker.com | sh`. Vérifiez ensuite : `docker --version` et `docker compose version`. Si le plugin Compose n'est pas présent, installez le paquet `docker-compose-plugin` via apt.",{"title":60,"body":61},"Créer le dossier de travail et le fichier Compose","Créez `\u002Fopt\u002Fnpm` sur le VPS. Dans ce dossier, créez un fichier `docker-compose.yml`. Déclarez-y le service NPM avec l'image `jc21\u002Fnginx-proxy-manager:latest`, mappez les ports `80:80` et `443:443`, publiez l'administration sur la boucle locale seulement (`127.0.0.1:81:81`), ajoutez `restart: unless-stopped` et définissez deux volumes : `.\u002Fdata:\u002Fdata` et `.\u002Fletsencrypt:\u002Fetc\u002Fletsencrypt`.",{"title":63,"body":64},"Démarrer le conteneur","Depuis `\u002Fopt\u002Fnpm`, lancez `docker compose up -d`. Vérifiez que le conteneur tourne : `docker compose ps`. Le premier démarrage peut prendre une à deux minutes. Le port 81 n'écoutant que sur `127.0.0.1`, ouvrez un tunnel SSH depuis votre poste (`ssh -L 8181:127.0.0.1:81 utilisateur@IP_DU_VPS`), puis l'interface sur `http:\u002F\u002Flocalhost:8181`.",{"title":66,"body":67},"Première connexion et sécurisation du compte admin","Depuis la version 2.13.0 (novembre 2025), NPM ne crée plus de compte par défaut : au premier accès, un écran d'installation vous demande de créer le compte administrateur, avec un mot de passe long et unique. Faites-le avant toute autre action : ce compte donne un accès total à votre infrastructure de routage. Pour un déploiement automatisé, les variables `INITIAL_ADMIN_EMAIL` et `INITIAL_ADMIN_PASSWORD` créent ce compte au démarrage ; placez-les dans un fichier `.env` (mot de passe généré par `openssl rand -base64 32`), jamais en clair dans le Compose. Sur une version antérieure, le compte `admin@example.com` \u002F `changeme` existe : changez-le immédiatement.",{"title":69,"body":70},"Créer un réseau Docker partagé","Pour que NPM puisse joindre vos conteneurs applicatifs par leur nom, ils doivent partager le même réseau Docker. Créez un réseau externe : `docker network create proxy`. Dans votre `docker-compose.yml` NPM, déclarez ce réseau comme externe. Faites de même dans le Compose de chaque application à proxifier.",{"title":72,"body":73},"Ajouter un premier Proxy Host","Dans l'interface : Proxy Hosts → Add Proxy Host. Renseignez le domaine (ex. `app.votre-domaine.com`), le `Forward Hostname` (nom du conteneur ou IP interne) et le port de l'application. Cochez « Block Common Exploits ». Si l'application utilise des WebSockets, activez « Websockets Support ».",{"title":75,"body":76},"Activer le SSL Let's Encrypt","Dans l'onglet SSL du Proxy Host, choisissez « Request a new SSL Certificate », acceptez les conditions Let's Encrypt et cochez « Force SSL ». NPM contacte les serveurs ACME, valide le domaine via HTTP-01 et installe le certificat. Votre service est en HTTPS en quelques secondes. Le renouvellement est automatique.",{"title":78,"body":79},"Sécuriser l'interface d'administration (port 81)","Ne comptez pas sur `ufw deny 81` : Docker achemine les ports publiés avant les règles ufw, qui ne les filtrent donc pas. C'est la publication sur `127.0.0.1:81` (étape 2) qui garde le port hors d'Internet. Pour un accès sans tunnel, créez ensuite un Proxy Host dédié — ex. `npm.votre-domaine.com` → `localhost:81` — avec SSL et une Access List restreinte à votre IP de gestion. Vous accédez ainsi à l'interface via HTTPS sans exposer le port 81 au reste du monde.",{"title":81,"body":82},"Certificat wildcard via DNS challenge","Pour couvrir tous vos sous-domaines d'un seul certificat, utilisez le DNS challenge. Dans l'onglet SSL, sélectionnez « Use a DNS Challenge », choisissez votre fournisseur (Cloudflare, OVH…) et renseignez la clé API. NPM crée un enregistrement TXT dans votre zone DNS, valide la propriété du domaine et obtient le certificat `*.votre-domaine.com`.",{"title":84,"body":85},"Tester la chaîne complète","Depuis un terminal : `curl -I https:\u002F\u002Fapp.votre-domaine.com`. Attendez un code `200` ou le code de votre application. Vérifiez également la redirection HTTP : `curl -I http:\u002F\u002Fapp.votre-domaine.com` doit retourner un `301` vers la version HTTPS.",{"type":35,"title":87,"body":88},"Configuration avancée","NPM expose dans son interface plusieurs fonctionnalités qui vont au-delà du simple reverse proxy. Les **Access Lists** permettent de restreindre l'accès à un hôte par plage d'IP, par identifiant HTTP Basic Auth, ou par une combinaison des deux — utile pour protéger un backoffice sans ajouter d'authentification dans l'application elle-même. Les **Streams** gèrent le proxying TCP\u002FUDP pour les protocoles non-HTTP (MySQL distant, serveur de jeux, MQTT…). La section **Redirections** crée des règles permanentes (301) ou temporaires (302) d'un domaine ou d'un chemin vers une autre URL, sans qu'un service soit nécessaire derrière. Les **onglets Avancé** de chaque proxy host permettent d'injecter de la configuration Nginx brute lorsque l'interface ne couvre pas un cas particulier (en-têtes de sécurité personnalisés, `proxy_read_timeout` étendu pour les longues requêtes d'upload, etc.).",{"type":90,"title":91,"body":92},"tip","Durcissement : rate limiting dans l'onglet Avancé","NPM n'expose pas de curseur de rate limiting dans son interface de base, mais vous pouvez l'appliquer depuis l'onglet « Advanced » du proxy host concerné. La zone partagée ne peut pas y être déclarée (`limit_req_zone` n'est admis que dans le bloc `http`, et l'onglet Advanced écrit dans le bloc `server`) : placez `limit_req_zone $binary_remote_addr zone=api:10m rate=30r\u002Fm;` dans `.\u002Fdata\u002Fnginx\u002Fcustom\u002Fhttp_top.conf`, que NPM inclut en tête du bloc `http`. Appliquez-la ensuite dans l'onglet Advanced : `limit_req zone=api burst=10 nodelay;`. Cela limite chaque IP à 30 requêtes par minute avec un burst de 10, ce qui suffit à écrêter le scraping ou les tentatives de brute-force sur un formulaire de connexion sans bloquer les utilisateurs légitimes.",{"type":35,"title":94,"body":95},"Dépannage des erreurs courantes","Voici les cinq problèmes les plus fréquents rencontrés après une installation de NPM, avec leur diagnostic direct.",{"type":39,"title":97,"items":98},"Erreurs courantes et leurs causes",[99,100,101,102,103],"**502 Bad Gateway** : NPM ne joint pas votre conteneur. Vérifiez en premier que le conteneur applicatif tourne (`docker ps`) et qu'il est bien sur le même réseau Docker que NPM (`docker network inspect proxy`). Vérifiez ensuite que le `Forward Hostname` correspond exactement au nom du service déclaré dans le Compose de l'application.","**Certificat SSL en attente ou erreur ACME** : Let's Encrypt doit pouvoir joindre votre serveur sur le port 80 via le domaine déclaré. Vérifiez que le DNS A pointe vers la bonne IP, que le port 80 n'est pas bloqué par le pare-feu du VPS ou par un filtre réseau amont, et que le domaine se résout depuis l'extérieur (`dig app.votre-domaine.com`).","**Conteneur inaccessible via le nom DNS Docker** : si vous ciblez `monapp:3000` et obtenez une erreur de résolution, la conteneur `monapp` n'est pas sur le même réseau que NPM. Ajoutez le réseau `proxy` dans le Compose de l'application et recréez les conteneurs (`docker compose up -d --force-recreate`).","**Redirection infinie HTTP→HTTPS** : cela arrive quand l'application elle-même effectue sa propre redirection HTTPS en plus de celle de NPM. NPM transmet déjà l'en-tête `X-Forwarded-Proto` : configurez l'application pour faire confiance au proxy (réglage « trusted proxies » ou équivalent) afin qu'elle connaisse le protocole réel. Derrière Cloudflare, vérifiez aussi que le mode SSL\u002FTLS est Full (strict) : en Flexible, la redirection HTTPS de l'origine boucle.","**Interface d'administration inaccessible après redémarrage** : assurez-vous que le service NPM a la directive `restart: unless-stopped` dans votre Compose. Sans elle, Docker ne relancera pas le conteneur après un reboot du VPS.",{"type":105,"title":106,"headers":107,"rows":111},"comparison","Nginx Proxy Manager face à Traefik",[108,109,110],"Critère","Nginx Proxy Manager","Traefik",[112,116,120,124,128,132,136,140],[113,114,115],"Configuration","Interface web visuelle, aucun fichier à éditer","Fichiers YAML et labels Docker",[117,118,119],"Courbe d'apprentissage","Faible, accessible sans expérience Nginx","Plus raide, orientée DevOps",[121,122,123],"SSL Let's Encrypt","Automatique via l'interface, wildcard possible","Automatique via configuration",[125,126,127],"Découverte de services","Manuelle (nom de conteneur ou IP:port)","Automatique via labels Docker",[129,130,131],"Idéal pour","Quelques services gérés manuellement, setup clair","Environnements dynamiques et nombreux conteneurs",[133,134,135],"Consommation RAM","Très faible","Faible",[137,138,139],"Logs par hôte","Consultables dans l'interface","Via stack de logs externe",[141,142,143],"Gestion des accès","Access Lists intégrées (IP, mot de passe)","Middlewares à configurer",{"type":35,"title":145,"body":146},"Quand envisager Traefik ou Caddy","NPM convient parfaitement pour un parc de services stable dont le nombre reste maîtrisé. Dès que vous gérez des déploiements dynamiques — conteneurs qui apparaissent et disparaissent automatiquement, comme en environnement Kubernetes ou avec des pipelines CI\u002FCD qui créent des previews à la volée — Traefik devient plus adapté : sa découverte de services via les labels Docker évite de retourner dans l'interface pour chaque nouveau conteneur. Caddy est une bonne alternative si vous cherchez la simplicité de configuration par fichier avec des certificats automatiques, sans interface web. Dans tous les cas, NPM peut coexister avec Traefik ou Caddy sur le même VPS, chacun gérant une partie du trafic — à condition de ne pas mettre deux proxies sur les mêmes ports 80 et 443. Si votre infrastructure grossit au point où vous gérez plusieurs dizaines de services avec des équipes différentes, un maillage de services (Consul Connect, Linkerd) remplace avantageusement l'empilement de proxies.","Centralisez vos domaines avec Nginx Proxy Manager","Un VPS Cloud ServOrbit prêt avec Docker vous permet d'installer Nginx Proxy Manager comme point d'entrée HTTPS unique et de router tous vos services avec un SSL automatique.","Choisir mon VPS Cloud","\u002Fvps-cloud",[152,170,187],{"id":153,"slug":154,"slugs":155,"title":159,"excerpt":160,"readTime":17,"views":161,"isPinned":19,"noindex":19,"publishedAt":162,"updatedAt":163,"category":164,"categories":165,"featuredImage":29,"bgImage":30,"posterImage":167,"relatedSolution":168},33,"deployer-avec-caprover",{"fr":154,"en":156,"ar":157,"es":158},"deploy-your-applications-with-caprover-on-a-vps","انشر-تطبيقاتك-باستخدام-caprover-على-خادم-vps","desplegar-aplicaciones-con-caprover-en-un-vps","Déployer vos applications avec CapRover sur un VPS","Guide complet CapRover : installation, captain-definition, CI\u002FCD GitHub Actions, cluster multi-nœuds, sauvegardes et dépannage.",2,"2026-05-18T00:00:00+00:00","2026-11-04T16:30:25+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":25},[166],{"id":23,"name":24,"slug":25,"color":26,"icon":25},"\u002Fblog\u002Fcovers\u002Fdeployer-avec-caprover-poster.svg",{"categorySlug":25,"appSlug":169},"caprover",{"id":171,"slug":172,"slugs":173,"title":177,"excerpt":178,"readTime":179,"views":180,"isPinned":19,"noindex":19,"publishedAt":181,"updatedAt":182,"category":183,"categories":184,"featuredImage":29,"bgImage":30,"posterImage":186,"relatedSolution":29},34,"deployer-avec-dokku",{"fr":172,"en":174,"ar":175,"es":176},"deploy-your-applications-with-dokku-on-a-vps","انشر-تطبيقاتك-باستخدام-dokku-على-خادم-vps","desplegar-aplicaciones-con-dokku-en-un-vps","Déployer vos applications avec Dokku sur un VPS","Guide complet Dokku v0.35 : installation, buildpacks, variables d'env, rollback, plugins postgres\u002Fredis\u002Fletsencrypt et dépannage des erreurs courantes.",11,1,"2026-05-17T00:00:00+00:00","2026-10-18T21:57:59+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":25},[185],{"id":23,"name":24,"slug":25,"color":26,"icon":25},"\u002Fblog\u002Fcovers\u002Fdeployer-avec-dokku-poster.svg",{"id":188,"slug":189,"slugs":190,"title":194,"excerpt":195,"readTime":17,"views":180,"isPinned":19,"noindex":19,"publishedAt":196,"updatedAt":163,"category":197,"categories":198,"featuredImage":29,"bgImage":30,"posterImage":200,"relatedSolution":201},35,"deployer-avec-portainer",{"fr":189,"en":191,"ar":192,"es":193},"deploy-your-applications-with-portainer-on-a-vps","انشر-تطبيقاتك-باستخدام-portainer-على-خادم-vps","desplegar-aplicaciones-con-portainer-en-un-vps","Déployer vos applications avec Portainer sur un VPS","Pilotez Docker visuellement avec Portainer sur votre VPS : conteneurs, stacks, volumes et réseaux gérés depuis une interface web claire.","2026-05-16T00:00:00+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":25},[199],{"id":23,"name":24,"slug":25,"color":26,"icon":25},"\u002Fblog\u002Fcovers\u002Fdeployer-avec-portainer-poster.svg",{"categorySlug":25,"appSlug":202},"portainer",true,1794270693322]