Fix Heroku notes
continuous-integration/drone/push Build is failing Details

This commit is contained in:
Fred Pauchet 2022-05-13 11:26:09 +02:00
parent f901628255
commit 8ad6e92bc5
5 changed files with 41 additions and 18 deletions

View File

@ -4,7 +4,16 @@
\url{https://news.ycombinator.com/item?id=30221016\&utm_term=comment} vs
Django Rest Framework
Expliquer pourquoi une API est intéressante/primordiale/la première chose à réaliser/le cadet de nos soucis.
Expliquer pourquoi une API est intéressante/primordiale/la première chose à réaliser/le cadet de nos soucis:
\begin{itemize}
\item
Intéressante: ouverture
\item Primordiale: services
\item La première chose à réaliser: mobile-first
\item Le cadet de nos soucis: monolithique (cf. Rework)
\end{itemize}
Voir peut-être aussi
\url{https://christophergs.com/python/2021/12/04/fastapi-ultimate-tutorial/}

View File

@ -1,9 +1,7 @@
\chapter{PaaS - Heroku}
\href{https://www.heroku.com}{Heroku} est une \emph{Plateform As A Service} paas, où vous choisissez le \emph{service} dont vous avez besoin (une base de données, un service de cache, un service applicatif, \ldots, vous lui envoyer les paramètres nécessaires et le tout démarre gentiment sans que vous ne deviez superviser l'hôte.
Ce mode démarrage ressemble énormément aux 12 facteurs dont nous avons déjà parlé plus tôt - raison de plus pour que notre application soit directement prête à y être déployée, d'autant plus qu'il ne sera pas possible de modifier un fichier une fois qu'elle aura démarré : si vous souhaitez modifier un paramètre, cela reviendra à couper l'actuelle et envoyer de nouveaux paramètres et recommencer le déploiement depuis le
début.
\href{https://www.heroku.com}{Heroku} est une \emph{Plateform As A Service} \index{PaaS}, où vous choisissez le \emph{service ou le composant} dont vous avez besoin (une base de données, un service de cache, un service applicatif, \ldots, vous lui envoyer les paramètres nécessaires et le tout démarre gentiment sans que vous ne deviez superviser l'hôte. \footnote{Nous prenons ici Heroku, mais il existe d'autres plateformes similaires, notamment \href{https://www.pythonanywhere.com/details/django_hosting}{PythonAnywhere}.}
Ce mode démarrage ressemble énormément aux 12 facteurs dont nous avons déjà parlé plus tôt - raison de plus pour que notre application soit directement prête à y être déployée, d'autant plus qu'il ne sera pas possible de modifier un fichier une fois qu'elle aura démarré : si vous souhaitez modifier un paramètre, cela reviendra à couper l'actuelle et envoyer de nouveaux paramètres pour déployer une nouvelle instance.
\begin{figure}[H]
\centering
@ -16,6 +14,8 @@ début.
Pour un projet de type "hobby" et pour l'exemple de déploiement ci-dessous, il est tout à fait possible de s'en sortir sans dépenser un kopek, afin de tester nos quelques idées ou mettre rapidement un \emph{Most Valuable Product} en place.
La seule contrainte consistera à pouvoir héberger des fichiers envoyés par vos utilisateurs - ceci pourra être fait en configurant un \emph{bucket compatible S3}, par exemple chez Amazon, Scaleway ou OVH.
Par la suite, il conviendra d'investir un minimum: des bases de données sont disponibles, mais montrent rapidement leurs limites \footnote{\ldots et 10 000 enregistrements sont une limite \textbf{très} rapidement atteinte}, tandis qu'aucun mécanisme de migration n'est prévu.
Ceci signifie qu'après avoir démarré un projet en mode "hobby", il vous sera nécessaire de gérer vous-même la migration de vos données, au travers d'un mode opératoire, dans la mesure où aucun processus automatique n'existe entre instances de deux niveaux différents.
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.
@ -51,7 +51,7 @@ Au travers de la commande \texttt{heroku\ create}, vous associez donc une nouvel
* Déclarer un fichier `requirements.txt` (qui va éventuellement chercher ses propres dépendances dans un sous-répertoire, avec l'option `-r`)
\end{verbatim}
Après ce paramétrage, il suffit de pousser les changements vers ce nouveau dépôt grâce à la commande \texttt{git\ push\ heroku\ master}.
Après ce paramétrage, il suffit de pousser les changements vers ce nouveau dépôt grâce à la commande \texttt{git push heroku main}. \footnote{Puisque nous avons précedemment proposé d'utiliser Poetry, la commande \texttt{export} pourra être utilisée pour générer le fichier \texttt{requirements.txt}, comme exigé par Heroku.}
Heroku propose des espaces de déploiements, mais pas d'espace de stockage.
Il est possible d'y envoyer des fichiers utilisateurs (typiquement, des media personnalisés), mais ceux-ci seront perdus lors du redémarrage du container.
@ -149,7 +149,7 @@ régulier :
# Assign with AWS_STORAGE_BUCKET_NAME
heroku config:set DJANGO_AWS_STORAGE_BUCKET_NAME=
git push heroku master
git push heroku main
heroku run python manage.py createsuperuser
heroku run python manage.py check --deploy
heroku open
@ -166,15 +166,6 @@ Pour un projet Django, cela comprend, à placer à la racine de votre projet :
Un fichier \texttt{Procfile} ({[}sans extension{]}(\url{https://devcenter.heroku.com/articles/procfile)}!), qui expliquera la commande pour le protocole WSGI.
\end{enumerate}
Dans notre exemple :
\begin{verbatim}
# requirements.txt
django==3.2.8
gunicorn
boto3
django-storages
\end{verbatim}
\begin{verbatim}
# Procfile
release: python3 manage.py migrate
@ -183,6 +174,14 @@ Dans notre exemple :
\section{Hébergement S3}
\begin{verbatim}
# requirements.txt
django==3.2.8
gunicorn
boto3
django-storages
\end{verbatim}
Pour cette partie, nous allons nous baser sur l'\href{https://www.scaleway.com/en/object-storage/}{Object Storage de Scaleway}.
Ils offrent 75GB de stockage et de transfert par mois, ce qui va nous laisser suffisament d'espace pour jouer un peu.
@ -236,6 +235,8 @@ Selon la documentation de \href{https://django-storages.readthedocs.io/en/latest
}
\end{minted}
Cette partie pourrait éventuellement se trouver dans un fichier \texttt{heroku.py}, que vous pourriez placer à côté de votre configuration applicative.
Le paramètre \texttt{--settings=} pourrait alors pointer vers ce nouveau fichier, pour ne pas polluer l'environnement par défaut.
Configurez-les dans la console d'administration d'Heroku:

2
chapters/views.tex Normal file
View File

@ -0,0 +1,2 @@
\chapter{Vues}

View File

@ -68,9 +68,10 @@
\include{chapters/models.tex}
\include{chapters/migrations.tex}
\include{chapters/administration.tex}
\include{chapters/views.tex}
\include{chapters/urls.tex}
\include{chapters/forms.tex}
\include{chapters/templates.tex}
\include{chapters/forms.tex}
\include{chapters/authentication.tex}
\include{chapters/context-processors.tex}
\include{chapters/security.tex}

View File

@ -3,7 +3,17 @@
Nous avons fait exprès de reprendre l'acronyme d'une \emph{Services Oriented Architecture} pour cette partie.
Dans cette partie, en page, la définition d'une interface REST, la définition d'une interface GraphQL et le routage d'URLs.
Dans cette partie: la définition d'une interface REST, la définition d'une interface GraphQL, la gestion des versions d'une API (cf. Build APIs you won't hate) le routage d'URLs.
L'intérêt d'une API est double:
\begin{enumerate}
\item
Proposer une ouverture de votre application à d'autres finalités
\item
Consommer vos propres interfaces: lorsqu'un soucis se présentera, vous ne l'apprendrez pas par un utilisateur du bout-du-monde, mais parce que vos propres outils vous le rappelerons.
Vous vous rendez compte également de ce qui ne fonctionne pas, pas correctement, qui manque ou qui doit être amélioré.
Dans la même veine que tout le reste, donc: maintenance, accessibilité, facilité de déploiement. \footnote{Aussi connu sous le principe de \href{https://en.wikipedia.org/wiki/Eating_your_own_dog_food}{}\textbf{Dogfooding}}, qui consiste à exploiter vous-mêmes vos propres créations.
\end{enumerate}
\begin{quote}
Don't make me think, or why I switched from JS SPAs to Ruby On Rails