Code Monkey home page Code Monkey logo

microservices-pizza's Introduction

PizzaFast

PizzaFast est un site fictif de pizzeria digitalisée 2.0 créé pour le cours d'architecture micro-services, fait en Angular, Node.js et MySQL.

  • Eddy MONNOT
  • Tristan LAUNÉ
  • Samuel PRAK
  • Mayur SONI

Instructions

Lancer l'application

Entrer la commande suivante pour démarrer l'application :

docker-compose up

Le site vitrine est accessible à l'adresse http://localhost:8082. L'administration est accessible à l'adresse http://localhost:8082/admin.

Identifiants administrateur

Par défaut, les identifiants de connexion à l'interface d'administration sont [email protected] / admin.

Utiliser l'application

  • Se connecter d'abord sur l'interface d'administration à l'adresse http://localhost:8082/admin, avec les identifiants par défaut.
  • Créer quelques ingrédients, puis une ou plusieurs pizzas.
  • Se rendre ensuite sur le site vitrine à l'adresse http://localhost:8082/, s'inscrire, puis commander la pizza. Lorsque c'est demandé, recharger le compte bancaire avant de commander la pizza.
  • La commande apparaît maintenant dans l'interface d'administration. Créer un livreur et un véhicule, et les assigner à la commande.

Architecture

Description des services

Notre application est décomposée en 8 micro-services back-end, front-end et API gateway.

Back-end : Node.js / MySQL

  • Authentification : connexion et inscription des utilisateurs
  • Pizza : gestion des pizzas et des ingrédients
  • Commande : gestion des commandes des utilisateurs
  • Banque : compte bancaire de l'utilisateur, vérification du solde
  • Livraison : gestion des livreurs et véhicules, assigner un livreur et véhicule à une livraison

Front-end : Angular

  • Site vitrine : permet à l'utilisateur de commander des pizzas
  • Administration : permet à l'équipe de PizzaFast de gérer les commandes, livreurs, véhicules, pizzas et ingrédients

API Gateway : nginx

  • API Gateway : permet d'accéder aux différents micro-services depuis le même service

Schéma des services

Schéma des services

Communication entre services

Les différents services communiquent entre eux avec des APIs REST. La communication entre services est sécurisée si besoin avec une authentification basique, notamment pour la connexion entre le service Commande et le service Banque.

Sécurité

Nous utilisons des tokens JWT pour authentifier l'utilisateur, sur le site vitrine et le back-office. Lors de sa connexion, le service Authentification génère un token JWT qui est enregistré côté client. Lorsque des requêtes sont faites vers un micro-service, celui-ci appelle le service Authentification avec le token fourni pour vérifier l'identité de l'utilisateur.

Pour l'administration, un champ isAdmin de l'utilisateur indique s'il est administrateur ou non. On utilise ce champ pour savoir s'il peut accéder ou non aux routes concernées par l'administration.

Docker

Format des fichiers Dockerfile

Les services back-end se basent sur l'image Docker node:14, où l'on copie ensuite les fichiers de notre projet.

Les services front-end sont créés en deux étapes dans le Dockerfile, la première est le build du projet Angular (image node:14), et la seconde étape la mise en place du serveur web avec nginx (image nginx:alpine).

Volumes

Tous les containers correspondant à une base de données MySQL nécessitent un volume, que l'on définit dans le docker-compose.yml. En plus des bases de données, le service pizza a besoin d'un volume pour le stockage des images des pizzas et des ingrédients.

Fichier docker-compose.yml

Le fichier docker-compose.yml regroupe l'ensemble de nos 13 containers et permet le déploiement simple du projet.

API Gateway

Nous utilisons nginx pour créer notre API Gateway et regrouper les requêtes sur un seul service.

  • / : Site vitrine
  • /admin : Back-office du site
  • /auth : API Authentification
  • /pizza : API Pizza
  • /order : API Commande
  • /delivery : API Livraison
  • /bank : API Banque

Ce qui a été ajouté depuis la présentation

Depuis la présentation, nous avons ajouté plusieurs points :

  • Les services appellent maintenant le service d'authentification à chaque requête. Cela permet de vérifier le token JWT fourni par le client, et ainsi de vérifier qu'il est bien authentifié.
  • API Gateway : nous avons ajouté un nouveau service nginx permettant de regrouper les requêtes sur un seul service, permettant de rassembler les services sur un même domaine / port.
  • Authentification admin : nous avons rajouté une colonne isAdmin dans la table utilisateurs pour permettre la connexion à l'interface administration. On vérifie ensuite auprès du service authentification que l'utilisateur a bien cette permission pour les routes admin.

microservices-pizza's People

Contributors

samuelprak avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.