Mettre à jour une application sur un VPS ne s'improvise pas. Automatisez la procédure de livraison : pull Git, installation propre des dépendances de production, migration de base de données et rechargement PM2 sans déconnexion d'utilisateurs.
Rapatrie les derniers commits testés et validés depuis le dépôt GitHub central.
Installe exactement les versions figées dans le lockfile sans installer les outils de dev.
Met à jour le schéma des tables (Knex/Prisma/TypeORM) avant de basculer le code.
Rechargement gracieux des instances Node tout en rechargeant les variables .env.
#!/bin/bash # Script de déploiement automatique d'une mise à jour de production : set -e # Arrêter immédiatement si une commande échoue echo "🚀 [1/5] Rapatriement du code source..." cd /var/www/learnweb-api git pull origin main echo "📦 [2/5] Installation des dépendances de production..." npm ci --omit=dev echo "🏗️ [3/5] Compilation du bundle TypeScript..." npm run build echo "🗄️ [4/5] Exécution des migrations de base de données..." npx prisma migrate deploy echo "🔄 [5/5] Rechargement gracieux avec PM2..." pm2 reload learnweb-api --update-env echo "✅ Mise à jour déployée avec succès en zéro downtime !"
^ est présent, risquant d'introduire un bug imprévu en production. De plus, il modifie package-lock.json sur le serveur, provoquant des conflits Git futurs.node_modules et installe à la virgule près les versions scellées dans package-lock.json. C'est la garantie absolue de tester en production exactement ce qui a été testé en local ! Vous pouvez configurer un workflow GitHub Actions qui se connecte automatiquement en SSH avec une clé privée sécurisée et déclenche ce script à chaque fois qu'une Pull Request est fusionnée dans la branche main !
| Étape | Action Technique | Sécurité Assurée |
|---|---|---|
| 1. Sauvegarde préventive | mysqldump de la base de données | Possibilité de restauration immédiate si la migration échoue |
| 2. Synchronisation Git | git pull origin main | Récupération du code certifié sans divergence locale |
| 3. Dépendances | npm ci --omit=dev | Reproductibilité stricte et exclusion des paquets de test/linter lourds |
| 4. Migration BDD | npx prisma migrate deploy | Évolution du schéma avant que le nouveau code ne requête les nouvelles colonnes |
| 5. Rechargement | pm2 reload all | Les requêtes en cours se terminent sans aucune interruption de service |