Guide de Déploiement de l'API Node.js Express avec TypeScript et MongoDB sur VPS

Prérequis

Étapes de Déploiement

  1. 1Préparer le serveur VPS
    • Connectez-vous à votre serveur via SSH :
    • ssh utilisateur@adresse_ip_du_serveur
      Copié !
    • Mettez à jour les paquets système :
    • sudo apt update && sudo apt upgrade -y
      Copié !
    • Installez Node.js et npm :
    • curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
      sudo apt-get install -y nodejs
      Copié !
    • Vérifiez l'installation :
    • node -v
      npm -v
      Copié !
    • Installez PM2 (gestionnaire de processus) :
    • sudo npm install -g pm2
      Copié !
  2. 2Transférer le projet sur le serveur
    • Option 1 : Utilisez SCP pour transférer votre projet (depuis votre machine locale) :
    • scp -r /chemin/local/projet utilisateur@adresse_ip_du_serveur:/chemin/destination/
      Copié !
    • Option 2 : Clonez depuis un dépôt Git :
    • git clone https://votre-depot-git.com/projet.git
      Copié !
  3. 3Configurer le projet
    • Naviguez vers le dossier du projet :
    • cd /chemin/destination/projet
      Copié !
    • Créez un fichier .env :
    • nano .env
      Copié !
    • Ajoutez les variables d'environnement nécessaires :
    • MONGODB_URI=mongodb+srv://username:password@cluster.mongodb.net/database
      JWT_SECRET=votre_secret_jwt
      PORT=3000
      NODE_ENV=production
      Copié !
    • Installez les dépendances :
    • npm install --production
      Copié !
  4. 4Compiler le projet TypeScript
    • Installez les dépendances de développement si nécessaire :
    • npm install --only=dev
      Copié !
    • Compilez le code TypeScript :
    • npx tsc
      Copié !
    • Vérifiez que les fichiers JavaScript ont été générés (généralement dans un dossier dist/ ou build/)
    • ls dist
      Copié !
  5. 5Configurer PM2 pour gérer l'application
    • Créez un fichier de configuration ecosystem.config.js :
    • nano ecosystem.config.js
      Copié !
    • Ajoutez la configuration suivante :
    • module.exports = {
        apps: [{
          name: 'api-app',
          script: 'dist/index.js',
          instances: 'max',
          exec_mode: 'cluster',
          env: {
            NODE_ENV: 'production',
          }
        }]
      };
      Copié !
    • Démarrez l'application avec PM2 :
    • pm2 start ecosystem.config.js
      Copié !
    • Configurez PM2 pour démarrer avec le système :
    • pm2 startup
      pm2 save
      Copié !
  6. 6Configurer Nginx comme reverse proxy
    • Installez Nginx :
    • sudo apt install nginx -y
      Copié !
    • Créez un fichier de configuration pour votre application :
    • sudo nano /etc/nginx/sites-available/mon-app
      Copié !
    • Ajoutez la configuration suivante :
    • server {
          listen 80;
          server_name votre_domaine.com www.votre_domaine.com;
      
          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;
          }
      }
      Copié !
    • Activez la configuration :
    • sudo ln -s /etc/nginx/sites-available/mon-app /etc/nginx/sites-enabled/
      Copié !
    • Vérifiez la configuration Nginx :
    • sudo nginx -t
      Copié !
    • Redémarrez Nginx :
    • sudo systemctl restart nginx
      Copié !
  7. 7Configurer HTTPS avec Let's Encrypt (optionnel)
    • Installez Certbot :
    • sudo apt install certbot python3-certbot-nginx -y
      Copié !
    • Obtenez un certificat SSL :
    • sudo certbot --nginx -d votre_domaine.com -d www.votre_domaine.com
      Copié !
    • Suivez les instructions à l'écran
    • Vérifiez le renouvellement automatique :
    • sudo certbot renew --dry-run
      Copié !
  8. 8Tester l'application
    • Accédez à votre domaine dans un navigateur : http://votre_domaine.com (ou https:// si vous avez configuré SSL)
    • Testez les endpoints API via Swagger UI (généralement accessible via /api-docs).
    • Vérifiez les logs pour détecter d'éventuelles erreurs :
    • pm2 logs api-app
      Copié !

Remarques

Spécificités du projet

Pour les mises à jour futures, vous pouvez créer un script de déploiement simple qui automatise ces étapes (pull des modifications Git, compilation, redémarrage de l'application).