Déployer une application Node.js
Déployer une application Node.js/React sur VPS RedHeberg
Ce guide détaille le déploiement complet d'une application Node.js avec frontend React sur un VPS Linux RedHeberg, incluant la configuration PM2 et le reverse proxy Nginx.
Prérequis
- VPS RedHeberg avec accès SSH
- Node.js et npm installés
- Accès au repository Git de votre application
Pour une application Node.js/React en production, nous recommandons au minimum un VPS XEON M (4vCPU/8GB) ou un VPS GAME ULTRA (4vCPU/8GB) avec protection Anti-DDoS PRO incluse.
1. Installation des dépendances système
Connectez-vous à votre VPS et installez les outils nécessaires :
# Mise à jour du système
sudo apt update && sudo apt upgrade -y
# Installation de Node.js 20.x via NodeSource
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt-get install -y nodejs
# Installation de PM2 globalement
sudo npm install -g pm2
# Installation de Nginx
sudo apt install nginx -y
# Installation de Git si non présent
sudo apt install git -y
# Vérification des versions
node --version
npm --version
pm2 --version
nginx -v
2. Clonage et préparation de l'application
Créez un utilisateur dédié et clonez votre application :
# Création d'un utilisateur pour l'application
sudo adduser --system --group --shell /bin/bash --home /var/www/app nodeapp
# Passage en utilisateur nodeapp
sudo -u nodeapp -i
# Clonage du repository (remplacez par votre URL)
cd /var/www/app
git clone https://github.com/votre-username/votre-repo.git .
# Installation des dépendances Node.js
npm install
# Build de l'application React (si applicable)
npm run build
N'oubliez pas de créer votre fichier .env avec les variables de production avant le build.
3. Configuration de l'application avec PM2
Créez un fichier de configuration PM2 pour gérer votre application :
# Création du fichier ecosystem PM2
sudo -u nodeapp tee /var/www/app/ecosystem.config.js << 'EOF'
module.exports = {
apps: [{
name: 'mon-app-react',
script: './server.js', // ou index.js selon votre app
cwd: '/var/www/app',
instances: 'max',
exec_mode: 'cluster',
env: {
NODE_ENV: 'production',
PORT: 3000
},
error_file: '/var/log/pm2/app-error.log',
out_file: '/var/log/pm2/app-out.log',
log_file: '/var/log/pm2/app-combined.log',
time: true,
watch: false,
max_memory_restart: '1G'
}]
};
EOF
# Création du répertoire de logs PM2
sudo mkdir -p /var/log/pm2
sudo chown nodeapp:nodeapp /var/log/pm2
# Démarrage de l'application avec PM2
sudo -u nodeapp pm2 start ecosystem.config.js
# Sauvegarde de la configuration PM2
sudo -u nodeapp pm2 save
# Configuration du démarrage automatique
sudo -u nodeapp pm2 startup
Utilisez pm2 status, pm2 logs, pm2 restart mon-app-react pour gérer votre application.
4. Configuration du reverse proxy Nginx
Configurez Nginx pour exposer votre application sur les ports 80/443 :
# Suppression de la configuration par défaut
sudo rm /etc/nginx/sites-enabled/default
# Création de la configuration pour votre application
sudo tee /etc/nginx/sites-available/mon-app << 'EOF'
server {
listen 80;
server_name YOUR_SERVER_IP votre-domaine.com;
# Gestion des fichiers statiques React
location /static/ {
alias /var/www/app/build/static/;
expires 1y;
add_header Cache-Control "public, immutable";
}
# API et routes dynamiques vers Node.js
location /api/ {
proxy_pass http://localhost: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;
proxy_read_timeout 300s;
proxy_connect_timeout 75s;
}
# Toutes les autres routes vers l'application React
location / {
try_files $uri $uri/ @nodejs;
}
location @nodejs {
proxy_pass http://localhost: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;
}
# Configuration de sécurité
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-XSS-Protection "1; mode=block" always;
# Logs
access_log /var/log/nginx/app-access.log;
error_log /var/log/nginx/app-error.log;
}
EOF
# Activation du site
sudo ln -s /etc/nginx/sites-available/mon-app /etc/nginx/sites-enabled/
# Test de la configuration
sudo nginx -t
# Redémarrage de Nginx
sudo systemctl restart nginx
sudo systemctl enable nginx
5. Configuration SSL avec Certbot (optionnel)
Pour sécuriser votre application avec HTTPS :
# Installation de Certbot
sudo apt install certbot python3-certbot-nginx -y
# Obtention du certificat SSL (remplacez par votre domaine)
sudo certbot --nginx -d votre-domaine.com
# Renouvellement automatique
sudo systemctl enable certbot.timer
6. Monitoring et maintenance
Configurez la surveillance de votre application :
# Script de monitoring simple
sudo tee /usr/local/bin/check-app.sh << 'EOF'
#!/bin/bash
if ! curl -f http://localhost:3000 > /dev/null 2>&1; then
echo "Application down, restarting..."
sudo -u nodeapp pm2 restart mon-app-react
fi
EOF
sudo chmod +x /usr/local/bin/check-app.sh
# Ajout d'une tâche cron pour le monitoring
(crontab -l 2>/dev/null; echo "*/5 * * * * /usr/local/bin/check-app.sh") | crontab -
Vérification du déploiement
Testez votre application :
# Vérification du statut PM2
sudo -u nodeapp pm2 status
# Test de l'application