8 Platform as a Service
Les Plateform As A Service , où vous choisissez le service ou le composant dont vous avez besoin (une base de données, un service de cache, un service applicatif, …), vous lui envoyer les paramètres nécessaires et le tout démarre gentiment sans que vous ne deviez superviser l’hôte. En pratique, ce mode démarrage se conforme aux 12 facteurs dont nous avons déjà parlé plus tôt - modifier un paramètre reviendra à couper l’instance actuelle pour en déployer une nouvelle.
Dans la suite, nous prendrons Heroku, mais il existe d’autres plateformes similaires, notamment https://www.pythonanywhere.com/details/django_hosting[PythonAnywhere] ou https://fly.io/[Fly.io]. Le fonctionnement de ces différentes plateformes est généralement similaire (si pas identique…), et consiste généralement à respecter certaines conventions de configuration et à suivre certaines étapes spécifiques pour la mise à disposition.
8.1 Heroku
Heroku simplifie le déploiement d’applications en créant un dépôt Git pour chaque application. En envoyant les sources de votre application vers ce dépôt, Heroku les interprète comme une nouvelle version, déploie les nouvelles fonctionnalités et les met à disposition après avoir exécuté les scripts de migration. Les déploiements peuvent être initiés manuellement par un développeur ou automatiquement à la fin d’un pipeline de tests.
Auparavant, Heroku proposait des projets de type “hobby”, gratuits, sous certaines contraintes. Ces contraintes étaient faciles à respecter pour des applications simples ou des MVP (Most Valuable Product). Cependant, ces instances gratuites ont été supprimées, et il est désormais nécessaire de passer à un tiers payant pour utiliser Heroku.
Pour associer une nouvelle référence à votre code source, utilisez la commande heroku create :
$ heroku create
Creating app... done, -> young-temple-86098
https://young-temple-86098.herokuapp.com/ | https://git.heroku.com/young-
temple-86098.git
$ cat .git/config
[core]
repositoryformatversion = 0
filemode = false
bare = false
logallrefupdates = true
symlinks = false
ignorecase = true
[remote "heroku"]
url = https://git.heroku.com/still-thicket-66406.git
fetch = +refs/heads/*:refs/remotes/heroku/*8.1.1 Configuration de l’application
Heroku nécessite une configuration minimale pour comprendre le type d’application à démarrer :
- Fichier Procfile : Décrit la commande à exécuter via le protocole WSGI.
- Fichier requirements.txt : Liste les dépendances du projet, éventuellement en faisant appel à un autre fichier avec l’option -r.
release: python3 manage.py migrate
web: gunicorn gwift.wsgiPour déployer votre application, utilisez la commande git push heroku main.
8.1.2 Configuration du compte
Prêt à vous lancer ? Commencez par créer un compte : https://signup.heroku.com/python.
- Récupération des valeurs d’environnement pour les réutiliser ci-dessous.
Vous aurez peut-être besoin d’un coup de pouce pour démarrer votre première application; heureusement, la documentation est super bien faite :
.Heroku: Commencer à travailler avec un langage
Installez ensuite la CLI (Command Line Interface) en suivant https://devcenter.heroku.com/articles/heroku-cli[la documentation suivante].
Au besoin, cette CLI existe pour :
. macOS, via ’brew ‘ . Windows, grâce à un https://cli-assets.heroku.com/heroku-x64.exe[binaire x64], . GNU/Linux, via un script Shell curl https://cli-assets.heroku.com/install.sh sh+ ou sur https://snapcraft.io/heroku[SnapCraft].
Une fois installée, connectez-vous :
$ heroku loginEt créer votre application :
$ heroku create
Creating app... done, -> young-temple-86098
https://young-temple-86098.herokuapp.com/ | https://git.heroku.com/young-temple-86098.git
.Notre application est à présent configurée!
Ajoutons lui une base de données, que nous sauvegarderons à intervalle régulier :
$ heroku addons:create heroku-postgresql:hobby-dev
Creating heroku-postgresql:hobby-dev on -> still-thicket-66406... free
Database has been created and is available
! This database is empty. If upgrading, you can transfer
! data from another database with pg:copy
Created postgresql-clear-39693 as DATABASE_URL
Use heroku addons:docs heroku-postgresql to view documentation
$ heroku pg:backups schedule --at '14:00 Europe/Brussels' DATABASE_URL
Scheduling automatic daily backups of postgresql-clear-39693 at 14:00
Europe/Brussels... done# Copié/collé de https://cookiecutter- django.readthedocs.io/en/latest/deployment-on-heroku.html
heroku create --buildpack https://github.com/heroku/heroku-buildpack-python
heroku addons:create heroku-redis:hobby-dev
heroku addons:create mailgun:starter
heroku config:set PYTHONHASHSEED=random
heroku config:set WEB_CONCURRENCY=4
heroku config:set DJANGO_DEBUG=False
heroku config:set DJANGO_SETTINGS_MODULE=config.settings.production
heroku config:set DJANGO_SECRET_KEY="$(openssl rand -base64 64)"
# Generating a 32 character-long random string without any of the visually
similar characters "IOl01":
heroku config:set DJANGO_ADMIN_URL="$(openssl rand -base64 4096 | tr -dc 'A-
HJ-NP-Za-km-z2-9' | head -c 32)/"
# Set this to your Heroku app url, e.g. 'bionic-beaver-28392.herokuapp.com'
heroku config:set DJANGO_ALLOWED_HOSTS=
# Assign with AWS_ACCESS_KEY_ID
heroku config:set DJANGO_AWS_ACCESS_KEY_ID=
# Assign with AWS_SECRET_ACCESS_KEY
heroku config:set DJANGO_AWS_SECRET_ACCESS_KEY=
# Assign with AWS_STORAGE_BUCKET_NAME
heroku config:set DJANGO_AWS_STORAGE_BUCKET_NAME=
git push heroku main
heroku run python manage.py createsuperuser
heroku run python manage.py check --deploy
heroku open8.1.3 Types d’application
Pour qu’Heroku comprenne le type d’application à démarrer, ainsi que les commandes à exécuter pour que tout fonctionne correctement. Pour un projet Django, cela comprend, à placer à la racine de votre projet :
- Un fichier
+requirements.txt+(qui peut éventuellement faire appel à un autre fichier, via l’argument+-r+) . Un fichier+Procfile+(https://devcenter.heroku.com/articles/procfile[sans extension]!), qui expliquera la commande pour le protocole WSGI.
# Procfile
release: python3 manage.py migrate
web: gunicorn gwift.wsg8.1.4 Hébergement S3
Pour configurer l’hébergement S3, définissez les variables d’environnement nécessaires depuis la console d’administration d’Heroku.

Lors du déploiement, vous devriez voir une sortie confirmant la copie des fichiers statiques :
remote: -----> $ python manage.py collectstatic --noinput
remote: 128 static files copied, 156 post-processed
8.2 Conclusion
Le déploiement d’une application Django sur Heroku est simplifié grâce à l’intégration avec Git et la configuration minimale requise. En suivant les étapes décrites, vous pouvez facilement déployer et gérer votre application sur Heroku.