Héberger un portfolio Next.js sur Proxmox
Mise en place d'un conteneur Debian 13 sous Proxmox pour héberger un portfolio Next.js avec Node.js, Nginx, HTTPS et un domaine public.
Sommaire
- Prérequis
- Création du conteneur Proxmox
- Installation du serveur Web
- Récupération du portfolio
- Installation et build Next.js
- Création du service Next.js
- Configuration de Nginx
- Configuration DNS et NAT
- Configuration HTTPS
- Vérifications
- Troubleshooting
Prérequis
- Serveur Proxmox VE fonctionnel.
- Template Debian 13 standard disponible dans Proxmox.
- Domaine public, par exemple
mprost.fr. - Dépôt Git contenant le portfolio Next.js.
- Adresse IPv4 fixe pour le conteneur.
- Ports TCP 80 et 443 redirigeables depuis le routeur.
Création du conteneur Proxmox
-
Télécharger le template Debian 13 standard depuis local > CT Templates.
-
Créer un conteneur LXC non privilégié avec par exemple :
- Hostname :
web - CPU : 1 cœur
- RAM : 1 Go
- Swap : 512 Mo
- Disque : 16 Go
- Bridge :
vmbr0 - IPv4 : fixe
- Start at boot : activé
- Hostname :
-
Dans notre architecture, le serveur Web utilise :
192.168.1.210
Installation du serveur Web
- Mettre Debian à jour :
apt update && apt full-upgrade -y
- Installer Nginx, Git, SSH et les outils nécessaires :
apt install -y nginx git openssh-server curl sudo
- Activer Nginx et SSH :
systemctl enable --now nginx
systemctl enable --now ssh
- Créer le dossier du portfolio :
mkdir -p /var/www/mprost.fr
Récupération du portfolio
- Cloner le dépôt Git dans le dossier Web :
git clone git@github.com:nxusss/mprost.fr.git /var/www/mprost.fr
- Vérifier le dépôt :
cd /var/www/mprost.fr
git status
Installation et build Next.js
-
Installer la version de Node.js attendue par le projet.
-
Vérifier Node.js et npm :
node -v
npm -v
- Installer les dépendances exactement à partir du
package-lock.json:
cd /var/www/mprost.fr
npm ci
- Construire la version de production :
npm run build
- Tester Next.js :
npm start
- Vérifier la réponse locale :
curl -I http://127.0.0.1:3000
Création du service Next.js
- Créer le service :
nano /etc/systemd/system/mprost.service
- Ajouter :
[Unit]
Description=mprost.fr - Next.js
After=network.target
[Service]
Type=simple
WorkingDirectory=/var/www/mprost.fr
ExecStart=/usr/bin/npm start
Restart=always
RestartSec=5
Environment=NODE_ENV=production
Environment=PORT=3000
[Install]
WantedBy=multi-user.target
- Activer et démarrer le service :
systemctl daemon-reload
systemctl enable --now mprost
- Vérifier son état :
systemctl status mprost --no-pager
Configuration de Nginx
- Créer la configuration du site :
nano /etc/nginx/sites-available/mprost.fr
- Configurer Nginx comme reverse proxy :
server {
listen 80;
listen [::]:80;
server_name mprost.fr www.mprost.fr;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
- Activer le site :
ln -s /etc/nginx/sites-available/mprost.fr /etc/nginx/sites-enabled/mprost.fr
rm -f /etc/nginx/sites-enabled/default
- Vérifier puis recharger Nginx :
nginx -t
systemctl reload nginx
Configuration DNS et NAT
- Faire pointer le domaine principal vers l'IPv4 publique :
A @ IP_PUBLIQUE
- Créer l'alias
www:
CNAME www mprost.fr
- Sur le routeur, rediriger uniquement :
TCP 80 -> 192.168.1.210:80
TCP 443 -> 192.168.1.210:443
- Vérifier la résolution DNS depuis Windows :
nslookup mprost.fr
- Vérifier l'accès au port HTTP :
Test-NetConnection mprost.fr -Port 80
Configuration HTTPS
- Installer Certbot et son module Nginx :
apt update
apt install -y certbot python3-certbot-nginx
- Demander le certificat pour les deux noms :
certbot --nginx -d mprost.fr -d www.mprost.fr
- Vérifier Nginx :
nginx -t
systemctl reload nginx
Vérifications
- Vérifier Next.js :
curl -I http://127.0.0.1:3000
- Vérifier les ports écoutés :
ss -lntp | grep -E ':80|:443|:3000'
- Vérifier le service :
systemctl status mprost --no-pager
- Tester le site depuis Internet :
https://mprost.fr
Troubleshooting
Erreur 403 Nginx
Symptôme : Nginx retourne 403 Forbidden.
Cause rencontrée : le portfolio est une application Next.js et ne possède pas directement de fichier index.html à servir.
Solution : exécuter Next.js avec Node.js et utiliser Nginx comme reverse proxy vers l'application.
Next.js ne démarre plus
Symptôme :
Cannot find module '/var/www/mprost.fr/node_modules/next/dist/bin/next'
Solution : réinstaller les dépendances puis reconstruire l'application :
cd /var/www/mprost.fr
npm ci
npm run build
systemctl restart mprost
Le domaine répond localement mais pas depuis Internet
Vérifier l'IPv4 publique et la résolution DNS :
nslookup mprost.fr
Puis vérifier que le routeur redirige bien TCP 80 et 443 vers le conteneur Debian.