Vous êtes sur la page 1sur 31

Ecole Normale Supérieure de l’Enseignement ‫ﻟﻤﺪﺭﺳﺔ ﺍﻟﻌﻠﻴﺎ ﻸﺳﺎﺗﺬﺓ ﺍﻟﺘﻌﻠﻴﻢ ﺍﻟﺘﻘﻨﻲ المحمدية‬ 

‫ﺍ‬
Technique Mohammedia
Université Hassan II de Casablanca
ENSET ‫ﺟﺎﻣﻌﺔ ﺍﻟﺤﺴﻦ ﺍﻟﺜﺎﻧﻲ ﺑﺎﻟﺪﺍﺭ ﺍﻟﺒﻴﻀﺎﺀ‬

DÉPARTEMENT MATHÉMATIQUES ET INFORMATIQUE

Filière :
« Génie du Logiciel et des Systèmes Informatiques Distribués »

GLSID

Examen Systèmes Distribués


CQRS && Event Sourcing

Année Universitaire : 2022-2023


Ecole Normale Supérieure de l’Enseignement ‫ﻟﻤﺪﺭﺳﺔ ﺍﻟﻌﻠﻴﺎ ﻸﺳﺎﺗﺬﺓ ﺍﻟﺘﻌﻠﻴﻢ ﺍﻟﺘﻘﻨﻲ المحمدية‬ ‫ﺍ‬
Technique Mohammedia
Université Hassan II de Casablanca
ENSET ‫ﺟﺎﻣﻌﺔ ﺍﻟﺤﺴﻦ ﺍﻟﺜﺎﻧﻲ ﺑﺎﻟﺪﺍﺭ ﺍﻟﺒﻴﻀﺎﺀ‬

L'énoncé:
1. Etablir une architecture technique du projet:
Le système se compose de :
• Un microservice backend qui permet de gérer
• Un microservice backend pour valider
• Une application frontend basée sur Angular
Ecole Normale Supérieure de l’Enseignement ‫ﻟﻤﺪﺭﺳﺔ ﺍﻟﻌﻠﻴﺎ ﻸﺳﺎﺗﺬﺓ ﺍﻟﺘﻌﻠﻴﻢ ﺍﻟﺘﻘﻨﻲ المحمدية‬ ‫ﺍ‬
Technique Mohammedia
Université Hassan II de Casablanca
ENSET ‫ﺟﺎﻣﻌﺔ ﺍﻟﺤﺴﻦ ﺍﻟﺜﺎﻧﻲ ﺑﺎﻟﺪﺍﺭ ﺍﻟﺒﻴﻀﺎﺀ‬

• Un service d’authentification et d’autorisations basé sur Keycloak (Oauth2 et


OpenIdConnect )

2. Diagramme de classe
- En jaune les entites de microservice : Customer-Service
- En vert les entites de microservice : Inventory-Service
- En mauve les entites de microservice : Order-Service
Ecole Normale Supérieure de l’Enseignement ‫ﻟﻤﺪﺭﺳﺔ ﺍﻟﻌﻠﻴﺎ ﻸﺳﺎﺗﺬﺓ ﺍﻟﺘﻌﻠﻴﻢ ﺍﻟﺘﻘﻨﻲ المحمدية‬ ‫ﺍ‬
Technique Mohammedia
Université Hassan II de Casablanca
ENSET ‫ﺟﺎﻣﻌﺔ ﺍﻟﺤﺴﻦ ﺍﻟﺜﺎﻧﻲ ﺑﺎﻟﺪﺍﺭ ﺍﻟﺒﻴﻀﺎﺀ‬

3. Déployer le serveur AXON Server

Tout d'abord le CQRS “Command Query Responsability Segregation” est un pattern


qui consiste à séparer la partie lecture de la partie écriture de l’application.
Et je vais prendre en considération les différentes terminologies :
• Command : Une intention externe de modification de l’état d’un objet (Insert,
update, delete)
• Query : Une intention de consultation d’une information ou l’état d’un objet (Select)
• Event : Symbolise une action qui s’est produite dans le système
• Event Bus : un mécanisme qui permet de dispatcher les événements vers les
écouteurs des événements (Event Handlers)
• Event Store : Base de persistance des événements publiés dans l’application.

Lancement du AxonServer
Ecole Normale Supérieure de l’Enseignement ‫ﻟﻤﺪﺭﺳﺔ ﺍﻟﻌﻠﻴﺎ ﻸﺳﺎﺗﺬﺓ ﺍﻟﺘﻌﻠﻴﻢ ﺍﻟﺘﻘﻨﻲ المحمدية‬ ‫ﺍ‬
Technique Mohammedia
Université Hassan II de Casablanca
ENSET ‫ﺟﺎﻣﻌﺔ ﺍﻟﺤﺴﻦ ﺍﻟﺜﺎﻧﻲ ﺑﺎﻟﺪﺍﺭ ﺍﻟﺒﻴﻀﺎﺀ‬

4. Développer le micro-service Customer-Service

Voici les dependance sélectionnée:


• Eureka Discovery Client : un service basé sur REST pour localiser des services à
des fins d'équilibrage de charge et de basculement de serveurs intermédiaires.
• Spring Boot Actuator : Prend en charge les points de terminaison intégrés (ou
personnalisés) qui vous permettent de surveiller et de gérer votre application, tels que la
santé de l'application, les métriques, les sessions, etc.
• Spring Web et Spring Data JPA et MySql
• Rest Repositories
• Lombok : Bibliothèque d'annotations Java qui aide à réduire le code passe-partout.
• Spring Boot DevTools : Provides fast application restarts, LiveReload, and
configurations for enhanced development experience.
• Axon Framework interagit avec l’application de deux manières :
- Émettre des commandes qui vont entraîner la modification de l’état de de
l’application dans la base d’écriture
- Émettre des requêtes pour consulter l’état de l’application à partir des bases
de lectures
Ecole Normale Supérieure de l’Enseignement ‫ﻟﻤﺪﺭﺳﺔ ﺍﻟﻌﻠﻴﺎ ﻸﺳﺎﺗﺬﺓ ﺍﻟﺘﻌﻠﻴﻢ ﺍﻟﺘﻘﻨﻲ المحمدية‬ ‫ﺍ‬
Technique Mohammedia
Université Hassan II de Casablanca
ENSET ‫ﺟﺎﻣﻌﺔ ﺍﻟﺤﺴﻦ ﺍﻟﺜﺎﻧﻲ ﺑﺎﻟﺪﺍﺭ ﺍﻟﺒﻴﻀﺎﺀ‬

Voici les propriétés

Le micro service était bien connectée avec axon server


Ecole Normale Supérieure de l’Enseignement ‫ﻟﻤﺪﺭﺳﺔ ﺍﻟﻌﻠﻴﺎ ﻸﺳﺎﺗﺬﺓ ﺍﻟﺘﻌﻠﻴﻢ ﺍﻟﺘﻘﻨﻲ المحمدية‬ ‫ﺍ‬
Technique Mohammedia
Université Hassan II de Casablanca
ENSET ‫ﺟﺎﻣﻌﺔ ﺍﻟﺤﺴﻦ ﺍﻟﺜﺎﻧﻲ ﺑﺎﻟﺪﺍﺭ ﺍﻟﺒﻴﻀﺎﺀ‬

L'architecture de command Side


Ecole Normale Supérieure de l’Enseignement ‫ﻟﻤﺪﺭﺳﺔ ﺍﻟﻌﻠﻴﺎ ﻸﺳﺎﺗﺬﺓ ﺍﻟﺘﻌﻠﻴﻢ ﺍﻟﺘﻘﻨﻲ المحمدية‬ ‫ﺍ‬
Technique Mohammedia
Université Hassan II de Casablanca
ENSET ‫ﺟﺎﻣﻌﺔ ﺍﻟﺤﺴﻦ ﺍﻟﺜﺎﻧﻲ ﺑﺎﻟﺪﺍﺭ ﺍﻟﺒﻴﻀﺎﺀ‬

Voici query side

Voici la base de données qui est générée

Le code du microservice est disponible sur


:https://github.com/hajar-zarguan/Examen-distributed-System/tree/main/microservice1

5. Développer le micro-service Inventory-Service


Ecole Normale Supérieure de l’Enseignement ‫ﻟﻤﺪﺭﺳﺔ ﺍﻟﻌﻠﻴﺎ ﻸﺳﺎﺗﺬﺓ ﺍﻟﺘﻌﻠﻴﻢ ﺍﻟﺘﻘﻨﻲ المحمدية‬ ‫ﺍ‬
Technique Mohammedia
Université Hassan II de Casablanca
ENSET ‫ﺟﺎﻣﻌﺔ ﺍﻟﺤﺴﻦ ﺍﻟﺜﺎﻧﻲ ﺑﺎﻟﺪﺍﺭ ﺍﻟﺒﻴﻀﺎﺀ‬

6. Développer le micro-service Order-Service


Ecole Normale Supérieure de l’Enseignement ‫ﻟﻤﺪﺭﺳﺔ ﺍﻟﻌﻠﻴﺎ ﻸﺳﺎﺗﺬﺓ ﺍﻟﺘﻌﻠﻴﻢ ﺍﻟﺘﻘﻨﻲ المحمدية‬ ‫ﺍ‬
Technique Mohammedia
Université Hassan II de Casablanca
ENSET ‫ﺟﺎﻣﻌﺔ ﺍﻟﺤﺴﻦ ﺍﻟﺜﺎﻧﻲ ﺑﺎﻟﺪﺍﺭ ﺍﻟﺒﻴﻀﺎﺀ‬

6. Mettre en place les services techniques de l’architecture


micro-service (Gateway, Eureka Discovery service)

Gateway
Tout d'abord, Gateway API est un reverse proxy amélioré avec des fonctionnalités
plus avancées, y compris l'orchestration et la sécurité et le monitoring.
Dans ce cas, je vais utiliser Spring Cloud Gateway.
C'est une API non bloquante.
- Un thread est toujours disponible pour traiter requête entrante.
- Ces requêtes sont ensuite traitées de manière asynchrone en arrière -plan et
une fois complétées, la réponse est renvoyée.
- Ainsi, aucune requête entrante n'est jamais bloquée lors de l'utilisation de
Spring Cloud Gateway sauf si les ressources CPU et mémoires sont
saturées.

- Les dépendances
• Gateway : Fournit un moyen simple mais efficace d'acheminer vers les API et de
leur fournir des préoccupations transversales telles que la sécurité, la surveillance/les
métriques et la résilience.
• Spring Boot Actuator :Prend en charge les points de terminaison intégrés (ou
personnalisés) qui vous permettent de surveiller et de gérer votre application, tels que la
santé de l'application, les métriques, les sessions, etc.
• Eureka Discovery Client :un service basé sur REST pour localiser des services à
des fins d'équilibrage de charge et de basculement de serveurs de niveau intermédiaire.

- Les extrait du code


Gateway nous permet de fournir une configuration des routes static, mais dans ce
projet nous allons les configurer automatiquement
Ecole Normale Supérieure de l’Enseignement ‫ﻟﻤﺪﺭﺳﺔ ﺍﻟﻌﻠﻴﺎ ﻸﺳﺎﺗﺬﺓ ﺍﻟﺘﻌﻠﻴﻢ ﺍﻟﺘﻘﻨﻲ المحمدية‬ ‫ﺍ‬
Technique Mohammedia
Université Hassan II de Casablanca
ENSET ‫ﺟﺎﻣﻌﺔ ﺍﻟﺤﺴﻦ ﺍﻟﺜﺎﻧﻲ ﺑﺎﻟﺪﺍﺭ ﺍﻟﺒﻴﻀﺎﺀ‬

Route:
Destination vers laquelle nous voulons qu'une requête particulière soit acheminée. Une
route comprend :
➔ L'URI de destination,
➔ Predicate : Une condition qui doit satisfaire
➔ Filters : Un ou plusieurs filtres qui peuvent intervenir pour apporter des traitement et
des modifications des requêtes et des réponses HTTP
Dans ce projet j'ai pas utiliser le routage statique mais cela se fait dynamiquement avec
Eureka discovery

- L'exécution
Ecole Normale Supérieure de l’Enseignement ‫ﻟﻤﺪﺭﺳﺔ ﺍﻟﻌﻠﻴﺎ ﻸﺳﺎﺗﺬﺓ ﺍﻟﺘﻌﻠﻴﻢ ﺍﻟﺘﻘﻨﻲ المحمدية‬ ‫ﺍ‬
Technique Mohammedia
Université Hassan II de Casablanca
ENSET ‫ﺟﺎﻣﻌﺔ ﺍﻟﺤﺴﻦ ﺍﻟﺜﺎﻧﻲ ﺑﺎﻟﺪﺍﺭ ﺍﻟﺒﻴﻀﺎﺀ‬

Eureka Discovery service

- Les dépendances
• Eureka Server : spring-cloudnetflix Eureka Server.
Cela nous permet d'utiliser l'annotation
@EnableEurekaServer

- Les extrait du code


Ecole Normale Supérieure de l’Enseignement ‫ﻟﻤﺪﺭﺳﺔ ﺍﻟﻌﻠﻴﺎ ﻸﺳﺎﺗﺬﺓ ﺍﻟﺘﻌﻠﻴﻢ ﺍﻟﺘﻘﻨﻲ المحمدية‬ ‫ﺍ‬
Technique Mohammedia
Université Hassan II de Casablanca
ENSET ‫ﺟﺎﻣﻌﺔ ﺍﻟﺤﺴﻦ ﺍﻟﺜﺎﻧﻲ ﺑﺎﻟﺪﺍﺭ ﺍﻟﺒﻴﻀﺎﺀ‬

- L'exécution

Voici le tableau de bord de Eureka Server


localhost:8761

Voici l’afficahge en axon server

7. Développer votre application Frontend avec Angular


Ecole Normale Supérieure de l’Enseignement ‫ﻟﻤﺪﺭﺳﺔ ﺍﻟﻌﻠﻴﺎ ﻸﺳﺎﺗﺬﺓ ﺍﻟﺘﻌﻠﻴﻢ ﺍﻟﺘﻘﻨﻲ المحمدية‬ ‫ﺍ‬
Technique Mohammedia
Université Hassan II de Casablanca
ENSET ‫ﺟﺎﻣﻌﺔ ﺍﻟﺤﺴﻦ ﺍﻟﺜﺎﻧﻲ ﺑﺎﻟﺪﺍﺭ ﺍﻟﺒﻴﻀﺎﺀ‬

L'utilisation du Framework Bootstrap avec CDN

Voici la navigation
Ecole Normale Supérieure de l’Enseignement ‫ﻟﻤﺪﺭﺳﺔ ﺍﻟﻌﻠﻴﺎ ﻸﺳﺎﺗﺬﺓ ﺍﻟﺘﻌﻠﻴﻢ ﺍﻟﺘﻘﻨﻲ المحمدية‬ ‫ﺍ‬
Technique Mohammedia
Université Hassan II de Casablanca
ENSET ‫ﺟﺎﻣﻌﺔ ﺍﻟﺤﺴﻦ ﺍﻟﺜﺎﻧﻲ ﺑﺎﻟﺪﺍﺭ ﺍﻟﺒﻴﻀﺎﺀ‬

Pas terminé à cause du contrainte du temps

8. Sécuriser votre système avec un système de d’authentification


OAuth2 comme Keycloak

OAuth2 Protocole et Framework de délégation d’autorisations


Comme il est déjà montrer dans le schéma de l'architecture qui détaille la sécurité

Open ID Connect (OIDC) :


- Protocole au-dessus de OAuth2 pour la gestion des identités.
- Introduit le concept de ID Token qui utilise JWT (JsonWeb Token) :
• Access Token
• RefreshToken

KETCLOAK
Keylock est un outil permettant de centraliser l’infrastructure de sécurité des
applications :
• Gestion des identités
• Authentification
• Autorisations

➔ Je l’ai télécharger depuis https://www.keycloak.org/downloads


Résoudre l'erreur
Ecole Normale Supérieure de l’Enseignement ‫ﻟﻤﺪﺭﺳﺔ ﺍﻟﻌﻠﻴﺎ ﻸﺳﺎﺗﺬﺓ ﺍﻟﺘﻌﻠﻴﻢ ﺍﻟﺘﻘﻨﻲ المحمدية‬ ‫ﺍ‬
Technique Mohammedia
Université Hassan II de Casablanca
ENSET ‫ﺟﺎﻣﻌﺔ ﺍﻟﺤﺴﻦ ﺍﻟﺜﺎﻧﻲ ﺑﺎﻟﺪﺍﺭ ﺍﻟﺒﻴﻀﺎﺀ‬

Voici la solution de l'erreur

➔ Il propose une console d’administration pour la gestion centralisée des utilisateurs


➔ Il offre une API REST pour la partie administration
Par défaut, keycloak dispose d’une interface web d’administration accessible sur le port
8080. La console d’administration permet d’administrer keycloak
Ecole Normale Supérieure de l’Enseignement ‫ﻟﻤﺪﺭﺳﺔ ﺍﻟﻌﻠﻴﺎ ﻸﺳﺎﺗﺬﺓ ﺍﻟﺘﻌﻠﻴﻢ ﺍﻟﺘﻘﻨﻲ المحمدية‬ ‫ﺍ‬
Technique Mohammedia
Université Hassan II de Casablanca
ENSET ‫ﺟﺎﻣﻌﺔ ﺍﻟﺤﺴﻦ ﺍﻟﺜﺎﻧﻲ ﺑﺎﻟﺪﺍﺭ ﺍﻟﺒﻴﻀﺎﺀ‬
Ecole Normale Supérieure de l’Enseignement ‫ﻟﻤﺪﺭﺳﺔ ﺍﻟﻌﻠﻴﺎ ﻸﺳﺎﺗﺬﺓ ﺍﻟﺘﻌﻠﻴﻢ ﺍﻟﺘﻘﻨﻲ المحمدية‬ ‫ﺍ‬
Technique Mohammedia
Université Hassan II de Casablanca
ENSET ‫ﺟﺎﻣﻌﺔ ﺍﻟﺤﺴﻦ ﺍﻟﺜﺎﻧﻲ ﺑﺎﻟﺪﺍﺭ ﺍﻟﺒﻴﻀﺎﺀ‬

Console administration

La création de Realm pour le premier microservice Customer-service


Realms (Royaumes): un domaine qui gère un ensemble d’utilisateurs,
d’informations d’identification, des rôles et des groupes.
Pour sécuriser le premier micro service il faut créer un Realm

• Et dans le Realm nous devons créer un client :

Les clients sont des entités pouvant demander à Keycloak d’authentifier un utilisateur (
comme des applications )
Ecole Normale Supérieure de l’Enseignement ‫ﻟﻤﺪﺭﺳﺔ ﺍﻟﻌﻠﻴﺎ ﻸﺳﺎﺗﺬﺓ ﺍﻟﺘﻌﻠﻴﻢ ﺍﻟﺘﻘﻨﻲ المحمدية‬ ‫ﺍ‬
Technique Mohammedia
Université Hassan II de Casablanca
ENSET ‫ﺟﺎﻣﻌﺔ ﺍﻟﺤﺴﻦ ﺍﻟﺜﺎﻧﻲ ﺑﺎﻟﺪﺍﺭ ﺍﻟﺒﻴﻀﺎﺀ‬

L'affichage des clients


Ecole Normale Supérieure de l’Enseignement ‫ﻟﻤﺪﺭﺳﺔ ﺍﻟﻌﻠﻴﺎ ﻸﺳﺎﺗﺬﺓ ﺍﻟﺘﻌﻠﻴﻢ ﺍﻟﺘﻘﻨﻲ المحمدية‬ ‫ﺍ‬
Technique Mohammedia
Université Hassan II de Casablanca
ENSET ‫ﺟﺎﻣﻌﺔ ﺍﻟﺤﺴﻦ ﺍﻟﺜﺎﻧﻲ ﺑﺎﻟﺪﺍﺭ ﺍﻟﺒﻴﻀﺎﺀ‬

Création des utilisateurs


• Users : Ils sont des entités pouvant se connecter à notre système

La création du mot de passe pour l'utilisateur hajarzargan

• Rôles : ils identifient un type ou une catégorie d’utilisateur. Admin, user, …


Ecole Normale Supérieure de l’Enseignement ‫ﻟﻤﺪﺭﺳﺔ ﺍﻟﻌﻠﻴﺎ ﻸﺳﺎﺗﺬﺓ ﺍﻟﺘﻌﻠﻴﻢ ﺍﻟﺘﻘﻨﻲ المحمدية‬ ‫ﺍ‬
Technique Mohammedia
Université Hassan II de Casablanca
ENSET ‫ﺟﺎﻣﻌﺔ ﺍﻟﺤﺴﻦ ﺍﻟﺜﺎﻧﻲ ﺑﺎﻟﺪﺍﺭ ﺍﻟﺒﻴﻀﺎﺀ‬

Assigner un rôle à l'utilisateur


Ecole Normale Supérieure de l’Enseignement ‫ﻟﻤﺪﺭﺳﺔ ﺍﻟﻌﻠﻴﺎ ﻸﺳﺎﺗﺬﺓ ﺍﻟﺘﻌﻠﻴﻢ ﺍﻟﺘﻘﻨﻲ المحمدية‬ ‫ﺍ‬
Technique Mohammedia
Université Hassan II de Casablanca
ENSET ‫ﺟﺎﻣﻌﺔ ﺍﻟﺤﺴﻦ ﺍﻟﺜﺎﻧﻲ ﺑﺎﻟﺪﺍﺭ ﺍﻟﺒﻴﻀﺎﺀ‬

Dans Realm nous avons

récupération de Token Endpoint

Faire comme cela


Ecole Normale Supérieure de l’Enseignement ‫ﻟﻤﺪﺭﺳﺔ ﺍﻟﻌﻠﻴﺎ ﻸﺳﺎﺗﺬﺓ ﺍﻟﺘﻌﻠﻴﻢ ﺍﻟﺘﻘﻨﻲ المحمدية‬ ‫ﺍ‬
Technique Mohammedia
Université Hassan II de Casablanca
ENSET ‫ﺟﺎﻣﻌﺔ ﺍﻟﺤﺴﻦ ﺍﻟﺜﺎﻧﻲ ﺑﺎﻟﺪﺍﺭ ﺍﻟﺒﻴﻀﺎﺀ‬

J'avais cette erreur sur Keylock

Voici la solution de l'erreur

Donc je vais modifier le mot de passe d'utilisateur car je l'ai mis comme étant un mot de
passe temporaire.

• Access token : un token pouvant être fourni dans le cadre d’une requête HTTP
autorisant l’accès au service invoqué.
Ecole Normale Supérieure de l’Enseignement ‫ﻟﻤﺪﺭﺳﺔ ﺍﻟﻌﻠﻴﺎ ﻸﺳﺎﺗﺬﺓ ﺍﻟﺘﻌﻠﻴﻢ ﺍﻟﺘﻘﻨﻲ المحمدية‬ ‫ﺍ‬
Technique Mohammedia
Université Hassan II de Casablanca
ENSET ‫ﺟﺎﻣﻌﺔ ﺍﻟﺤﺴﻦ ﺍﻟﺜﺎﻧﻲ ﺑﺎﻟﺪﺍﺭ ﺍﻟﺒﻴﻀﺎﺀ‬

Voici les clés publiques


Ecole Normale Supérieure de l’Enseignement ‫ﻟﻤﺪﺭﺳﺔ ﺍﻟﻌﻠﻴﺎ ﻸﺳﺎﺗﺬﺓ ﺍﻟﺘﻌﻠﻴﻢ ﺍﻟﺘﻘﻨﻲ المحمدية‬ ‫ﺍ‬
Technique Mohammedia
Université Hassan II de Casablanca
ENSET ‫ﺟﺎﻣﻌﺔ ﺍﻟﺤﺴﻦ ﺍﻟﺜﺎﻧﻲ ﺑﺎﻟﺪﺍﺭ ﺍﻟﺒﻴﻀﺎﺀ‬

L'affichage de Refresh Token

Dans chaque client j'ai activé Client authentication qui donne la possibilite de selectionner
Service account rôles
Ecole Normale Supérieure de l’Enseignement ‫ﻟﻤﺪﺭﺳﺔ ﺍﻟﻌﻠﻴﺎ ﻸﺳﺎﺗﺬﺓ ﺍﻟﺘﻌﻠﻴﻢ ﺍﻟﺘﻘﻨﻲ المحمدية‬ ‫ﺍ‬
Technique Mohammedia
Université Hassan II de Casablanca
ENSET ‫ﺟﺎﻣﻌﺔ ﺍﻟﺤﺴﻦ ﺍﻟﺜﺎﻧﻲ ﺑﺎﻟﺪﺍﺭ ﺍﻟﺒﻴﻀﺎﺀ‬

L’onglet Credentials
Ecole Normale Supérieure de l’Enseignement ‫ﻟﻤﺪﺭﺳﺔ ﺍﻟﻌﻠﻴﺎ ﻸﺳﺎﺗﺬﺓ ﺍﻟﺘﻌﻠﻴﻢ ﺍﻟﺘﻘﻨﻲ المحمدية‬ ‫ﺍ‬
Technique Mohammedia
Université Hassan II de Casablanca
ENSET ‫ﺟﺎﻣﻌﺔ ﺍﻟﺤﺴﻦ ﺍﻟﺜﺎﻧﻲ ﺑﺎﻟﺪﺍﺭ ﺍﻟﺒﻴﻀﺎﺀ‬

Les dépendances

Properties
Ecole Normale Supérieure de l’Enseignement ‫ﻟﻤﺪﺭﺳﺔ ﺍﻟﻌﻠﻴﺎ ﻸﺳﺎﺗﺬﺓ ﺍﻟﺘﻌﻠﻴﻢ ﺍﻟﺘﻘﻨﻲ المحمدية‬ ‫ﺍ‬
Technique Mohammedia
Université Hassan II de Casablanca
ENSET ‫ﺟﺎﻣﻌﺔ ﺍﻟﺤﺴﻦ ﺍﻟﺜﺎﻧﻲ ﺑﺎﻟﺪﺍﺭ ﺍﻟﺒﻴﻀﺎﺀ‬

Voici la classe KeycloakAdapterConfig

Voici la classe KeycloakSecurityConfig

Le code complet du microservice technique sur :


https://github.com/hajar-zarguan/Examen-distributed-System/tree/main/Security-service
Ecole Normale Supérieure de l’Enseignement ‫ﻟﻤﺪﺭﺳﺔ ﺍﻟﻌﻠﻴﺎ ﻸﺳﺎﺗﺬﺓ ﺍﻟﺘﻌﻠﻴﻢ ﺍﻟﺘﻘﻨﻲ المحمدية‬ ‫ﺍ‬
Technique Mohammedia
Université Hassan II de Casablanca
ENSET ‫ﺟﺎﻣﻌﺔ ﺍﻟﺤﺴﻦ ﺍﻟﺜﺎﻧﻲ ﺑﺎﻟﺪﺍﺭ ﺍﻟﺒﻴﻀﺎﺀ‬

9. Écrire un script docker-compose.yml pour le déploiement de ce


système distribué dans des conteneurs docker.

● L'installation

- J'ai télécharger et installer Docker pour Windows depuis le site officiel


https://hub.docker.com

- Après l'installation afin de vérifier si le Docker est en cours d'exécution ou non

docker –v

- Voici les commandes pour générer l'image Docker


FROM openjdk:8
ADD target/dockerEureka.jar dockerEureka.jar
EXPOSE 8761
ENTRYPOINT ["java", "-jar" , "dockerEureka.jar" ]

- La signification
FROM extraire openjdk du référentiel Docker.
ADD copiera le build jar du dossier cible vers le dossier racine du Docker.
EXPOSE exposera le port 8761.
ENTRYPOINT exécutera la commande donnée.

● Dockeriser les microservices


docker build -f Dockerfile -t dockerEureka
docker build -f Dockerfile -t dockerGateway
docker build -f Dockerfile -t dockerSecurity
docker build -f Dockerfile -t customerService
Ecole Normale Supérieure de l’Enseignement ‫ﻟﻤﺪﺭﺳﺔ ﺍﻟﻌﻠﻴﺎ ﻸﺳﺎﺗﺬﺓ ﺍﻟﺘﻌﻠﻴﻢ ﺍﻟﺘﻘﻨﻲ المحمدية‬ ‫ﺍ‬
Technique Mohammedia
Université Hassan II de Casablanca
ENSET ‫ﺟﺎﻣﻌﺔ ﺍﻟﺤﺴﻦ ﺍﻟﺜﺎﻧﻲ ﺑﺎﻟﺪﺍﺭ ﺍﻟﺒﻴﻀﺎﺀ‬

● La configuration MySQL
Nous allons maintenant créer et exécuter une image de la base de données MySQL.
Depuis mon terminal, j'ai exécuté la commande ci-dessous. Ici, -d dans cette commande
indique que la commande Docker s'exécutera en mode détaché.

Pour chaque microservice je vais créer son propre image de base de données

Microservice 1 Customer-service

docker run -d -p 6033:3306 --name=mysql-docker-customer


--env="MYSQL_ROOT_PASSWORD=root" --env="MYSQL_PASSWORD=root"
--env="MYSQL_DATABASE=customerdb" mysql

Microservice 2 Inventory-service

docker run -d -p 6033:3307 --name=mysql-docker-inventory


--env="MYSQL_ROOT_PASSWORD=root" --env="MYSQL_PASSWORD=root"
--env="MYSQL_DATABASE=inventorydb" mysql

Espérons que l'image MySQL est extraite et exécutée en tant que conteneur. Pour
vérifier cela, nous pouvons faire run. Nous pouvons vérifier cela en utilisant la commande
docker container ls. Nous pouvons maintenant vérifier en nous connectant à MySQL

docker exec -it mysql-docker-customer bash

docker exec -it mysql-docker-inventory bash

(mysql-docker est le nom de la balise que nous avons donné lors de la création) Nous avons
maintenant la base de données créée à l'intérieur du docker mysql
Vous pouvez importer le sql en suivant la commande

docker exec -i mysql-docker-customer mysql -uroot -proot


customerdb<customerdb.sql

docker exec -i mysql-docker-inventory mysql -uroot -proot


inventorydb<inventorydb.sql

Exécuter le projet dans le Docker


docker run -t --link mysql-docker-customer:mysql -p 8080:8080
customerservice
Ecole Normale Supérieure de l’Enseignement ‫ﻟﻤﺪﺭﺳﺔ ﺍﻟﻌﻠﻴﺎ ﻸﺳﺎﺗﺬﺓ ﺍﻟﺘﻌﻠﻴﻢ ﺍﻟﺘﻘﻨﻲ المحمدية‬ ‫ﺍ‬
Technique Mohammedia
Université Hassan II de Casablanca
ENSET ‫ﺟﺎﻣﻌﺔ ﺍﻟﺤﺴﻦ ﺍﻟﺜﺎﻧﻲ ﺑﺎﻟﺪﺍﺭ ﺍﻟﺒﻴﻀﺎﺀ‬

--link liera le conteneur MySQL et exposera le port 8080

Maintenant, il s'ouvrira dans


http://localhost:8080/demo/user

POST
{
"username":"hajarzarguan0610"
}

File

Vous aimerez peut-être aussi