Pourquoi Deployer Flask sur Heroku ?
Deployer Flask sur Heroku est une pratique très populaire pour les développeurs web. Heroku offre un environnement cloud prêt à l'emploi, qui permet aux développeurs d'héberger et de déployer des applications web rapidement et facilement. Aujourd'hui, avec la croissance exponentielle du développement web et le besoin d'accessibilité globale pour les applications, deployer sur Heroku peut être une solution idéale.
Un cas d'utilisation concret serait d'avoir un blog personnel. Avec Flask et Heroku, vous pouvez créer rapidement et facilement un blog personnalisé qui est accessible à partir de n'importe quel endroit dans le monde. De plus, la mise à jour automatique des déploiements sur Heroku vous permet de vous concentrer davantage sur l'amélioration continue de votre application plutôt que sur le processus de déploiement complexe.
Prerequis
Pour suivre ce tutoriel, vous aurez besoin des éléments suivants :
- Un compte Heroku : Vous pouvez créer un compte gratuit à Heroku.
- Python 3.8 ou supérieur : Assurez-vous que Python est installé sur votre système et que la version est supérieure à 3.8.
- Flask : Installer Flask avec pip :
pip install Flask - Git : Utilisé pour le contrôle de version et les déploiements. Vous pouvez télécharger Git depuis ici.
- Heroku CLI : Installez-le en suivant les instructions sur la page officielle Heroku.
Concepts fondamentaux
1. Application Flask
Un application Flask est une instance de l'objet Flask. C'est le point d'entrée principal de votre application.
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello, World!'
2. Environnement virtuel
Pour éviter les conflits entre les dépendances des différents projets, il est recommandé d'utiliser un environnement virtuel.
python -m venv venv
source venv/bin/activate # Sous Windows : venv\Scripts\activate
3. Requirements.txt
Le fichier requirements.txt liste toutes les dépendances de votre application.
Flask==2.1.0
gunicorn==20.1.0
4. Procfile
Le Procfile indique à Heroku comment démarrer votre application.
web: gunicorn app:app
Mise en pratique : projet fil rouge - Gestionnaire de tâches
Nous allons créer un simple gestionnaire de tâches avec Flask. Voici les étapes pour construire cette application :
1. Création du projet et des fichiers
Créez un nouveau répertoire et initialisez un environnement virtuel.
mkdir task_manager
cd task_manager
python -m venv venv
source venv/bin/activate # Sous Windows : venv\Scripts\activate
Créer les fichiers suivants :
app.pyrequirements.txtProcfile.gitignore
2. Configuration de l'application Flask
app.py
from flask import Flask, request, render_template_string
app = Flask(__name__)
tasks = []
@app.route('/')
def index():
return render_template_string('''
<h1>Gestionnaire de Tâches</h1>
<ul>
{% for task in tasks %}
<li>task</li>
{% endfor %}
</ul>
<form method="post" action="/add">
<input type="text" name="task" placeholder="Ajouter une tâche">
<button type="submit">Ajouter</button>
</form>
''', tasks=tasks)
@app.route('/add', methods=['POST'])
def add_task():
task = request.form['task']
tasks.append(task)
return redirect(url_for('index'))
if __name__ == '__main__':
app.run(debug=True)
3. Ajout des dépendances
requirements.txt
Flask==2.1.0
gunicorn==20.1.0
4. Définition du Procfile
Procfile
web: gunicorn app:app
5. Configuration de .gitignore
.gitignore
venv/
__pycache__/
*.log
.env
6. Initialisation et commit du projet
Initialisez le dépôt Git, ajoutez les fichiers et faites un commit initial.
git init
git add .
git commit -m "Initial commit"
7. Déploiement sur Heroku
Connectez-vous à votre compte Heroku via la CLI.
heroku loginCréez un nouveau projet Heroku.
heroku createMettez à jour les fichiers
runtime.txtetGunicornpour spécifier la version de Python.runtime.txtpython-3.8.10gunicorndansProcfile
Déployez le projet sur Heroku.
git push heroku master
8. Accès à l'application
Une fois le déploiement terminé, accédez à votre application via le lien fourni par Heroku.
Erreurs frequentes et debugging
1. ModuleNotFoundError: No module named 'gunicorn'
Code incorrect :
gunicorn app:app
Code correct :
gunicorn app:app --bind 0.0.0.0:$PORT
Heroku nécessite que vous spécifiiez l'adresse IP et le port via les variables d'environnement.
2. AttributeError: 'NoneType' object has no attribute 'text'
Code incorrect :
@app.route('/')
def index():
return render_template_string('Hello, World!')
Code correct :
from flask import Flask, render_template_string
app = Flask(__name__)
tasks = []
@app.route('/')
def index():
return render_template_string('''
<h1>Gestionnaire de Tâches</h1>
<ul>
{% for task in tasks %}
<li>task</li>
{% endfor %}
</ul>
<form method="post" action="/add">
<input type="text" name="task" placeholder="Ajouter une tâche">
<button type="submit">Ajouter</button>
</form>
''', tasks=tasks)
@app.route('/add', methods=['POST'])
def add_task():
task = request.form['task']
tasks.append(task)
return redirect(url_for('index'))
3. ModuleNotFoundError: No module named 'flask'
Code incorrect :
pip install Flask
Code correct :
pip install -r requirements.txt
Assurez-vous que toutes les dépendances sont listées dans requirements.txt.
Pour aller plus loin
1. Utilisation de la base de données
Vous pouvez utiliser des bases de données comme PostgreSQL pour stocker vos tâches persistamment.
2. Authentification et sécurité
Ajoutez une authentification simple pour sécuriser votre gestionnaire de tâches.
3. Déploiement continu
Utilisez des outils comme GitHub Actions ou GitLab CI pour automatiser le déploiement continu sur Heroku.
Défi pratique
Créez un petit projet Flask qui permet d'afficher une liste de livres avec leurs auteurs et une fonctionnalité pour ajouter de nouveaux livres. Utilisez des sessions pour gérer la connexion utilisateur.