Développement d'une application NestJS en partant de zéro

Jul 24, 2024

Développement d'une application NestJS en partant de zéro

Objectif de la formation

  • Développer une application de messagerie basique avec NestJS en backend et React/Remix en frontend.
  • Intégration d'API externes pour les fonctionnalités complexes: paiement, hébergement de fichiers, envoi d'emails et temps réel.
  • Déploiement en environnement de production avec Docker, GitHub Actions et un serveur distant.
  • Partage des erreurs et révélations de bonnes pratiques basées sur l'expérience de Good Collect.

Les bases de NestJS

Pourquoi NestJS ?

  • Structure de code définie : facilite l'organisation et les bonnes pratiques.
  • TypeScript intégré pour un typage fort.
  • Injection de dépendances : séparation claire de la logique en plusieurs fichiers.
  • Framework solide pour écrire de la logique serveur en JavaScript.
  • Comparé à ExpressJS, NestJS offre un framework plus structuré.

Installation et configuration

  • Installation de Nest CLI : npm install -g @nestjs/cli
  • Création de projet : nest new projet-name
  • Choisir NPM (plutôt que Yarn ou PNPM) pour la gestion des paquets et la compatibilité Docker.
  • Exploration du projet : dossiers controllers, modules et services dans src.
  • Fichier main.ts : point d'entrée de l'application.
  • Service : contient la logique de l'application.
  • Controller : traite les requêtes HTTP.
  • Module : regroupe des services et des contrôleurs.

Erreurs et astuces

  • Typescript : ne marche pas avec les retours implicites, utilise l'inférence de type.
  • NestJS : exige une bonne organisation pour les services et contrôleurs.
  • Séparation des modules utilisateur, authentification, envoi de mail.

Utilisation des services tiers

Prisma

  • Installation : npm install prisma --save-dev
  • Initialisation : npx prisma init
  • Configuration : Création et sauvegarde de schémas de base de données.
  • PlanetScale pour une base de données MySQL.
  • Utilisation de Prisma Studio pour visualiser et modifier les données.

Resend pour l'envoi d'emails

  • Installation : npm install resend
  • Gestion des comptes sur PlanetScale.
  • Création de méthodes pour envoyer des emails lors de la création de comptes utilisateurs.

Stripe pour les paiements

Configurer Stripe

  • Compte Stripe et clé API (production et test).
  • Créer des comptes connectés à Stripe pour chaque utilisateur.
  • Stripe Connect pour la gestion des paiements.

Webhooks Stripe

  • Écouter les événements (e.g., paiements réussis) pour mettre à jour la base de données.
  • Handle Webhook pour relier les webhooks Stripe avec l'application NestJS.

Déploiement en Production

Docker

  • Dockerfile : instructions pour construire l'application.
  • Docker Compose : configuration pour orchestrer plusieurs conteneurs Docker.
  • Variables d'environnement : définition dans Docker Compose.

GitHub Actions pour CI/CD

  • Configurer GitHub Actions pour construire et déployer avec Docker.
  • Secrets GitHub : pour stocker les variables sensibles (clés API, secrets).
  • GitHub Runner : déployer des actions GitHub sur un serveur auto-hébergé.

Configuration du serveur

  • Caddy Server : pour servir l'application et gérer les certificats SSL/TLS.

Dernières notes

  • Gestion des fichiers sur Amazon S3 pour les avatars utilisateurs.
  • Intégration Clover de l'application avec Docker, Prisma, Resend et Stripe.
  • Tests finaux et résolution des erreurs de déploiement.