Proxmox VE : Ouvrir ses Services au Monde (avec Nginx Proxy Manager !)
Salut les bidouilleurs du virtuel !
On a vu comment installer Proxmox, puis comment donner vie à nos premières machines virtuelles et conteneurs. Mon Gitea et mon Wiki ronronnent gentiment sur mon mini PC. Mais voilà, ils sont pour l'instant cachés derrière ma box internet, accessibles uniquement depuis mon réseau local. C'est bien pour la sécurité, mais pas très pratique si je veux montrer mes projets à des amis ou y accéder de n'importe où !
Aujourd'hui, on va percer le mystère de l'accessibilité web et installer un outil magique qui va nous permettre de publier nos services sur Internet de manière simple et sécurisée : Nginx Proxy Manager.
Qu'est-ce que Nginx Proxy Manager et comment ça marche ?
Imaginez votre box internet comme la porte d'entrée de votre maison. Derrière cette porte, vous avez plusieurs pièces (vos VMs et conteneurs). Pour que quelqu'un de l'extérieur puisse aller directement dans la cuisine ou le salon, il faudrait ouvrir une porte spécifique pour chaque pièce (c'est ce qu'on appelle la redirection de port ou port forwarding). Le problème, c'est que ça peut vite devenir le bazar, et ce n'est pas très sécurisé de laisser toutes ces portes grandes ouvertes.
C'est là qu'intervient Nginx Proxy Manager (NPM). Pensez à lui comme un concierge super intelligent à l'entrée de votre maison.
-
Un seul point d'accès : Au lieu d'ouvrir plein de portes différentes sur votre box, vous n'en ouvrez qu'une seule (généralement le port 80 pour le web non sécurisé et le port 443 pour le web sécurisé via HTTPS) qui mène directement à NPM.
-
Le routage malin : Quand quelqu'un veut visiter
gitea.mondomaine.com
, NPM reçoit la demande. Il sait quegitea.mondomaine.com
doit être envoyé à votre VM Gitea interne (par exemple, à l'adresse IP192.168.1.200
sur le port 3000). Il transfère la demande et renvoie la réponse. -
La sécurité HTTPS gratuite et automatique : Et c'est là que NPM devient vraiment génial ! Il peut gérer automatiquement les certificats SSL/TLS de Let's Encrypt. Ça veut dire que toutes vos connexions seront chiffrées (HTTPS), rendant vos sites sécurisés sans que vous ayez à vous arracher les cheveux avec les certificats. Plus de message "site non sécurisé" dans le navigateur de vos visiteurs !
En bref, NPM simplifie la gestion de l'accès à vos services web, centralise les redirections et assure la sécurité HTTPS, le tout via une interface web facile à utiliser.
Mettre en Place Nginx Proxy Manager : Conteneur ou VM ?
Pour Nginx Proxy Manager, je vous conseille vivement de créer un conteneur LXC. Pourquoi ? Parce que c'est une application relativement légère, qui bénéficiera de la rapidité et de l'efficacité d'un conteneur. Moins de ressources consommées, démarrage quasi instantané, c'est le choix idéal.
1. Préparation du Conteneur (Template)
Si ce n'est pas déjà fait, téléchargez un template LXC pour Debian ou Ubuntu. Je vous suggère le debian-12-standard
ou ubuntu-22.04-standard
pour rester cohérent.
-
Dans l'interface Proxmox, allez sur le stockage de votre serveur (par exemple, "local").
-
Cliquez sur "CT Templates" puis "Templates".
-
Sélectionnez un template (
debian-12-standard
par exemple) et cliquez sur "Download".
2. Création du Conteneur NPM
Maintenant, créons le conteneur pour NPM :
-
Cliquez sur le bouton "Créer CT" en haut à droite.
-
Onglet Général :
-
ID CT : Laissez celui par défaut (ex:
102
). -
Hostname :
nginxproxymanager
(ounpm
). -
Mot de passe : Définissez un mot de passe fort pour l'utilisateur
root
du conteneur. -
Cliquez sur "Suivant".
-
-
Onglet Modèle :
-
Stockage : Sélectionnez le stockage où vous avez téléchargé le template.
-
Modèle : Choisissez le template que vous venez de télécharger (ex:
debian-12-standard
). -
Cliquez sur "Suivant".
-
-
Onglet Disque :
-
Taille du Disque : 8 Go sont largement suffisants pour NPM.
-
Cliquez sur "Suivant".
-
-
Onglet Processeur :
-
Cores : 1 cœur CPU est amplement suffisant.
-
Cliquez sur "Suivant".
-
-
Onglet Mémoire :
-
Mémoire : Allouez 512 Mo de RAM. NPM est très économe.
-
Swap : Laissez 512 Mo.
-
Cliquez sur "Suivant".
-
-
Onglet Réseau :
-
Bridge : Laissez
vmbr0
. -
IPv4 : Cochez
Statique
. Donnez une adresse IP fixe pour NPM (ex:192.168.1.250
, choisissez une IP en dehors de celles de vos autres VMs). -
Gateway : L'IP de votre box (ex:
192.168.1.1
). -
DNS : L'IP de votre box ou des DNS publics (ex:
1.1.1.1
). -
Cliquez sur "Suivant".
-
-
Onglet Confirmer :
-
Vérifiez tout. Cochez "Démarrage après création".
-
Cliquez sur "Terminer".
-
Votre conteneur nginxproxymanager
va démarrer.
3. Installation de Nginx Proxy Manager dans le Conteneur
Une fois le conteneur démarré, accédez à sa console depuis l'interface Proxmox (cliquez sur le conteneur, puis sur l'onglet "Console"). Connectez-vous en root
avec le mot de passe que vous avez défini.
Maintenant, suivez ces étapes pour installer NPM (cela suppose que vous avez un conteneur Debian/Ubuntu récent) :
# Mettre à jour les paquets du conteneur
apt update && apt upgrade -y
# Installer les dépendances (Docker est le moyen le plus simple pour NPM)
apt install -y curl apt-transport-https ca-certificates software-properties-common
curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
apt update
apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
# Créer un dossier pour les données de NPM
mkdir /opt/npm
cd /opt/npm
# Créer le fichier docker-compose.yml pour Nginx Proxy Manager
# Copiez/collez ce contenu dans un éditeur de texte (nano docker-compose.yml)
# Ctrl+X pour quitter, Y pour sauvegarder
cat <<EOF > docker-compose.yml
version: '3'
services:
app:
image: 'jc21/nginx-proxy-manager:latest'
restart: unless-stopped
ports:
- '80:80' # Pour les requêtes HTTP
- '443:443' # Pour les requêtes HTTPS
- '81:81' # Pour l'interface web d'administration de NPM
environment:
DB_MYSQL_HOST: db
DB_MYSQL_PORT: 3306
DB_MYSQL_USER: npm
DB_MYSQL_PASSWORD: npm_password # <-- CHANGEZ CE MOT DE PASSE !!
DB_MYSQL_NAME: npm
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
db:
image: 'mariadb:10'
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: npm_root_password # <-- CHANGEZ CE MOT DE PASSE !!
MYSQL_DATABASE: npm
MYSQL_USER: npm
MYSQL_PASSWORD: npm_password # <-- CHANGEZ CE MOT DE PASSE !!
volumes:
- ./data/mysql:/var/lib/mysql
EOF
# Lancer Nginx Proxy Manager
docker compose up -d
N'oubliez pas de changer les mots de passe npm_password
et npm_root_password
dans le fichier docker-compose.yml
! C'est crucial pour la sécurité.
Laissez quelques instants le temps que Docker télécharge les images et lance les conteneurs.
Étape 3 : Configuration de Nginx Proxy Manager pour Vos Services
Maintenant que NPM tourne, on va le configurer pour qu'il expose votre Gitea et votre futur wiki sur le web.
1. Accès à l'Interface Web de NPM
-
Ouvrez votre navigateur web et rendez-vous à l'adresse IP de votre conteneur NPM sur le port 81 :
http://[IP_DU_CONTENEUR_NPM]:81
(ex:http://192.168.1.250:81
). -
La première fois, vous serez redirigé vers la page de connexion.
-
L'utilisateur par défaut est :
admin@example.com
-
Le mot de passe par défaut est :
changeme
-
-
Très important : Connectez-vous et allez immédiatement dans "Users" pour changer l'adresse email et le mot de passe par défaut de l'administrateur !
2. Configuration de votre Nom de Domaine
Pour que gitea.mondomaine.com
ou wiki.mondomaine.com
fonctionnent, il faut dire au monde que ces adresses pointent vers votre box internet.
-
Connectez-vous à l'interface de gestion de votre nom de domaine
mondomaine.com
chez votre hébergeur (OVH, Gandi, etc.). -
Allez dans la gestion des zones DNS.
-
Créez des enregistrements de type
A
(ouCNAME
si vous avez déjà un enregistrementA
pourmdsv41.fr
pointant vers votre IP publique) pour chaque sous-domaine que vous voulez utiliser :-
gitea.mondomaine.com
-> Type :A
-> Cible : Votre adresse IP PUBLIQUE (celle de votre box internet). -
wiki.mondomaine.com
-> Type :A
-> Cible : Votre adresse IP PUBLIQUE. -
Vous pouvez trouver votre IP publique en tapant "mon ip" sur Google.
-
-
Attention : Les changements DNS peuvent prendre de quelques minutes à plusieurs heures pour se propager sur Internet (propagation DNS). Soyez patient !
3. Redirection de Ports sur Votre Box Internet
Pour que le concierge (NPM) puisse recevoir les demandes du monde extérieur, il faut que votre box internet sache où les envoyer.
-
Connectez-vous à l'interface d'administration de votre box internet.
-
Allez dans la section "Redirection de ports", "NAT/PAT", ou "Règles de pare-feu".
-
Créez deux règles :
-
Port externe :
80
(HTTP) -> Port interne :80
-> Adresse IP interne : L'IP de votre conteneur NPM (ex:192.168.1.250
). -
Port externe :
443
(HTTPS) -> Port interne :443
-> Adresse IP interne : L'IP de votre conteneur NPM (ex:192.168.1.250
). -
Sauvegardez les changements.
-
4. Création des Hôtes Proxy dans Nginx Proxy Manager
De retour dans l'interface web de NPM :
-
Allez dans le menu "Hosts" > "Proxy Hosts".
-
Cliquez sur "Add Proxy Host".
Pour Gitea (exemple avec gitea.mondomaine.com
) :
-
Details :
-
Domain Names :
gitea.mondomaine.com
-
Scheme :
http
(ouhttps
si Gitea est déjà configuré en HTTPS interne, mais pour commencer,http
est plus simple si Gitea tourne sur un port non sécurisé). -
Forward Hostname / IP : L'adresse IP interne de votre VM Gitea (ex:
192.168.1.200
). -
Forward Port : Le port sur lequel Gitea tourne dans votre VM (par défaut, souvent
3000
). -
Cochez "Block Exploits" et "Websockets Support".
-
Cliquez sur "Save".
-
-
SSL :
-
Cliquez sur l'onglet "SSL".
-
SSL Certificate : Choisissez " (le bouton déroulant en bas).
-
Force SSL : Cochez cette case pour forcer toutes les connexions à passer par HTTPS.
-
Email Address for Let's Encrypt : Entrez votre adresse email.
-
Cochez "I Agree to the Let's Encrypt Terms of Service".
-
Cliquez sur "Save".
-
NPM va demander et installer le certificat Let's Encrypt pour
gitea.mondomaine.com
. Ça peut prendre quelques secondes. Si tout se passe bien, le statut passera au vert !
-
Répétez la même opération pour votre Wiki (exemple avec wiki.mondomaine.com
) :
-
Details :
-
Domain Names :
wiki.mondomaine.com
-
Scheme :
http
-
Forward Hostname / IP : L'adresse IP interne de votre conteneur Wiki (ex:
192.168.1.201
). -
Forward Port : Le port sur lequel votre serveur web Wiki tourne dans le conteneur (souvent
80
pour Apache/Nginx). -
Cochez "Block Exploits" et "Websockets Support".
-
Cliquez sur "Save".
-
-
SSL :
-
Comme pour Gitea, demandez un nouveau certificat Let's Encrypt.
-
La Sécurité : On ne Rigole Pas avec Ça !
Quelques points cruciaux pour garder votre homelab sécurisé :
-
Mots de Passe Robustes : Pour Proxmox, pour NPM, et pour toutes vos applications ! Utilisez des générateurs de mots de passe.
-
Mises à Jour Régulières : Mettez à jour Proxmox, vos VMs, vos conteneurs, et NPM lui-même. C'est la meilleure défense contre les failles de sécurité.
-
Firewall Proxmox : Pensez à explorer le pare-feu intégré à Proxmox (section "Datacenter" > "Firewall"). Vous pouvez y ajouter des règles pour limiter les accès à vos VMs et conteneurs depuis l'extérieur.
-
Pas de root direct depuis l'extérieur : Ne jamais exposer l'accès SSH de votre Proxmox (utilisateur
root
) directement sur internet. NPM est votre seul point d'entrée. -
Sauvegardes : On n'est jamais trop prudent. Mettez en place des sauvegardes régulières de vos VMs et conteneurs avec Proxmox.
Le Mot de la Fin (et du Début d'une ère connectée !)
Ça y est ! Votre homelab s'ouvre au monde ! Grâce à Nginx Proxy Manager, vous pouvez désormais accéder ou pas à gitea.mondomaine.com
ou wiki.mondomaine.com
(et toutes les autres applications que vous exposerez) depuis n'importe où, avec une connexion sécurisée par HTTPS. C'est propre, c'est efficace, et c'est géré par votre petit concierge virtuel !
Maintenant que vos services sont accessibles, le champ des possibles s'élargit encore. Dans un prochain article, on pourra parler de la gestion du stockage avancé, des sauvegardes, ou même de la haute disponibilité.
N'hésitez pas à me dire en commentaires si vous avez réussi cette installation, ou si vous avez d'autres astuces à partager !
À très vite sur https://mdsv41.fr/ !