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.
Heroku
Le fonctionnement est relativement simple : pour chaque application, Heroku crée un dépôt Git qui lui est associé. Il suffit donc d’envoyer les sources de votre application vers ce dépôt pour qu’Heroku les interprête comme étant une nouvelle version, déploie les nouvelles fonctionnalités - sous réserve que tous les tests passent correctement - et les mettent à disposition après avoir exécuté un ou plusieurs scripts de migration. Dans un fonctionnement plutôt manuel, chaque déploiement est initié par le développeur ou par un membre de l’équipe. Dans une version plus automatisée, chacun de ces déploiements peut être placé en fin de pipeline, lorsque tous les tests unitaires et d’intégration auront été réalisés.
Au travers de la commande heroku create
, vous associez donc une nouvelle référence à votre code source, comme le montre le contenu du fichier .git/config
ci-dessous :
$ heroku create
Creating app... done, -> young-temple-86098https://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/*
Pour définir de quel type d’application il s’agit, Heroku nécessite un minimum de configuration. Celle-ci se limite aux deux fichiers suivants :
- Déclarer un fichier
Procfile
qui va simplement décrire le fichier à exécuter au travers du protocole WSGI (((WSGI))), - Déclarer un fichier
requirements.txt
, qui ira éventuellement chercher ses propres dépendances dans un sous-répertoire, avec l’option-r
.
Après ce paramétrage, il suffit de pousser les changements vers ce nouveau dépôt grâce à la commande git push heroku main
.
Puisqu’Heroku exige un fichier requirements.txt
placé à la racine du projet, et puisque nous avons précédemment proposer d’utiliser Poetry, il sera nécessaire d’inclure la commande export
afin de le fichier requirements.txt
, comme exigé par Heroku.
Prêt à vous lancer ? Commencez par créer un compte : https://signup.heroku.com/python.
Configuration du compte
- 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 login
Et créer votre application :
$ heroku createCreating app... done, -> young-temple-86098https://young-temple-86098.herokuapp.com/ | https://git.heroku.com/young-temple-86098.git
.Notre application est à présent configurée! image::deployment/heroku/app-created.png[align=“center”]
Ajoutons lui une base de données, que nous sauvegarderons à intervalle régulier :
$ heroku addons:create heroku-postgresql:hobby-devCreating heroku-postgresql:hobby-dev on -> still-thicket-66406... freeDatabase has been created and is available! This database is empty. If upgrading, you can transfer! data from another database with pg:copyCreated postgresql-clear-39693 as DATABASE_URLUse heroku addons:docs heroku-postgresql to view documentation
$ heroku pg:backups schedule --at '14:00 Europe/Brussels' DATABASE_URLScheduling automatic daily backups of postgresql-clear-39693 at 14:00Europe/Brussels... done
# Copié/collé de https://cookiecutter- django.readthedocs.io/en/latest/deployment-on-heroku.htmlheroku create --buildpack https://github.com/heroku/heroku-buildpack-pythonheroku addons:create heroku-redis:hobby-devheroku addons:create mailgun:starterheroku config:set PYTHONHASHSEED=randomheroku config:set WEB_CONCURRENCY=4heroku config:set DJANGO_DEBUG=Falseheroku config:set DJANGO_SETTINGS_MODULE=config.settings.productionheroku config:set DJANGO_SECRET_KEY="$(openssl rand -base64 64)"
# Generating a 32 character-long random string without any of the visuallysimilar 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_IDheroku config:set DJANGO_AWS_ACCESS_KEY_ID=
# Assign with AWS_SECRET_ACCESS_KEYheroku config:set DJANGO_AWS_SECRET_ACCESS_KEY=
# Assign with AWS_STORAGE_BUCKET_NAMEheroku config:set DJANGO_AWS_STORAGE_BUCKET_NAME=git push heroku mainheroku run python manage.py createsuperuserheroku run python manage.py check --deployheroku open
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+
(sans extension!), qui expliquera la commande pour le protocole WSGI.
# Procfilerelease: python3 manage.py migrateweb: gunicorn gwift.wsg
Hébergement S3
Au chapitre précédent, nous avons défini un ensemble de plusieurs variables pouvant être configurées. Leur attribuer une valeur peut être réalisé depuis la console d’administration d’Heroku :
Lors de la publication, vous devriez à présent avoir la sortie suivante, qui sera confirmée par le bucket:
remote: -----> $ python manage.py collectstatic --noinputremote: 128 static files copied, 156 post-processed
Sources complémentaires:
Conclusions
TBC