Installer Nginx Proxy Manager sur Ubuntu avec Docker
Installer Nginx Proxy Manager
Objectif : Exposer vos services locaux (Nextcloud, Immich, etc.) sur internet de manière sécurisée grâce à un nom de domaine et des certificats SSL gratuits.
Nginx Proxy Manager est l’outil indispensable pour l’auto-hébergement. En effet, il agit comme un « aiguilleur » : il reçoit les requêtes arrivant de l’extérieur (ex: photo.votre-domaine.lu) et les dirige intelligemment vers le bon serveur sur votre réseau local. Plus besoin de retenir des numéros de ports compliqués, tout devient accessible via des adresses claires et sécurisées en HTTPS.
Pourquoi utiliser Nginx Proxy Manager ?
C’est la solution la plus simple pour gérer vos accès externes sans toucher à des fichiers de configuration complexes.
| Fonction | Avantage |
| Interface Graphique | Tout se gère en quelques clics. |
| Certificats SSL | Intégration Let’s Encrypt gratuite et automatique. |
| Sécurité | Protection de vos services par listes d’accès (Access Lists). |
| Multi-services | Gérez des dizaines de domaines sur une seule IP. |
1. Configuration du nom de domaine et gestion de l’IP
Pour que le service fonctionne, on doit d’abord indiquer à internet où se trouve votre serveur. Cette étape se réalise chez votre fournisseur de domaine (OVH, Gandi, Infomaniak, etc.) en ajoutant une entrée de type A pointant vers votre IP publique.
Le défi de l’adresse IP dynamique
Cependant, un obstacle de taille se pose souvent : l’adresse IP fixe. Au Luxembourg, par exemple, obtenir une IP fixe auprès d’un fournisseur d’accès est souvent extrêmement coûteux, voire réservé aux professionnels. La plupart des connexions domestiques utilisent des adresses dynamiques qui changent régulièrement.
Pour pallier ce problème, on doit utiliser un système de DNS Dynamique (DDNS). Ce mécanisme permet de mettre à jour automatiquement votre enregistrement DNS dès que votre adresse IP change. Plusieurs solutions existent :
- La fonction native du routeur : Des appareils comme la Fritz!Box intègrent directement une option « DynDNS » qui informe votre fournisseur de domaine du changement d’IP.
- Des outils logiciels : On peut installer des applications comme
ddclientsur son serveur Linux pour automatiser cette mise à jour.
Grâce à cela, votre domaine pointera toujours vers votre maison, peu importe la fréquence des changements d’IP.
2. Redirection des ports sur la box
Ensuite, on doit configurer le modem/routeur pour laisser entrer le trafic web vers notre serveur.
On doit rediriger deux ports critiques vers l’adresse IP locale de notre machine Docker :
- Port 80 (HTTP) : Indispensable pour la validation initiale des certificats.
- Port 443 (HTTPS) : Pour tout le trafic web sécurisé.
Pour que Nginx Proxy Manager soit capable de recevoir les requêtes en provenance d’internet et de les rediriger vers notre réseau privé, c’est à dire à partir d’un domaine externe, comme par exemple test.md.lu , il faut ajouter une déviation dans l’éditeur DNS des nom de domaine de notre gestionnaire de nom de domaine. Ceci peut-être ovh.com ou dns.lu …

Si la déviation est faite sur le gestionnaire de nom de domaine, il faut aussi faire la redirection de ports dans le modem/routeur qui nous permet d’avoir internet dans notre réseau privé.
Dans cette exemple, cette configuration se fait dans une Fritz!Box.

Le plus simple et ce qui consomme le moins de ressources, c’est de faire l’installation de Nginx Proxy Manager dans un conteneur et de le faire tourner dans docker.
Voici un article dans le quel on explique comment faire l’installation de docker https://md.lu/2021/10/10/docker-install-more/
3. Préparation des dossiers système
Maintenant, on se connecte sur le serveur Ubuntu pour préparer l’environnement de stockage. On crée manuellement les répertoires afin d’éviter tout conflit de permissions lors du déploiement.
sudo mkdir -p /srv/docker/nginx-proxy-manager/data /srv/docker/nginx-proxy-manager/letsencrypt
Afin que les commandes ci-dessous passe sans problèmes, certaine application doivent être installer.
Voici la commandes qui va installer les applications nécessaire si elle ne le sont pas encore:
sudo apt update; sudo apt install nano docker docker-compose -y
On va créer un dossier nommer npm et entré dedans avec les commandes suivante:
sudo mkdir npm; cd npm
4. Installation via Portainer
On va créer un fichier nommer « docker-compose.yml » avec la commande:
sudo nano docker-compose.yml
Dans ce fichier on va coller ce qui suit:
version: '3.8'
services:
app:
image: 'jc21/nginx-proxy-manager:latest'
restart: unless-stopped
ports:
# These ports are in format <host-port>:<container-port>
- '80:80' # Public HTTP Port
- '443:443' # Public HTTPS Port
- '81:81' # Admin Web Port
# Add any other Stream port you want to expose
# - '21:21' # FTP
# Uncomment the next line if you uncomment anything in the section
# environment:
# Uncomment this if you want to change the location of
# the SQLite DB file within the container
# DB_SQLITE_FILE: "/data/database.sqlite"
# Uncomment this if IPv6 is not enabled on your host
# DISABLE_IPV6: 'true'
volumes:
- /srv/docker/nginx-proxy-manager/data:/data
- /srv/docker/nginx-proxy-manager/letsencrypt:/etc/letsencrypt
On lance le docker qu’on viens de composer avec la commande suivante:
docker-compose up -d
Quelque chose de similaire devrai s’afficher:
root@NginxProxyManager:~/npm# docker-compose up -d
Creating network "npm_default" with the default driver
Pulling app (jc21/nginx-proxy-manager:latest)…
latest: Pulling from jc21/nginx-proxy-manager
3689b8de819b: Pull complete
ac992dd4ece3: Pull complete
d6acdc20cb1e: Pull complete
d43e07f5a58e: Pull complete
55da15d61491: Pull complete
034e796b1498: Pull complete
6d77f5bf20f2: Pull complete
b49f074777f6: Pull complete
825a1f7d68cf: Pull complete
6be11ec3209e: Pull complete
f13abca22944: Pull complete
a4cdff6477cd: Pull complete
57efa35860f5: Pull complete
a089f179c3a4: Pull complete
5187f70b0a00: Pull complete
79daeeaf7dd2: Pull complete
ca259377e240: Pull complete
62487a541565: Pull complete
a4e66528d25e: Pull complete
247f79434616: Pull complete
ea855009b8aa: Pull complete
f49cd6c19e33: Pull complete
2c291f12d219: Pull complete
e89fff2dfa1c: Pull complete
42f4c275ca18: Pull complete
f94059f8249a: Pull complete
8a5e64048b95: Pull complete
84eab550b949: Pull complete
68f1789d0bb0: Pull complete
4f4fb700ef54: Pull complete
b44d7cedcdb2: Pull complete
006edeee0be7: Pull complete
da739a256d1d: Pull complete
Digest: sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Status: Downloaded newer image for jc21/nginx-proxy-manager:latest
Creating npm_app_1 … done
N’ayant pas trouver les fichiers nécessaire, Docker a télécharger tout ce qu’il avait besoin pour pouvoir démarrer le logiciel.
On peut voir que le docker est en cours d’exécution avec la commande suivante:
docker ps
5. Premier accès et sécurité
Pour confirmer que Nginx Proxy Manager est fonctionnelle, on peut se connecter avec un navigateur internet tel que Google Chrome ou Firefox à l’adresse IP du serveur.
La page suivante devrais s’afficher:

Si on connais plus l’adresse du serveur, on peut écrire la commande suivante dans le terminal pour avoir l’adresse IP:
ip a
Pour accéder à la page d’administration, il faut inscrire l’adresse IP du serveur Nginx Proxy Manager et ajouter le port 81 à la fin (ex: http://192.168.1.50:81)..

Sur la page de login, il faut pour la première connexion indiquer l’adresse email
admin@example.com
et le mot de passe
changeme
Puis on est rediriger vers une page sur la quel on doit entrée nos nouveau identifiants.

Cependant, on doit impérativement modifier ces informations dès la première connexion pour garantir la sécurité de votre réseau.
Après avoir entrée les informations demandé, la page suivante devrais s’afficher:

On appui sur le bonhomme en haut à droite, puis sur « Sign out« . La page de connexion devrait s’afficher. On se connecte avec la nouvelle adresse email entrée précédemment et le nouveau mot de passe.
6. Création de votre premier Proxy Host
Pour exposer un service (par exemple test.md.lu), la manipulation est désormais très rapide :
Sur la page principale on clique sur « Proxy Hosts«

En haut à droite on clique sur « Add Proxy Host«

Dans la fenêtre suivante, on inscrit le nom de domaine dans la case « Domaine Names* » , dans notre cas test.md.lu .
Dans « Forward Hostname / IP* » , on met l’adresse IP de serveur qu’on veut atteindre avec la page test.md.lu .
Puis, on met le port sur le quel on veut faire la déviation, dans notre exemple, la page de configuration de Nginx Proxy Manager est sur le port « 81 ».
Ensuite, on active le bouton « Block Common Exploits« ,
et finalement on appuis sur « Save« .




Pour rendre le tout plus intéressant et sécuriser, on clique sur le « 3 petits points » à droite, puis sur « Edit« ,
Puis sur « SSL« ,
sur « None« ,
sur « Request a new SSL Certificate« ,
sur « Force SSL« ,
sur « I Afree to the …« ,
et puis sur « Save« .
Si tout s’est biens passé et que tout est correctement configurer, on aura pas d’erreur et notre certificat SSL aura été délivrer correctement.
Désormais, notre service est accessible partout dans le monde via une connexion HTTPS chiffrée.
sources:
https://nginxproxymanager.com/guide/#quick-setup
https://nginxproxymanager.com/setup/#running-the-app
https://www.youtube.com/watch?v=cjJVmAI1Do4&t=1712s
Conclusion
Nginx Proxy Manager est la pierre angulaire d’un serveur domestique moderne. En centralisant vos accès, on gagne en simplicité et on sécurise l’ensemble de ses données grâce au SSL automatique.
Voici d’autres articles au sujet de Docker & Portainer :