Déployer une application Node.js avec PM2
Mettre en production une application Node.js sur un VPS Linux avec PM2, Nginx et un redémarrage automatique.
Prérequis
Avant de commencer, préparez :
- Un VPS Debian ou Ubuntu.
- Un accès SSH avec
rootousudo. - Un nom de domaine ou sous-domaine si l'application doit être publique.
- Le code de votre application Node.js.
Mettez le serveur à jour :
apt update && apt upgrade -yInstallez les outils utiles :
apt install curl git build-essential -yInstaller Node.js
Installez Node.js depuis le dépôt NodeSource :
curl -fsSL https://deb.nodesource.com/setup_20.x | bash -
apt install nodejs -yVérifiez les versions :
node -v
npm -vPréparer l'application
Placez votre application dans /var/www :
mkdir -p /var/www
cd /var/www
git clone https://github.com/votre-utilisateur/votre-application.git mon-app
cd mon-appInstallez les dépendances :
npm installSi votre projet nécessite une compilation :
npm run buildTestez le lancement manuel :
npm startArrêtez ensuite le processus avec CTRL+C.
Configurer les variables d'environnement
Créez un fichier .env si votre application en utilise un :
nano .envExemple :
NODE_ENV=production
PORT=3000
APP_URL=https://app.exemple.fr
DATABASE_URL=mysql://user:password@localhost:3306/databaseVérifiez que votre application lit bien ce fichier. Selon le framework utilisé, vous devrez peut-être installer dotenv :
npm install dotenvInstaller PM2
Installez PM2 globalement :
npm install -g pm2Lancez l'application avec PM2 :
pm2 start npm --name "mon-app" -- startSi votre application démarre avec un fichier précis :
pm2 start server.js --name "mon-app"Vérifiez l'état :
pm2 statusConsultez les logs :
pm2 logs mon-appActiver le redémarrage automatique
Générez la commande de démarrage automatique :
pm2 startupPM2 affichera une commande à copier et exécuter. Lancez-la, puis sauvegardez la liste des processus :
pm2 saveAprès un redémarrage du VPS, PM2 relancera automatiquement l'application.
Configurer Nginx en reverse proxy
Installez Nginx :
apt install nginx -yCréez une configuration :
nano /etc/nginx/sites-available/mon-appAjoutez :
server {
listen 80;
server_name app.exemple.fr;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
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;
}
}Activez le site :
ln -s /etc/nginx/sites-available/mon-app /etc/nginx/sites-enabled/
nginx -t
systemctl reload nginxCommandes PM2 utiles
Redémarrer l'application :
pm2 restart mon-appArrêter l'application :
pm2 stop mon-appVoir les logs :
pm2 logs mon-appSupprimer l'application de PM2 :
pm2 delete mon-appSauvegarder la configuration PM2 :
pm2 saveErreurs fréquentes
L'application ne démarre pas
Consultez les logs :
pm2 logs mon-appLe site affiche une erreur 502
Vérifiez que l'application tourne bien :
pm2 status
ss -tulpn | grep 3000Le port est déjà utilisé
Repérez le processus :
ss -tulpn | grep 3000Changez ensuite le port dans .env ou arrêtez le service en conflit.
Conclusion
Votre application Node.js est maintenant lancée avec PM2, accessible via Nginx et prête à redémarrer automatiquement après un reboot du VPS.
Ce guide vous a aidé ?
Votre retour permet de repérer les guides à améliorer en priorité.