Prérequis
- Un serveur Ubuntu/Debian
- Accès root ou sudo
Node.js permet d'exécuter JavaScript côté serveur. Ce guide couvre l'installation, la gestion avec PM2 et le déploiement en production avec Nginx en reverse proxy.
1. Installer Node.js via NodeSource
# Télécharger et exécuter le script d'installation
curl -fsSL https://deb.nodesource.com/setup_24.x | bash -
# Installer Node.js
apt install -y nodejs
# Vérifier l'installation
node -v
npm -v# Télécharger et exécuter le script d'installation NodeSource
curl -fsSL https://rpm.nodesource.com/setup_24.x | bash -
# Installer Node.js
dnf install -y nodejs
# Vérifier l'installation
node -v
npm -v2. Alternative : Installer avec NVM
# Installer NVM
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.4/install.sh | bash
# Recharger le shell
source ~/.bashrc
# Installer Node.js
nvm install 24
nvm use 24
nvm alias default 24
# Vérifier
node -v3. Créer une application de test
# Créer le dossier
mkdir -p /var/www/monapp
cd /var/www/monapp
# Initialiser npm
npm init -y
# Installer Express
npm install express// Créer le fichier app.js
cat > /var/www/monapp/app.js << 'EOF'
const express = require('express');
const app = express();
const PORT = process.env.PORT || 3000;
app.get('/', (req, res) => {
res.json({
message: 'Bienvenue sur mon API Node.js!',
timestamp: new Date().toISOString()
});
});
app.get('/health', (req, res) => {
res.json({ status: 'OK' });
});
app.listen(PORT, () => {
console.log(`Serveur démarré sur le port ${PORT}`);
});
EOF4. Installer PM2 (Process Manager)
# Installer PM2 globalement
npm install -g pm2
# Démarrer l'application
cd /var/www/monapp
pm2 start app.js --name "monapp"
# Sauvegarder la liste des processus
pm2 save
# Démarrage automatique au boot
pm2 startup5. Commandes PM2
# Lister les applications
pm2 list
# Statut détaillé
pm2 show monapp
# Logs
pm2 logs monapp
pm2 logs --lines 100
# Redémarrer
pm2 restart monapp
# Arrêter
pm2 stop monapp
# Supprimer
pm2 delete monapp
# Recharger sans downtime
pm2 reload monapp
# Monitoring en temps réel
pm2 monit6. Configuration PM2 avancée
cat > /var/www/monapp/ecosystem.config.js << 'EOF'
module.exports = {
apps: [{
name: 'monapp',
script: 'app.js',
instances: 'max', // Utilise tous les CPU
exec_mode: 'cluster',
env: {
NODE_ENV: 'development',
PORT: 3000
},
env_production: {
NODE_ENV: 'production',
PORT: 3000
},
// Logs
log_file: '/var/log/pm2/monapp.log',
error_file: '/var/log/pm2/monapp-error.log',
merge_logs: true,
// Restart automatique
max_memory_restart: '500M',
restart_delay: 5000
}]
};
EOF
mkdir -p /var/log/pm2
# Démarrer avec la config
pm2 start ecosystem.config.js --env production7. Configurer Nginx comme Reverse Proxy
apt install -y nginx
cat > /etc/nginx/sites-available/monapp << 'EOF'
server {
listen 80;
server_name monapp.com www.monapp.com;
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;
proxy_cache_bypass $http_upgrade;
}
}
EOF
ln -s /etc/nginx/sites-available/monapp /etc/nginx/sites-enabled/
nginx -t && systemctl reload nginx8. SSL avec Let's Encrypt
apt install -y certbot python3-certbot-nginx
certbot --nginx -d monapp.com -d www.monapp.com9. Variables d'environnement
# Créer un fichier .env
cat > /var/www/monapp/.env << 'EOF'
NODE_ENV=production
PORT=3000
DB_HOST=localhost
DB_USER=monapp
DB_PASS=motdepasse
SECRET_KEY=une_cle_secrete_tres_longue
EOF
# Installer dotenv
cd /var/www/monapp
npm install dotenv
# Dans app.js, ajouter en haut :
# require('dotenv').config();10. Déploiement automatisé
cat > /var/www/monapp/deploy.sh << 'EOF'
#!/bin/bash
cd /var/www/monapp
echo "Pulling latest code..."
git pull origin main
echo "Installing dependencies..."
npm ci --production
echo "Restarting application..."
pm2 reload monapp
echo "Deployment complete!"
EOF
chmod +x /var/www/monapp/deploy.shNode.js en production !
Votre application Node.js est maintenant déployée avec PM2 et accessible via Nginx. Elle redémarrera automatiquement en cas de crash ou de reboot.