Comment déployer une application sur Heroku ?
Ce tutoriel couvre le processus de déploiement d’une application basée sur Python sur Heroku. En lisant cet article, vous comprendrez les fonctionnalités de base d’Heroku, le processus de déploiement d’une application sur Heroku et comment déployer une application sur Heroku.
En outre, il fournit des instructions sur le déploiement de la même application sur Back4app Containers – une excellente alternative gratuite à Heroku.
Contents
- 1 Objectifs
- 2 Qu’est-ce que Heroku ?
- 3 Configuration du projet
- 4 Comment déployer une application sur Heroku ?
- 5 Comment déployer une application dans les conteneurs Back4app ?
- 6 Conclusion
- 7 FAQ
- 8 Qu’est-ce que Heroku ?
- 9 Comment déployer une application sur Heroku ?
- 10 Qu’est-ce que Back4app Containers ?
- 11 Comment déployer une application sur Back4app Containers ?
Objectifs
À la fin de ce tutoriel, vous serez en mesure de :
- Comprendre Heroku et ses fonctionnalités
- Déployez vos applications sur Heroku
- Comprendre les conteneurs Back4app et leurs fonctionnalités
- Déployez vos applications dans les conteneurs Back4app
- Déterminer le service à utiliser pour votre application
Qu’est-ce que Heroku ?
Heroku, créé en 2007, est l’une des plateformes PaaS (Platform as a Service) les plus fiables. Cette plateforme en nuage vous permet de créer, de gérer, de déployer et de mettre à l’échelle des applications en toute simplicité.
Il prend nativement en charge Ruby, Python, Java, Clojure, Node, Scala, Go et PHP. Néanmoins, il vous permet de déployer d’autres langages de programmation et frameworks via Docker.
Les principaux avantages d’Heroku sont la facilité d’utilisation, les capacités de mise à l’échelle, les fonctions de sécurité, les modules complémentaires, l’interface de programmation Heroku et le fait d’être centré sur les développeurs.
D’autre part, Heroku est souvent critiqué pour son coût élevé, son support régional inadéquat et son retard par rapport aux dernières tendances en matière de développement.
L’une des principales raisons pour lesquelles Heroku est aussi populaire est qu’il a offert des services gratuits dans le passé. Jusqu’en novembre 2022, vous pouviez utiliser Heroku pour héberger vos applications et même vos bases de données tout à fait gratuitement.
Ils ont malheureusement décidé d’annuler ces services gratuits afin de lutter contre la fraude et l’abus du niveau gratuit. Malgré les changements récents, Heroku reste l’une des plateformes d’hébergement les plus populaires. Continuez à lire pour apprendre comment déployer sur Heroku.
Pour en savoir plus sur Heroku, consultez notre autre article intitulé Qu’est-ce que Heroku ?
Configuration du projet
Pour démontrer comment déployer des applications sur Heroku et Back4app Containers, j’ai préparé une simple application web pour vous montrer comment déployer une application Python sur Heroku. L’application web utilise le framework FastAPI et sert de simple service de raccourcissement d’URL. Elle est livrée avec deux points d’extrémité :
/shorten
assigne unalias
à unlong_url
/
redirige l’utilisateur vers lelong_url
correspondant
N’hésitez pas à tester votre compréhension en suivant votre propre projet.
Conditions préalables
- Compréhension de base de Python et de Git
- Python 3.9+ installé sur votre machine locale
- Git Bash et Docker Desktop installés et configurés
- Un compte GitHub personnel
Cloner et exécuter
Le déploiement d’Heroku commence par le forkage de ce dépôt sur GitHub, puis le clonage du fork sur votre machine locale :
$ git clone <fork_remote_git_url>
$ cd back4app-heroku-deploy
Si vous ne souhaitez pas faire de fork, vous pouvez créer votre propre dépôt et y déposer le code source.
Créer un environnement virtuel et l’activer :
$ python -m venv env && source env/bin/activate
Ensuite, installez les exigences du projet :
(env)$ pip install -r requirements.txt
Enfin, démarrez le serveur de développement :
(env)$ python -m uvicorn main:app --reload
INFO: Will watch for changes in these directories: [...]
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO: Started reloader process [1488] using WatchFiles
INFO: Started server process [2316]
INFO: Application startup complete.
Ouvrez votre navigateur web préféré et accédez à http://localhost:8000/docs. Utilisez la documentation interactive pour tester l’application web. Si vous avez besoin d’aide pour formater les demandes, consultez le fichier test_main.http.
Comment déployer une application sur Heroku ?
Dans cette section, nous allons déployer une application sur Heroku.
Les étapes suivantes nécessitent un compte Heroku. Si vous n’en avez pas encore, inscrivez-vous. De plus, assurez-vous d’ajouter les informations de paiement à votre compte Heroku.
Si vous supprimez votre application juste après le tutoriel, rien ne vous sera facturé.
Passer à une nouvelle branche appelée heroku
:
$ git checkout -b heroku
Objectifs
- Installer le CLI Heroku.
- Créer une application Heroku.
- Spécifiez la durée d’exécution via runtime.txt.
- Spécifiez les processus de l’application via Procfile.
- Pousser le code source vers Heroku.
CLI Heroku
Il existe plusieurs façons d’interagir avec Heroku. Vous pouvez utiliser le tableau de bord, l’interface de programmation Heroku ou l’API Heroku.
Je préfère Heroku CLI car c’est un outil puissant qui vous permet de travailler rapidement. Nous l’utiliserons tout au long de ce tutoriel.
Tout d’abord, installez Heroku CLI en suivant les instructions d’installation officielles.
Ensuite, assurez-vous que l’installation a réussi en vérifiant la version du CLI :
$ heroku --version
heroku/8.4.2 win32-x64 node-v16.19.0
Ensuite, vérifiez les mises à jour du CLI et authentifiez-vous à l’aide de votre compte Heroku :
$ heroku update
$ heroku login
Lorsque vous exécutez la deuxième commande, une fenêtre de navigateur s’ouvre. Pour vous authentifier, cliquez sur “Se connecter” et fermez la fenêtre du navigateur.
Créer une application Heroku
Pour déployer sur Heroku, vous devez d’abord créer une application Heroku.
Ouvrez à nouveau le terminal, naviguez jusqu’à votre projet local (par exemple, le dossier back4app-heroku-deploy ), et exécutez la commande suivante :
$ heroku create -a <app_name>
Creating ⬢ <app_name>... !
https://<app_name>-31a6fd70e769.herokuapp.com/ |
https://git.heroku.com/<app_name>.git
Veillez à remplacer <app_name> par le nom de l’application souhaitée.
Ensuite, vérifiez si l’application a été créée avec succès en dressant la liste des applications :
$ heroku apps
=== <email_address> Apps
<app_name>
Vérifiez ensuite les détails de l’application :
$ heroku apps:info <app_name>
=== <app_name>
Auto Cert Mgmt: false
Dynos:
Git URL: https://git.heroku.com/<app_name>.git
Owner: <email_address>
Region: us
Repo Size: 0 B
Slug Size: 0 B
Stack: heroku-22
Web URL: https://<app_name>-21de155883d3.herokuapp.com/
Comme vous le savez peut-être, Heroku est étroitement intégré à Git. Lorsque vous créez une application Heroku, un dépôt Git distant est créé vers lequel vous pouvez pousser votre code source pour le déployer. Dans notre cas, l’URL Git distante est :
https://git.heroku.com/<app_name>.git
Heroku CLI enregistre automatiquement un remote Git lorsque vous créez une application. Essayez de lister les serveurs distants :
$ git remote -v
heroku https://git.heroku.com/back4app-url-shortener.git (fetch)
heroku https://git.heroku.com/back4app-url-shortener.git (push)
origin [email protected]:duplxey/back4app-heroku-deploy.git (fetch)
origin [email protected]:duplxey/back4app-heroku-deploy.git (push)
Nous utiliserons la télécommande heroku
dans la section suivante pour déployer notre code source.
runtime.txt
Un fichier runtime.txt vous permet de spécifier la version exacte de Python que vous voulez qu’Heroku utilise. Ceci est important si votre projet nécessite une version spécifique de Python pour fonctionner. Au moment de la rédaction de ce document, la version par défaut est python-3.11.5
.
Pour spécifier la durée d’exécution, créez un fichier runtime.txt contenant la version de la durée d’exécution. Exemple :
python-3.11.5
Pour obtenir la liste des moteurs d’exécution Python pris en charge, consultez le site Heroku Python Support.
Procfile
Un Procfile vous permet de définir les commandes qui doivent être exécutées pour démarrer les processus de l’application. Nous utiliserons un Procfile pour démarrer le serveur web Uvicorn.
Créez un fichier Procfile à la racine du projet avec le processus web
:
web: gunicorn -w 1 -k uvicorn.workers.UvicornWorker main:app
Avec les applications de production, vous voudrez probablement créer plusieurs workers au lieu d’un seul. Puisqu’une base de données ne supporte pas notre application (elle utilise des données en mémoire), nous ne pouvons pas synchroniser les données entre plusieurs processus workers. C’est pourquoi nous devons utiliser un seul worker.
Transférez les modifications dans votre dépôt GitHub :
$ git add .
$ git commit -m "configured app for heroku"
$ git push origin heroku
Déployer une application Heroku
Heroku utilise ce que l’on appelle des buildpacks pour transformer les applications en unités qui peuvent être exécutées sur des dynos. Un buildpack est simplement un ensemble de scripts spécialisés pour un langage de programmation spécifique.
Lorsque vous envoyez votre code à Heroku, Heroku détecte automatiquement le langage de programmation de votre projet et le buildpack requis pour le construire. Dans le cas de Python, il vérifie si un fichier requirements.txt est présent.
Pour déployer votre application, tout ce que vous avez à faire est de pousser le code vers la télécommande heroku
:
$ git push heroku heroku:main
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 8 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 318 bytes | 318.00 KiB/s, done.
Total 3 (delta 2), reused 0 (delta 0), pack-reused 0
remote: Updated five paths from 30a4ffb
remote: Compressing source files... done.
remote: Building source:
remote:
remote: -----> Building on the Heroku-22 stack
remote: -----> Using buildpack: heroku/python
remote: -----> Python app detected
remote: -----> Requirements file has been changed, clearing cached dependencies
remote: -----> Installing python-3.11.5
remote: -----> Installing pip 23.2.1, setuptools 68.0.0 and wheel 0.41.0
remote: -----> Installing SQLite3
remote: -----> Installing requirements with pip
remote: -----> Discovering process types
remote: Procfile declares types -> web
remote:
remote: -----> Compressing...
remote: Done: 30.6M
remote: -----> Launching...
remote: Released v5
remote: https://<app_name>-31a6fd70e769.herokuapp.com/ deployed to Heroku
remote:
remote: Verifying deploy... done.
Heroku a automatiquement sélectionné un script de construction approprié, installé les exigences et déployé l’application sur un banc d’essai.
Si votre déploiement a échoué, utilisez le CLI Heroku pour consulter les journaux :
$ heroku logs --tail
Ensuite, vérifiez l’état de votre application :
$ heroku apps:info <app_name>
=== <app_name>
Auto Cert Mgmt: false
Dynos: web: 1
Git URL: https://git.heroku.com/<app_name>.git
Owner: <your_email>
Region: us
Repo Size: 9 KB
Slug Size: 31 MB
Stack: heroku-22
Web URL: https://<app_name>-31a6fd70e769.herokuapp.com/
Essayez de visiter votre application dans le navigateur en naviguant vers l'”URL Web”.
C’est tout pour la partie Heroku. La section suivante traite du déploiement de la même application sur les conteneurs Back4app.
Comment déployer une application dans les conteneurs Back4app ?
Dans cette section, nous allons déployer une application dans les conteneurs Back4app.
Qu’est-ce que Back4app Containers ?
Back4app Containers est une excellente plateforme de conteneurs en tant que service (CaaS). Elle vous permet de déployer, de gérer et de mettre à l’échelle des applications sur des conteneurs distribués à l’échelle mondiale.
La plateforme est étroitement intégrée à GitHub et fournit un système CI/CD intégré. Parmi ses autres fonctionnalités, citons les déploiements sans interruption, l’association de domaines personnalisés, la journalisation, la surveillance et bien d’autres encore.
Mieux encore, la plateforme offre un niveau de gratuité généreux. Avec plus de 600 heures mensuelles de conteneurs gratuits, vous pouvez facilement prototyper et héberger vos projets favoris. Au fur et à mesure que votre application évolue, vous pouvez passer à des niveaux supérieurs avec des prix prévisibles.
Pour en savoir plus sur les conteneurs en tant que service, consultez la page Qu’est-ce que CaaS – Conteneurs en tant que service ?
Passer à une nouvelle branche nommée back4app
basée sur la branche master
:
$ git checkout master && git checkout -b back4app
Objectifs
- Dockeriser l’application.
- Connectez votre GitHub avec votre compte Back4app.
- Importer le dépôt GitHub souhaité.
- Déployer !
Dockerize
Pour déployer une application dans Back4app Containers, vous devez d’abord la dockeriser.
La dockérisation est le processus de construction, de déploiement et d’exécution d’applications dans des conteneurs Docker. La manière la plus simple de dockeriser une application est d’utiliser un fichier Docker.
Fichier Docker
Un fichier Docker est un script contenant des instructions pour créer une image de conteneur Docker. Vous pouvez utiliser ce fichier pour définir l’environnement, les dépendances et les autres commandes nécessaires à la création et à l’exécution d’une application.
Sa syntaxe est la suivante :
COMMAND <arg_1> <arg_2> ... <arg_n>
Créez un fichier Docker à la racine du projet avec le contenu suivant :
FROM python:3.9.6-alpine
# Set the working directory
WORKDIR /app
# Set environment variables
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1
# Copy over the requirements file and install the dependencies
COPY ./requirements.txt .
RUN pip install --no-cache-dir --upgrade -r ./requirements.txt
# Copy over the source code
COPY . .
# Expose the port
EXPOSE 80
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "80"]
Ce fichier Docker est basé sur l’image python:3.9.6-alpine
. Il définit d’abord le répertoire de travail, les variables d’environnement, puis gère les exigences. Ensuite, il copie le code source, expose le port 80
et démarre le serveur Uvicorn sur ce port.
Pour déployer d’autres langages de programmation et frameworks, n’hésitez pas à récupérer les Dockerfiles dans la documentation Back4app Containers.
Si vous avez besoin d’éclaircissements sur le fonctionnement d’une commande Dockerfile, consultez la référence Dockerfile.
.dockerignore
Nous pouvons utiliser un fichier .dockerignore pour réduire la taille de l’image Docker. Ces fichiers fonctionnent de la même manière que les fichiers .gitignore. Vous devez définir les fichiers et les répertoires que vous souhaitez exclure de l’image.
Dans notre cas, il s’agit de l’environnement virtuel, des fichiers de l’IDE et du dossier .git.
Créez un fichier .dockerignore comme suit :
.git/
.idea/
venv/
N’hésitez pas à adapter le fichier .dockerignore en fonction des besoins de votre projet.
Transférez les modifications dans votre dépôt GitHub :
$ git add .
$ git commit -m "configured app for back4app"
$ git push origin back4app
Construire, exécuter et tester
Avant d’envoyer votre code dans le nuage, il est conseillé de le tester localement.
Tout d’abord, construisez l’image et marquez-la :
$ docker build -t back4app-url-shortener:1.0 .
Ensuite, dressez la liste des images :
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
back4app-url-shortener 1.0 1cbe348a04ad 1 minute ago 68.7MB
Exécutez le conteneur en utilisant l’image qui vient d’être construite :
$ docker run -p 80:80 --name back4app-url-shortener back4app-url-shortener:1.0
Explication de l’argument :
-p 80:80
lie le port80
de la machine hôte au port80
du conteneur--name back4app-url-shortener
nomme l’instance du conteneur
Vous pouvez utiliser
-d
pour exécuter le conteneur en mode détaché (sans occuper le terminal).
Vérifier si le conteneur est en cours d’exécution :
$ docker ps
CONTAINER ID IMAGE CREATED STATUS PORTS
b3b82313ab65 back4app-url-shortener:1.0 3s ago 1s 0.0.0.0:80->80/tcp
Ouvrez votre navigateur web préféré et rendez-vous sur http://localhost/docs. Vous devriez voir le service de raccourcissement d’URL.
Déployer l’application
Les étapes suivantes nécessitent un compte Back4app. Si vous n’en avez pas encore, créez un compte gratuit. Tout ce que nous ferons dans ce tutoriel se fera dans le cadre du compte gratuit.
Lorsque vous vous connectez à votre compte Back4app, la liste des applications s’affiche. Cliquez sur “Créer une nouvelle application” pour lancer le processus de création d’application.
Back4app propose deux solutions :
- Backend as a Service (BaaS) – une solution de backend prête à l’emploi
- Conteneurs as a Service (CaaS) – une plateforme de déploiement de conteneurs alimentée par Docker
Puisque nous déployons une application Python personnalisée, nous allons opter pour CaaS. Sélectionnez “Containers as a Service” sur le côté droit de l’écran.
Il vous sera demandé de lier votre compte GitHub si c’est la première fois que vous travaillez avec Back4app. En plus de cela, assurez-vous d’importer tous les dépôts que vous souhaitez déployer.
Ensuite, sélectionnez le dépôt GitHub que vous souhaitez déployer :
Comme nous déployons une application simple, nous n’avons pas besoin de configurer beaucoup l’environnement. Tout ce que vous avez à faire est de définir :
- Nom de l’application: back4app-url-shortener (vous pouvez choisir un autre nom)
- Branche: back4app (votre branche GitHub)
Cliquez ensuite sur “Déployer”.
Back4app Containers offre de nombreuses options de configuration, y compris des déploiements automatiques, des paramètres de port, des variables d’environnement et des contrôles de santé.
Back4app Containers prendra un peu de temps pour construire et déployer votre image Docker. Une fois que votre application est prête, son statut devient “Disponible”. Pour visiter votre application, cliquez sur le lien situé sous le statut, comme indiqué dans l’image.
Bon travail ! Vous avez déployé avec succès une application web dans Back4app Containers.
Conclusion
Ce tutoriel vous a appris à déployer une application web simple sur Heroku et Back4app Containers. Les deux plateformes ont des avantages et des inconvénients que vous devez prendre en compte lors du déploiement d’une application.
En règle générale, j’opterais pour Back4app Containers pour les applications qui ne nécessitent pas de base de données. Back4app Containers vous aidera à économiser de l’argent, et son niveau gratuit est plus que suffisant pour vos projets favoris.
Heroku est préférable si votre application repose sur une base de données ou des modules complémentaires sophistiqués.
J’ai résumé certaines des principales différences entre les plates-formes dans le tableau ci-dessous :
Heroku | Conteneurs Back4app | |
---|---|---|
Modèle de nuage | Plate-forme en tant que service (PaaS) | Conteneurs en tant que service (CaaS) |
Construire et déployer | Paquets de construction | Docker |
Langues prises en charge | 9 langages de programmation | N’importe quel langage ou cadre |
HTTPS/SSL gratuit | ✔️ | ✔️ |
Domaines personnalisés | ✔️ | ✔️ |
Tiercé libre | ❌ | ✔️ |
Risque de verrouillage des fournisseurs | ✔️ | ❌ |
Gestion des bases de données | ✔️ | ❌ |
Pour les débutants | Oui (nécessite des compétences DevOps) | Oui (nécessite des compétences en matière de Docker) |
N’hésitez pas à récupérer le code source final sur le dépôt GitHub.
FAQ
Qu’est-ce que Heroku ?
Heroku, fondé en 2007, est l’une des premières plateformes Platform as a Service (PaaS). Elle permet de déployer neuf langages de programmation, dont Java, PHP, Python et Ruby. En plus de cela, elle propose des bases de données gérées, des add-ons, une journalisation avancée, de la surveillance et plus encore.
Comment déployer une application sur Heroku ?
1. Inscrivez-vous pour un compte Heroku.
2. Installez et configurez l’interface Heroku CLI.
3. Créez une application Heroku.
4. Spécifiez l’environnement d’exécution via runtime.txt.
5. Définissez les processus de l’application via Procfile.
6. Poussez votre code source vers Heroku.
Qu’est-ce que Back4app Containers ?
Containers est une excellente plateforme de type Containers as a Service (CaaS). Elle permet de déployer, gérer et faire évoluer rapidement des applications dockerisées sur des conteneurs distribués mondialement. Elle intègre un système CI/CD, prend en charge les déploiements sans interruption, les domaines personnalisés & plus encore !
Comment déployer une application sur Back4app Containers ?
1. Inscrivez-vous pour un compte Back4app gratuit.
2. Dockerisez votre application.
3. Poussez votre code source sur GitHub.
4. Connectez votre compte GitHub à votre compte Back4app.
5. Importez le dépôt souhaité & déployez !