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.
Abstraction sécurisée neutralisant les injections SQL et gérant les modèles.
Gestion des micro-coupures réseau sans faire crasher l'application Node.
Fermeture propre du pool de connexions lors de l'arrêt du serveur PM2.
Exécution des scripts de migration (prisma migrate deploy) lors du déploiement.
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);
});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.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. | Approche | Avantages | Risques / Inconvénients |
|---|---|---|
| Automatisée dans le script deploy.sh | Zéro oubli humain, tout est à jour dès le redémarrage | Si la migration échoue, le déploiement est bloqué |
| Manuelle en ligne de commande | Contrôle visuel total avant de relancer l'API | Risque 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 plateforme | Nécessite d'autoriser l'IP de GitHub dans le pare-feu de la base |