L'architecture cible
Node.js écoute sur un port local (3000), Nginx sert le HTTPS en frontal et reverse-proxy vers Node, PM2 maintient le processus en vie. C'est l'architecture la plus éprouvée pour un VPS unique.
Étape 1 — Node.js 22 LTS
curl -fsSL https://deb.nodesource.com/setup_22.x | bash -
apt install -y nodejsÉtape 2 — Déployer l'application
Clonez votre dépôt dans /var/www/monapp, installez les dépendances en mode production (npm ci --omit=dev), et créez un utilisateur dédié qui possède le dossier.
Étape 3 — PM2 en production
npm install -g pm2
pm2 start dist/server.js --name monapp --max-memory-restart 500M
pm2 startup systemd -u deploy --hp /home/deploy
pm2 saveLe --max-memory-restart redémarre proprement l'app en cas de fuite mémoire — indispensable sur un long run.
Étape 4 — Nginx en reverse proxy
server {
listen 443 ssl http2;
server_name api.example.com;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}Étape 5 — HTTPS avec Let's Encrypt
apt install certbot python3-certbot-nginx && certbot --nginx -d api.example.com. Le renouvellement est automatique.
Étape 6 — Zéro downtime
pm2 reload monapp recharge les workers sans couper les connexions. Pour les déploiements Git : un simple git pull && npm ci && pm2 reload dans un script ou une GitHub Action suffit à l'échelle d'un VPS.
Variables d'environnement
Jamais de secrets dans le dépôt : un .env en chmod 600, chargé par PM2 via ecosystem.config.js. Sur notre plateforme, le VPS est à vous — personne d'autre ne lit ce fichier.