Déploiement
Déploiement • Chapitre 7 : Déploiement et connexion à une base de données

Connexion de l'API à la base de données

Configurez votre client SQL ou ORM (Prisma, TypeORM, Drizzle, Sequelize) dans votre backend de production : gestion de la reconnexion automatique, cycle de vie et exécution des migrations de schéma.

🔌
Client ORM Résilient

Abstraction sécurisée neutralisant les injections SQL et gérant les modèles.

🔄
Reconnexion Automatique

Gestion des micro-coupures réseau sans faire crasher l'application Node.

🛑
Arrêt Propre (Graceful)

Fermeture propre du pool de connexions lors de l'arrêt du serveur PM2.

📋
Migrations Automatisées

Exécution des scripts de migration (prisma migrate deploy) lors du déploiement.

database-client.ts
import { PrismaClient } from '@prisma/client';

// 1. Instanciation du client Prisma de production
export const prisma = new PrismaClient({
  log: process.env.NODE_ENV === 'production' ? ['error', 'warn'] : ['query', 'error']
});

// 2. Fonction de vérification de connectivité au démarrage
export async function assertDatabaseConnection() {
  try {
    await prisma.$connect();
    console.log('✅ Connexion à la base de données établie avec succès.');
  } catch (error: any) {
    console.error('❌ Échec critique de connexion à la base de données:', error.message);
    process.exit(1); // Arrêt immédiat si la base est inaccessible
  }
}

// 3. Fermeture propre des connexions lors d'un arrêt de PM2
process.on('SIGTERM', async () => {
  console.log('Fermeture des connexions SQL avant arrêt...');
  await prisma.$disconnect();
  process.exit(0);
});

Guide Approfondi & Architecture Système

1. La Commande 'migrate deploy' vs 'migrate dev'

Si vous utilisez un ORM moderne comme Prisma :
  • npx prisma migrate dev : À utiliser uniquement en développement sur votre ordinateur. Elle crée de nouvelles migrations et peut réinitialiser la base.
  • npx prisma migrate deploy : La seule commande autorisée en production ! Elle applique strictement les migrations en attente sans jamais supprimer les données existantes.

2. Le Piège des Fuites de Connexions (Connection Leaks)

Si vous ouvrez manuellement une connexion SQL sans passer par un pool ou sans la refermer dans un bloc finally, votre serveur finira par afficher Error: Connection pool exhausted au bout de quelques heures de trafic. Privilégiez toujours un ORM ou un pool géré globalement comme singleton.

Tableau Comparatif : Stratégies de Migration en Production

ApprocheAvantagesRisques / Inconvénients
Automatisée dans le script deploy.shZéro oubli humain, tout est à jour dès le redémarrageSi la migration échoue, le déploiement est bloqué
Manuelle en ligne de commandeContrôle visuel total avant de relancer l'APIRisque d'erreur humaine ou d'oubli lors d'un déploiement urgent
Via pipeline CI/CD (GitHub Actions)Audit traçable dans les logs de la plateformeNécessite d'autoriser l'IP de GitHub dans le pare-feu de la base