Pourquoi Déployer NestJS sur Firebase ?
Déployer une application NestJS sur Firebase peut offrir plusieurs avantages. Dans un monde où les applications web et mobiles sont de plus en plus complexes, avoir une plateforme qui permet une déclaration rapide et facile d'infrastructure est précieux. Firebase fournit des outils robustes pour le déploiement, l'hébergement, et la gestion de données en temps réel. Pour un développeur, cela signifie pouvoir se concentrer davantage sur le développement du logiciel plutôt que sur la configuration technique.
Un cas d'usage concret est une application de gestion des tâches personnelles. Vous voulez permettre aux utilisateurs de créer, mettre à jour et supprimer leurs tâches à tout moment. Avec Firebase, vous pouvez facilement déployer cette application en quelques minutes, sans avoir besoin de gérer un serveur ou de configurer une base de données.
Prerequis
- NestJS : Votre application NestJS doit être prête pour le déploiement. Assurez-vous qu'elle est bien testée et fonctionnelle.
- Node.js (v14.x ou supérieur)
- Firebase CLI (firebase-tools)
npm install -g firebase-tools - NPM/Yarn : Pour installer les dépendances de votre projet NestJS
Concepts fondamentaux
1. Firebase Hosting
Firebase Hosting offre un hébergement web statique simple et rapide. Tous vos fichiers seront stockés dans le cloud, et ils seront accessibles via Internet.
// Dans firebase.json, configurez les routes pour votre application NestJS
{
"hosting": {
"public": ".",
"ignore": [
"**/.*",
"**/.git"
],
"rewrites": [{
"source": "**",
"destination": "/index.html"
}]
}
}
2. Firebase Functions
Firebase Functions vous permet de créer des fonctions déclenchées par diverses actions, comme les requêtes HTTP ou les événements de base de données.
// src/main.ts
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
async function bootstrap() {
const app = await NestFactory.create(AppModule);
await app.listen(3000);
}
bootstrap();
3. Firebase Firestore
Firebase Firestore est une base de données NoSQL basée sur le document qui offre des fonctionnalités de base de données en temps réel.
// src/tasks/tasks.service.ts
import { Injectable } from '@nestjs/common';
import * as admin from 'firebase-admin';
@Injectable()
export class TasksService {
constructor() {
if (!admin.apps.length) {
admin.initializeApp();
}
this.firestore = admin.firestore();
}
private firestore: FirebaseFirestore.Firestore;
async create(task: any): Promise<any> {
const taskRef = this.firestore.collection('tasks').doc();
await taskRef.set(task);
return { id: taskRef.id, ...task };
}
async findAll(): Promise<any[]> {
const querySnapshot = await this.firestore.collection('tasks').get();
return querySnapshot.docs.map(doc => doc.data());
}
}
Mise en pratique : projet fil rouge
Étape 1 : Créer un nouveau projet Firebase
Connectez-vous à Firebase et créez un nouveau projet. Suivez les instructions pour activer Firestore.
Étape 2 : Initialiser le projet NestJS
Créer un nouveau projet NestJS et installez firebase-admin :
nest new task-manager
cd task-manager
npm install firebase-admin --save
Étape 3 : Configurer Firebase Hosting
Ajoutez les fichiers de configuration Firebase à votre projet :
firebase init hosting
Sélectionnez public et choisissez le répertoire racine de votre application NestJS.
Étape 4 : Créer un service pour Firestore
Créez un service pour gérer les tâches dans Firestore. Voici un exemple complet :
// src/tasks/tasks.service.ts
import { Injectable } from '@nestjs/common';
import * as admin from 'firebase-admin';
@Injectable()
export class TasksService {
constructor() {
if (!admin.apps.length) {
admin.initializeApp();
}
this.firestore = admin.firestore();
}
private firestore: FirebaseFirestore.Firestore;
async create(task: any): Promise<any> {
const taskRef = this.firestore.collection('tasks').doc();
await taskRef.set(task);
return { id: taskRef.id, ...task };
}
async findAll(): Promise<any[]> {
const querySnapshot = await this.firestore.collection('tasks').get();
return querySnapshot.docs.map(doc => doc.data());
}
}
Étape 5 : Configurer les routes pour Firebase Hosting
Dans firebase.json, configurez les routes pour votre application NestJS :
{
"hosting": {
"public": ".",
"ignore": [
"**/.*",
"**/.git"
],
"rewrites": [{
"source": "**",
"destination": "/index.html"
}]
}
}
Étape 6 : Déployer votre application
Déployez votre application sur Firebase Hosting :
firebase deploy
Erreurs fréquentes et debugging
1. Erreur : Error: Could not load firebase-admin module
code_incorrect = import * as admin from 'firebase-admin';
// ✅ Correct
import * as admin from 'firebase-admin';
2. Erreur : Error: Failed to initialize Firebase app
// ❌ Mauvais
if (!admin.apps.length) {
admin.initializeApp();
}
// ✅ Correct
if (!admin.apps.length) {
admin.initializeApp({
credential: admin.credential.applicationDefault()
});
}
3. Erreur : Error: No such file or directory: 'firebase.json'
// ❌ Mauvais
firebase init hosting
// ✅ Correct
firebase init
// Sélectionnez "Hosting" lors de la configuration
Pour aller plus loin
- Firebase Realtime Database : Découvrez comment utiliser Firebase Realtime Database pour stocker et synchroniser des données en temps réel.
- Cloud Functions for Firebase : Apprenez à créer et déployer des fonctions déclenchées par diverses actions sur Firebase.
- Authentication with Firebase Authentication : Intégrez Firebase Authentication pour gérer l'authentification de vos utilisateurs.
Défi pratique
Créez un CLI tool NestJS qui utilise Firebase Functions pour gérer une liste de contacts. Implémentez les fonctionnalités suivantes :
- Ajouter un contact
- Supprimer un contact
- Mettre à jour un contact
- Afficher tous les contacts
En utilisant ces concepts, vous serez en mesure d'approfondir votre compréhension de Firebase et de NestJS.