Skip to content

III. Déployer et configurer un machin

Dernière section histoire que tout ça prenne un peu vie : on va lancer une ptite app web qui sera portée par nos deux machines :

  • azure1.tp1 : le site web
  • azure2.tp1 : la base de données
Note

Et tout d'un coup, ça a du sens : le site web est exposé sur internet, normal. La base de données, c'est hors de question qu'elle le soit.

Can we deploy

1. Machine azure2.tp1

Ui on commence par azure2.tp1. C'est pas une erreur.

On va setup un serveur de base de données sur azure2.tp1.
En effet, mon app (qu'on lancera sur azure1.tp1 après) a besoin d'une base SQL classique pour fonctionner.

🌞 Installer MySQL/MariaDB sur azure2.tp1

  • faites vos recherches pour ça, en fonction de l'OS que vous avez choisi

🌞 Démarrer le service MySQL/MariaDB sur azure2.tp1

  • une commande systemctl

🌞 Ajouter un utilisateur dans la base de données pour que mon app puisse s'y connecter

  • connectez-vous à la base de données pour pouvoir l'administrer en SQL
  • caractéristiques attendus de l'utilisateur :

    • appelez l'utilisateur meow
    • le password doit être meow
    • il doit être autorisé à se connecter depuis n'importe quelle machine
    • il doit avoir tous les droits sur la database meow_database
Example

Une fois que vous êtes connectés à la base de données (avec une commande mysql), vous pouvez par exemple passer les commandes SQL suivantes pour faire ça :

-- Création de la base de données
CREATE DATABASE meow_database;

-- Création de l'utilisateur `meow`
CREATE USER 'meow'@'%' IDENTIFIED BY 'meow';

-- On donne tous les droits à meow sur les tables de la base meow_database
GRANT ALL ON meow_database.* TO 'meow'@'%';
FLUSH PRIVILEGES;

🌞 Ouvrez un port firewall si nécessaire

  • pour rappel vous pouvez faire un sudo ss -lnpt pour savoir sur quel port tourne votre serveur de base de données
  • ce port doit être joignable par la machine azure1.tp1

2. Machine azure1.tp1

Ici on va déployer le site web.

Au menuuu :

  1. récupération de l'application sur la machine
  2. installation des dépendances de l'application
  3. configuration de l'application
  4. gestion de users et de droits
  5. création d'un service webapp.service pour lancer l'application
  6. ouverture du port dans le firewall si nécessaire
  7. lancement du service

Let's goooo 🔥🔥


A. Récupération de l'application sur la machine

🌞 Récupération de l'application sur la machine

Example

Vous devez donc vous retrouver avec l'arborescence suivante :

# Ptite commande tree pour vous montrer ce qui est attendu dans ce dossier cd /opt
❯ tree -a -L2 meow
meow
├── app.py
├── requirements.txt
├── .env
└── templates
    └── index.html

J'ai codé le back (app.py j'vous l'ai commenté en français étou), formaté avec Black. J'ai laissé le front (templates/index.html) vibecoded par une copine IA. Un peu cursed mon prompt, mais c'est kawaii enough.


B. Installation des dépendances de l'application

🌞 Installation des dépendances de l'application

  • déplacez-vous dans le dossier de l'application
  • exécutez les commandes suivantes :
# Assurez vous d'être dans le dossier où se trouve l'application
cd /opt/meow

# Création d'un environnement virtuel (on pourrit pas l'install Python de la machine hôte)
python -m venv .

# Installation des dépendances de l'application
./bin/pip install -r requirements.txt

C. Configuration de l'application

🌞 Configuration de l'application

  • modifier le fichier /opt/meow/.env
  • modifier uniquement la valeur de DB_HOST pour indiquer l'adresse IP de azure2.tp1
Info

Toutes les variables contenues dans ce fichier sont chargées au démarrage du programme Python. La valeur de DB_HOST par exemple est utilisée comme adresse IP à laquelle se connecter pour se co à la base de données. C'est très très courant un fichier comme .env. On l'appelle le fichier d'environnement (environment file) parce qu'il contient des variables d'environnement.
C'est un peu la façon la plus commune de fournir une conf à un programme. Tous les langages/OS supportent ça facilement.


D. Gestion de users et de droits

🌞 Gestion de users et de droits

  • créez un utilisateur webapp (commande useradd)
  • le dossier /opt/meow et tout son contenu doivent appartenir (commande chown) :

    • au user webapp
    • au groupe webapp
  • les "autres" ne doivent avoir aucun droit sur ce dossier et son contenu (commande chmod)

Note

Ouais parce qu'on est pas des animaux en faiiiit, donc on va pas faire tourner ça en root.
On gère donc correctement nos permissions : principe du moindre privilège (on donne que le strict minimum).


E. Création d'un service webapp.service pour lancer l'application

🌞 Création d'un service webapp.service pour lancer l'application

  • créez le fichier /etc/systemd/system/webapp.service
  • il doit avoir le contenu suivant :
[Unit]
Description=Super Webapp MEOW

[Service]
User=webapp
WorkingDirectory=/opt/meow
ExecStart=/opt/meow/bin/python app.py

[Install]
WantedBy=multi-user.target
  • exécutez ensuite un sudo systemctl daemon-reload pour indiquer au système qu'on a modifié les services

F. Ouverture du port dans le(s) firewall(s)

🌞 Ouverture du port80 dans le(s) firewall(s)

  • vous pouvez voir le port utilisé par l'application :

    • dans ses logs (journalctl)
    • ou en demandant à l'OS (ss)
    • ou en regardant sa conf (fichier .env)
  • suivant l'OS que vous avez choisi, la commande pourra changer pour ouvrir le port, je vous laisse chercher

    • probablement une commande ufw sur Ubuntu
    • probablement une commande firewall-cmd sur Rocky
    • etc.
  • n'oubliez pas d'ouvrir aussi le port dans le firewall Azure

    • faites-le depuis la WebUI

3. Visitez l'application

🌞 L'application devrait être fonctionnelle sans soucis à partir de là

  • vous pouvez visiter http://<_IP_PUBLIQUE_DE_azure1.tp1>:8000
  • vérifier que l'app fonctionne en postant un message
  • mettez-moi un curl vers l'URL dans le compte-rendu (juste les premières lignes svp ça ira)

🍤⭐🍤 Si t'es motivé y'a des exos bonus, fais-en au moiiiins un si t'es solide 🍤⭐🍤