\chapter{Debian} La première étape pour la configuration de notre hôte consiste à définir les utilisateurs et groupes de droits. Il est faut absolument éviter de faire tourner une application en tant qu'utilisateur \textbf{root}, car la moindre faille pourrait avoir des conséquences catastrophiques. Une fois que ces utilisateurs seront configurés, nous pourrons passer à l'étape de configuration, qui consistera à: \begin{enumerate} \item Déployer les sources \item Démarrer un serveur implémentant une interface WSGI (\textbf{Web Server Gateway Interface}), qui sera chargé de créer autant de petits lutins travailleurs que nous le désirerons. \item Démarrer un superviseur, qui se chargera de veiller à la bonne santé de nos petits travailleurs, et en créer de nouveaux s'il le juge nécessaire \item Configurer un proxy inverse, qui s'occupera d'envoyer les requêtes d'un utilisateur externe à la machine hôte vers notre serveur applicatif, qui la communiquera à l'un des travailleurs. \end{enumerate} La machine hôte peut être louée chez Digital Ocean, Scaleway, OVH, Vultr, ... Il existe des dizaines d'hébergements typés VPS (\textbf{Virtual Private Server}). A vous de choisir celui qui vous convient \footnote{Personnellement, j'ai un petit faible pour Hetzner Cloud}. \section{Dépendances systèmes} \section{Base de données} On l'a déjà vu, Django se base sur un pattern type \href{https://www.martinfowler.com/eaaCatalog/activeRecord.html}{ActiveRecords} pour la gestion de la persistance des données et supporte les principaux moteurs de bases de données connus: \begin{itemize} \item SQLite (en natif, mais Django 3.0 exige une version du moteur supérieure ou égale à la 3.8) \item MariaDB (en natif depuis Django 3.0), \item PostgreSQL au travers de psycopg2 (en natif aussi), \item Microsoft SQLServer grâce aux drivers {[}\ldots\hspace{0pt}à compléter{]} \item Oracle via \href{https://oracle.github.io/python-cx_Oracle/}{cx\_Oracle}. \end{itemize} Chaque pilote doit être utilisé précautionneusement ! Chaque version de Django n'est pas toujours compatible avec chacune des versions des pilotes, et chaque moteur de base de données nécessite parfois une version spécifique du pilote. Par ce fait, vous serez parfois bloqué sur une version de Django, simplement parce que votre serveur de base de données se trouvera dans une version spécifique (eg. Django 2.3 à cause d'un Oracle 12.1). Ci-dessous, quelques procédures d'installation pour mettre un serveur à disposition. Les deux plus simples seront MariaDB et PostgreSQL, qu'on couvrira ci-dessous. Oracle et Microsoft SQLServer se trouveront en annexes. \subsection{PostgreSQL} On commence par installer PostgreSQL. Dans le cas de debian, on exécute la commande suivante: \begin{verbatim} # aptitude install postgresql postgresql-contrib \end{verbatim} Ensuite, on crée un utilisateur pour la DB: \begin{verbatim} # su - postgres postgres@gwift:~$ createuser --interactive -P Enter name of role to add: gwift_user Enter password for new role: Enter it again: Shall the new role be a superuser? (y/n) n Shall the new role be allowed to create databases? (y/n) n Shall the new role be allowed to create more new roles? (y/n) n postgres@gwift:~$ \end{verbatim} Finalement, on peut créer la DB: \begin{verbatim} postgres@gwift:~$ createdb --owner gwift_user gwift postgres@gwift:~$ exit logout \end{verbatim} \subsection{MariaDB} Idem, installation, configuration, backup, tout ça. A copier de grimboite, je suis sûr d’avoir des notes là-dessus. \section{Environment utilisateur} \begin{verbatim} su - gwift cp /etc/skel/.bashrc . cp /etc/skel/.bash_profile . ssh-keygen mkdir bin mkdir .venvs mkdir webapps python3.6 -m venv .venvs/gwift source .venvs/gwift/bin/activate cd /home/gwift/webapps git clone ... \end{verbatim} La clé SSH doit ensuite être renseignée au niveau du dépôt, afin de pouvoir y accéder. A ce stade, on devrait déjà avoir quelque chose de fonctionnel en démarrant les commandes suivantes: \begin{verbatim} # en tant qu'utilisateur 'gwift' source .venvs/gwift/bin/activate pip install -U pip pip install -r requirements/base.txt pip install gunicorn cd webapps/gwift gunicorn config.wsgi:application --bind localhost:3000 --settings =config.settings_production \end{verbatim}