W07

Hostinger & VPS

SSH, Nginx reverse proxy, PM2, Certbot — déploiement sur serveur Ubuntu.

🏠 1. Hostinger Shared vs VPS

CritèreSharedVPS
ContrôleLimité (hPanel)Total (root SSH)
Node.jsNon disponibleOui
Base de donnéesMySQL via phpMyAdminToute BDD
Prix~2-4€/mois~5-20€/mois
UsageWordPress, PHP, HTML statiqueNode.js, API, apps custom
Pour déployer une app React + API Node.js, vous avez besoin d'un VPS. L'hébergement mutualisé ne supporte pas Node.js.

🔌 2. Connexion SSH & Configuration initiale

# Connexion SSH au VPS
ssh ubuntu@203.0.113.42

# Mise à jour du système
sudo apt update && sudo apt upgrade -y

# Installer NVM pour Node.js
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash
source ~/.bashrc
nvm install 20
nvm use 20
node --version

# Installer Git
sudo apt install git -y

# Cloner votre dépôt
git clone https://github.com/username/mon-app.git /var/www/mon-app
cd /var/www/mon-app && npm ci && npm run build

⚡ 3. Node.js & PM2

PM2 est le gestionnaire de processus de référence pour Node.js en production.

# Installer PM2 globalement
npm install -g pm2

# Démarrer une app
pm2 start dist/server.js --name mon-api

# Avec des options
pm2 start dist/server.js --name mon-api --watch --max-memory-restart 300M

# Sauvegarder & démarrage automatique au reboot
pm2 save
pm2 startup  # Copier-coller la commande générée

# Gestion des processus
pm2 list
pm2 logs mon-api --lines 50
pm2 restart mon-api
pm2 stop mon-api
pm2 delete mon-api
pm2 monit  # Interface de monitoring temps réel

🌐 4. Nginx comme reverse proxy

# Installer Nginx
sudo apt install nginx -y

# Créer la config pour votre site
sudo nano /etc/nginx/sites-available/monsite.fr
# /etc/nginx/sites-available/monsite.fr

server {
    listen 80;
    server_name monsite.fr www.monsite.fr;
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl http2;
    server_name monsite.fr www.monsite.fr;

    ssl_certificate /etc/letsencrypt/live/monsite.fr/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/monsite.fr/privkey.pem;

    # App Node.js (reverse proxy)
    location / {
        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_cache_bypass $http_upgrade;
    }

    # Assets statiques
    location /static/ {
        root /var/www/mon-app/dist;
        expires 1y;
        add_header Cache-Control "public, immutable";
    }
}
# Activer le site
sudo ln -s /etc/nginx/sites-available/monsite.fr /etc/nginx/sites-enabled/

# Tester la configuration
sudo nginx -t

# Recharger Nginx
sudo systemctl reload nginx

🔐 5. SSL avec Certbot

# Installer Certbot
sudo apt install certbot python3-certbot-nginx -y

# Obtenir un certificat + configurer Nginx automatiquement
sudo certbot --nginx -d monsite.fr -d www.monsite.fr

# Vérifier le renouvellement automatique
sudo certbot renew --dry-run

# Le cron de renouvellement est automatiquement créé
cat /etc/cron.d/certbot

🔄 6. Workflow de déploiement VPS

# Script de déploiement (deploy.sh)
cd /var/www/mon-app
git pull origin main
npm ci --production
npm run build
pm2 restart mon-api
Automatisez ce script avec GitHub Actions + SSH. À chaque push sur main, Actions se connecte au VPS et exécute le script de déploiement. Voir module W08.
→ Exercices W07 🔧 Mini-projet W08 : CI/CD →