Description de l'application - Sskiizens/DevSecOps Wiki

Schéma de l'application

appli_web_schéma

L'application comprend 3 parties principales qui sont Main, Admin et Frontend, nous allons détaillé chacune d'elles.

Les technologies utilisées

Django est un cadre Web Python de haut niveau qui encourage le développement rapide et une conception propre et pragmatique. Conçu par des développeurs expérimentés, il prend en charge une grande partie des problèmes liés au développement Web, ce qui vous permet de se concentrer sur l'écriture de notre application sans avoir à réinventer la roue. Il est gratuit et open source.

Flask est un micro framework open-source de développement web en Python. Il est classé comme microframework car il est très léger. Flask a pour objectif de garder un noyau simple mais extensible. Il n'intègre pas de système d'authentification, pas de couche d'abstraction de base de données, ni d'outil de validation de formulaires. Cependant, de nombreuses extensions permettent d'ajouter facilement des fonctionnalités.

MySQL Database Service est un service de base de données entièrement géré pour déployer des applications natives du cloud en utilisant la base de données open source la plus populaire au monde.

RabbitMQ est basé sur l’idée du Advanced Message Queuing Protocol (AMQP). Le principal avantage du AMQP est qu’il n’impose pas à l’émetteur et au destinataire de comprendre le même langage de programmation. Le message broker s’est aujourd’hui quelque peu détaché du AMQP et fonctionne également avec des protocoles de messages comme STOMP ou MQTT grâce à des plugins, mais l’idée reste la même : le producteur et le destinataire du message sont séparés par une file d’attente dans laquelle les messages sont stockés temporairement.

Compose est un outil permettant de définir et d'exécuter des applications Docker multi-conteneurs. Avec Compose, on utilise un fichier YAML pour configurer les services de notre application. Ensuite, avec une seule commande, on crée et démarre tous les services à partir de votre configuration. Cela nous permet de gérer nos nombreux conteneurs ainsi que leurs configurations sans passer par la complexité des orchestrateurs, compose étant suffisant pour gérer notre infrastructure légère.

Le reste du backend est écrit majoritairement en python, à l'aide des framework présentés ci-dessus ou non. Le choix de python se fait sur la simplicité d'écriture de ce langage et aux nombreux framework web qui le compose ce qui répond parfaitement aux besoins d'un site web. Le choix du double framework web s'explique par la volonté de montré la puissance d'une infrastructure microservice, qui offre la possibilité de multiplié les technologies sans problèmes.

Le frontend utilise une diversité de technologie et notamment Angular, React ou encore View. La majorité du design à été récupéré sur GetBootstrap, template que nous avons ensuite adaptés à nos besoins.

L'appli Main

Cette partie de l'application concerne la partie utilisateur. N'importe qui est censé pouvoir y accéder. Ici les utilisateurs verront les photos de notre site ainsi que leur titre. Cette application est basé sur le framework python flask. Cela nous permet de développer l'application facilement notamment avec des simplification au niveau de l’interaction avec notre BDD, avec le frontend et avec les différents appels API qui ont lieu entre nos deux applis backend. Il n'était pas nécessaire de prendre deux framework différents mais cela permet de mettre en avant un point important du microservice: il permet l'utilisation de différents technologies au sein de chaque service et/ou conteneur car ces derniers sont indépendants.

Cette appli se décompose en 3 conteneurs:

  1. Conteneur db

Ce conteneur, qui contient un mysql, sert de base de données pour l'appli main. Il contiendra donc une liste des images du site pour pouvoir les afficher ensuite. La table qui contient les images possède 4 champs (id, nom, photo, likes). On accéde au bdd grâce à l'identifiant mysql root:root.

  1. Conteneur backend

Ce conteneur sert de backend à l'application utilisateur. Il exécute le code python qui va notamment géré les interactions tel que les API, les interactions Web, les interactions avec la BDD... (ex: un API GET sur l'ensemble des imaes, on va chercher l'ensemble des données dans la BDD et on retourne une réponse HTML avec un success 200).

  1. Conteneur queue

Ce conteneur est utilisé pour gérer les appels rabbitMQ, cela permet tout simplement de synchroniser les bases de données entre les deux applications qui ont des BDD distinctes. Ainsi si l'on like une image côté utilisateur, le like s'affichera aussi côté admin et vice versa si l'on supprime ou modifie une image côté admin.

L'appli Admin

Ici, nous avons essayé de reproduire une interface d'administration, avec beaucoup plus de possibilités que les utilisateurs classiques. De ce côté la de l'application, il est possible d'ajouter, modifier ou supprimer des photos, c'est ici que la majorité de la partie API prend tout son sens avec différents appels REST (Representational state transfer), qui permettent de gérer les demandes. Cette application se base quant à elle sur Django, framework python web que nous décrivons dans la page 2 de ce wiki.

A l'image de l'appli main, admin se décompose en 3 conteneurs:

  1. Conteneur db

Idem que pour l'application main, mais les tables ont des noms différents. Ce conteneur, qui contient un mysql, sert de base de données pour l'appli main. Il contiendra donc une liste des images du site pour pouvoir les afficher ensuite. La table qui contient les images posséde 4 champs (id, nom, photo, likes). On accède a la bdd grâce à l'identifiant mysql root:root.

  1. Conteneur backend

Ici, on va gérer tout les "mécanismes" de l'application tel que, l'interaction avec la BDD, la gestion des différents appels API REST et se qu'ils doivent retourner au frontend. On a également la gestion des erreurs...

  1. Conteneur queue

Ce conteneur est utilisé pour gérer les appels rabbitMQ, cela permet tout simplement de synchroniser les bases de données entre les deux applications qui ont des BDD distinctes. Ainsi si une modification a lieu sur une image côté administrateur, elle sera également prise en compte côté utilisateur.

Appli frontend

Cette partie de l'application sert simplement d'affichage, tout le code est orienté vers l'affichage et les actions nécessaire à ce dernier. On retrouve ainsi une grande partie de code HTML ou CSS et des parties en javascript (tsx) qui vont permettre d'associer des actions qui ont lieu sur la page web au backend (ex: appuie sur le bouton like, un appel à l'API a lieu pour prendre en compte le like).