Installer Nginx Proxy Manager sur Debian

Installer Nginx Proxy Manager sur Debian

Nginx Proxy Manager est une interface web qui pilote Nginx en arrière-plan. Plutôt que d'éditer manuellement des fichiers `server { }`, vous ajoutez vos domaines en quelques clics et NPM génère automatiquement la configuration et les certificats Let's Encrypt. Idéal pour héberger plusieurs services sur un même VPS : Plex, Nextcloud, Vaultwarden, Uptime Kuma, des sites WordPress, etc.

Prérequis

  • VPS Debian 11/12 ou Ubuntu 22.04+ avec accès root
  • Docker et Docker Compose installés (voir le tuto Docker)
  • Ports 80, 81 et 443 ouverts
  • Un nom de domaine pointant vers l'IP de votre VPS

Étape 1 : Préparer l'environnement

Créez un dossier pour NPM :

sudo mkdir -p /opt/nginx-proxy-manager
cd /opt/nginx-proxy-manager

Étape 2 : Fichier docker-compose

Créez le fichier docker-compose.yml :

sudo nano docker-compose.yml

Collez la configuration suivante :

services:
  app:
    image: 'jc21/nginx-proxy-manager:latest'
    container_name: nginx-proxy-manager
    restart: unless-stopped
    ports:
      - '80:80'
      - '81:81'
      - '443:443'
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt
    environment:
      DISABLE_IPV6: 'false'

Étape 3 : Démarrer le conteneur

sudo docker compose up -d

Vérifiez que le conteneur tourne :

sudo docker ps

Étape 4 : Première connexion

Ouvrez votre navigateur sur :

http://IP_DE_VOTRE_VPS:81

Identifiants par défaut :

Important : changez immédiatement l'email et le mot de passe à la première connexion.

Étape 5 : Ajouter un Proxy Host

Cliquez sur Hosts → Proxy Hosts → Add Proxy Host.

Remplissez :

  • Domain Names : app.votre-domaine.com
  • Scheme : http
  • Forward Hostname / IP : l'IP interne ou hostname du service (ex: 172.17.0.1 pour l'hôte, ou le nom d'un autre conteneur Docker)
  • Forward Port : le port du service (ex: 3000)
  • Cochez Block Common Exploits
  • Cochez Websockets Support si le service utilise du WebSocket

Étape 6 : Activer le SSL Let's Encrypt

Dans l'onglet SSL du même proxy host :

  • SSL Certificate : Request a new SSL Certificate
  • Cochez Force SSL
  • Cochez HTTP/2 Support
  • Cochez HSTS Enabled
  • Saisissez votre email pour Let's Encrypt
  • Acceptez les conditions

Cliquez sur Save. NPM contacte Let's Encrypt, valide le domaine et installe le certificat automatiquement.

Étape 7 : Sécuriser l'accès à l'interface NPM

Le port 81 expose l'interface admin. Bloquez son accès public via UFW :

sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow from VOTRE_IP_FIXE to any port 81
sudo ufw enable

Étape 8 : Configurer un Stream (TCP/UDP)

Pour proxifier un service non-HTTP (Minecraft, base de données distante, etc.) :

Hosts → Streams → Add Stream

  • Incoming Port : port public (ex: 25565 pour Minecraft)
  • Forward Host : IP du serveur cible
  • Forward Port : port du service
  • TCP / UDP selon le protocole

Dépannage

"502 Bad Gateway"

Le service derrière le proxy n'est pas joignable. Vérifiez :

sudo docker exec -it nginx-proxy-manager ping IP_DU_SERVICE

Sur Docker, utilisez le nom du conteneur ou host.docker.internal plutôt qu'une IP fixe.

Certificat Let's Encrypt impossible à générer

Vérifiez que le port 80 est ouvert et que votre domaine pointe bien vers l'IP du VPS :

dig +short votre-domaine.com

Cloudflare doit être en mode DNS only (nuage gris) pendant la génération du certificat, pas en mode proxy.

Conteneur qui crash

Inspectez les logs :

sudo docker logs nginx-proxy-manager --tail 100

Commandes utiles

# Logs en temps réel
sudo docker logs -f nginx-proxy-manager

# Redémarrer NPM
sudo docker compose restart

# Mettre à jour NPM
sudo docker compose pull && sudo docker compose up -d

# Sauvegarder la config
sudo tar -czf npm-backup-$(date +%F).tar.gz data letsencrypt

Conclusion

Nginx Proxy Manager simplifie radicalement la gestion d'un reverse proxy multi-domaines. Combiné à Docker, vous pouvez désormais héberger autant de services que votre VPS peut en supporter, chacun avec son propre certificat SSL et son propre sous-domaine.

Ressources

Join our Discord community server

For any questions, suggestions, or just to chat with the community, join us on Discord!

900+Members