Pourquoi Déployer Flask sur Firebase ?
Le déploiement d'un application Flask sur Firebase permet une mise en production rapide et simple, tout en profitant de la puissance et de l'élasticité de cette plateforme. En effet, Firebase offre un ensemble complet d'outils pour le développement web, dont les services de stockage et d'hébergement qui sont idéaux pour des applications légers comme Flask. De plus, Firebase est conçu pour être performant, sécurisé et facile à utiliser.
Un cas d'utilisation concret pourrait être l'hébergement d'un site web simple, un backend API ou une application web minimaliste nécessitant une mise en production rapide.
Prerequis
- Connaissance de base de Flask (routes, templates, requêtes)
- Python 3.7+
- Firebase CLI v12+
- Node.js (pour les outils Firebase)
Concepts fondamentaux
1. Environnement de développement local
Avant de déployer sur Firebase, il est important de s'assurer que votre environnement de développement fonctionne correctement.
## app.py
from flask import Flask
app = Flask(__name__)
@app.route('/')
def home():
return "Hello, Firebase!"
2. Création d'un projet Firebase
Créez un nouveau projet Firebase via le portail web et notez l'ID du projet.
## Initialiser Firebase dans votre application
firebase init
Sélectionnez Hosting puis suivez les instructions pour connecter votre projet Firebase à votre application Flask.
3. Configuration de la base de données Firestore
Firestore est une base de données NoSQL qui fonctionne parfaitement avec Firebase et peut être utilisée pour stocker des données liées à votre application.
## app.py - Ajout d'une route pour lire/écrire dans Firestore
from flask import Flask, request, jsonify
import firebase_admin
from firebase_admin import credentials, firestore
cred = credentials.Certificate('path/to/your/serviceAccountKey.json')
firebase_admin.initialize_app(cred)
db = firestore.client()
@app.route('/tasks', methods=['POST'])
def add_task():
task = request.get_json()
doc_ref = db.collection(u'tasks').document().set(task)
return jsonify({"message": "Task added", "id": doc_ref.id}), 201
@app.route('/tasks', methods=['GET'])
def get_tasks():
tasks = []
for doc in db.collection(u'tasks').stream():
tasks.append(doc.to_dict())
return jsonify(tasks), 200
4. Déploiement sur Firebase Hosting
Une fois votre application Flask configurée, vous pouvez déployer facilement sur Firebase Hosting.
## Installer les dépendances de Firebase
npm install -g firebase-tools
## Initialiser Firebase CLI
firebase login
## Configurer Firebase Hosting
firebase init hosting --public dist
## Déployer l'application
firebase deploy --only hosting
Mise en pratique : Projet fil rouge
Étape 1 : Création du projet Flask
## app.py - Mini-projet de gestionnaire de tâches
from flask import Flask, request, jsonify
import firebase_admin
from firebase_admin import credentials, firestore
cred = credentials.Certificate('path/to/your/serviceAccountKey.json')
firebase_admin.initialize_app(cred)
db = firestore.client()
app = Flask(__name__)
@app.route('/tasks', methods=['POST'])
def add_task():
task = request.get_json()
doc_ref = db.collection(u'tasks').document().set(task)
return jsonify({"message": "Task added", "id": doc_ref.id}), 201
@app.route('/tasks/<task_id>', methods=['GET'])
def get_task(task_id):
task = db.collection(u'tasks').document(task_id).get()
if task.exists:
return jsonify(task.to_dict()), 200
else:
return jsonify({"message": "Task not found"}), 404
@app.route('/tasks/<task_id>', methods=['PUT'])
def update_task(task_id):
task = request.get_json()
db.collection(u'tasks').document(task_id).update(task)
return jsonify({"message": "Task updated"}), 200
@app.route('/tasks/<task_id>', methods=['DELETE'])
def delete_task(task_id):
db.collection(u'tasks').document(task_id).delete()
return jsonify({"message": "Task deleted"}), 200
Étape 2 : Configuration de Firebase Hosting
## Initialiser Firebase CLI
firebase login
## Configurer Firebase Hosting
firebase init hosting --public dist
## Déployer l'application
firebase deploy --only hosting
Erreurs fréquentes et debugging
Erreur 1 : ModuleNotFoundError: No module named 'flask'
Si vous rencontrez cette erreur, assurez-vous que Flask est correctement installé dans votre environnement virtuel.
## Installer Flask
pip install flask
Erreur 2 : Error: Your project does not have a valid service account file.
Cette erreur se produit si Firebase n'a pas accès à vos données de compte d'utilisateur. Assurez-vous que vous avez configuré correctement le fichier de clé JSON pour Firebase.
## Vérifier les fichiers de configuration Firebase
firebase projects:list
Erreur 3 : Error: No such file or directory: 'dist'
Cette erreur se produit si Firebase ne trouve pas la répertoire spécifié pour l'hébergement. Assurez-vous que vous avez configuré correctement le chemin dans le fichier de configuration Firebase.
## Configurer Firebase Hosting
firebase init hosting --public dist
Pour aller plus loin
- Intégration avec Firestore : Apprenez à utiliser Firestore pour stocker et récupérer des données de manière asynchrone.
- Authentification Firebase : Ajoutez une authentification utilisateurs à votre application Flask en utilisant Firebase Authentication.
- App Engine Standard : Déployez votre application sur Google App Engine Standard, qui offre une meilleure performance pour les applications web.
Défi pratique : Créez un simple backend API de blog avec Firebase et déployez-le sur Firebase Hosting.