Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
51 changes: 51 additions & 0 deletions .gitlab-ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
image : node:12.22.9

cache:
untracked: true
key: npm
policy: pull-push
paths:
- .npm/

stages:
- build
- test

#-------------------------- Meal
setup_meal:
stage: build
script:
- cd doodlestudent-main/api_meal/
- npm install --cache .npm --prefer-offline

testing_meal:
stage: test
script:
- cd doodlestudent-main/api_meal/
- npm run test:e2e

#-------------------------- Comment
setup_comment:
stage: build
script:
- cd doodlestudent-main/api_comment/
- npm install --cache .npm --prefer-offline

testing_comment:
stage: test
script:
- cd doodlestudent-main/api_comment/
- npm run test:e2e

#-------------------------- Chat
setup_chat:
stage: build
script:
- cd doodlestudent-main/api_chat/
- npm install --cache .npm --prefer-offline

testing_chat:
stage: test
script:
- cd doodlestudent-main/api_chat/
- npm run test:e2e
Binary file added ArchitectureDebutProjet.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added ArchitectureDebutProjetAvecBDD.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added ArchitectureFinProjet.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added IdentityProvider.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
144 changes: 135 additions & 9 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,14 +1,140 @@
# UR1/ESIR DevOps Course
This repository contains the material and content of the DevOps course at the engineering school ESIR of the University of Rennes 1.
# Pull Request DLC

## Year 2022-2023
Bauquin Thomas - Diamant Marius - Le Brun Briag - Nicolas Elouan

### Scheduling
L'objectif de ce TP était d'implémenter dans un projet des outils appartenant au thème des Applications Cloud Native et des Architectures en Microservices.

- Introduction to the course and DevOps: Oct. 10th, 2022
- Quick overview of DevSecOps and MLSecOps: Oct. 13th, 2022
- Final presentations: Dec. 7th, 2022 (8h-10h)
![front](front.png)

Pour cela, nous sommes partis du projet **Doodle Student**, une application permettant de créer et organiser des évennements et des réunions. Cette application est microservicisée, utilise un back développé en Quarkus, et qui orchestre les microservices, plusieurs microservices développé en Nest JS et un front développé en Angular.

Pour ce TP, nous avons décidé d'ajouter un service d'authorisation à l'application en utilisant **OAuth2** et **OpenIdConnect**.

Nous avons également décider de déployer quatre des microservices sur des machines virtuelles de l'istic.

## Comment utiliser l'application
L'application est divisée en deux parties : le backend et le frontend.

### Front-End
#### Prerequis
- `npm` installé, pour l'installer `sudo apt install npm` pour Ubuntu and pour Red-Hat `sudo dnf install npm`.

#### Installer

Dans le dossier front, lancer `npm install` pour télécharger les dépendances puis lancer `ng serve` pour lancer le serveur.

Vous pouvez désormais vous connecter à l'adresse http://localhost:4200/ .
Pour l'instant, c'est impossible d'utiliser l'entièreté de l'application car il faut lancer le backend.

### Back-end
Le backend utilise plusieurs microservices. Pour lancer le backend, il faut lancer le script `./launchApp.sh`. Il faut au préalable, modifier ce fichier avec les bons chemins.

#### Prerequisite
- JDK11
- Docker
- Docker-compose

#### Authentification

La partie authentification utilise les technologies OAuth2 et OpenIdConnect.

#### OAUth

OAuth est un protocole libre qui permet aux développeurs d’une application (web ou logicielle) d’implémenter un accès sécurisé (par authentification) à un service tiers. Il permet ainsi à l’utilisateur d’utiliser les informations d’un autre site web ou application (son compte Google par exemple, site “fournisseur”) sur notre site web (site “consommateur”). Et cela, sans partager son nom d'utilisateur et son mot de passe avec l'application tiers.

#### OpenID Connect

OpenID Connect 1.0 est une couche d'identité simple qui s'ajoute au protocole OAuth 2.0. Elle permet aux clients de vérifier l'identité de l'utilisateur final sur la base de l'authentification effectuée par un serveur d'autorisation, ainsi que d'obtenir des informations de base sur le profil de l'utilisateur final d'une manière interopérable et de type REST.

OpenID Connect permet aux clients de tous types, y compris les clients Web, mobiles et JavaScript, de demander et de recevoir des informations sur les sessions et les utilisateurs finaux authentifiés. La suite de spécifications est extensible, ce qui permet aux participants d'utiliser des fonctions facultatives telles que le cryptage des données d'identité, la découverte des fournisseurs OpenID et la déconnexion, lorsque cela s'avère utile pour eux.

Le bouton login redirige vers un server distant gérant l'authentification (Identity Provider). Le serveur d'authenfication utilisé est un serveur créé arbitrairement avec un seul utilisateur ajouté : identifiant : **max**, mot de passe : **geheim**.

![ServerIdentityProvider](IdentityProvider.png)

Une fois la personne connectée, la personne obtient un token et elle est redirigée vers le composant Angular `Home` de l'application.


## Comment créer une VM ISTIC

Sur https://vm.istic.univ-rennes1.fr/, faire une demande de création de VM avec Ubuntu comme OS. Un mail est ensuite envoyé. Il indique différents détails sur le fonctionnement des VM et comment changer le mot de passe par défaut.

![VM](VM.png)

Pour accéder à la VM, il faut être connecté au réseau de l'Istic, et se connecter via la commande SSH : ssh Identifiant@AdresseIP

ex: `ssh zprojet@XX.XX.XX.XX`. Il faut ensuite entrer le mot de passe de la VM.

## Comment migrer et déployer un micro service sur la vm

Les 4 micros services fonctionnant dans le cloud (VM de l'ISTIC) sont développés en NestJS. Pour les déployer sur les VM, nous devons installer sur les VM `PM2` via NPM.

`sudo npm install -g pm2`

PM2 est un gestionnaire de processus pour les applications Node.js. Il permet de gérer et de maintenir en fonctionnement les applications Node.js en les exécutant en arrière-plan de manière permanente, tout en offrant des fonctionnalités avancées telles que la surveillance en temps réel, la répartition de la charge sur plusieurs CPU, la journalisation en temps réel et l'intégration avec des services de surveillance pour détecter les problèmes et en avertir les administrateurs. PM2 est un outil pratique pour les développeurs et les administrateurs système qui souhaitent gérer efficacement des applications Node.js en production.

On construit nos microservices pour les rendre exécutable :

`npm run build`

Nous déployons le service :

`pm2 start npm --name "app-name" -- start`

Maintenant pour qu'il soit accessible depuis l'extérieur, nous allons installer et configurer Apache :

`sudo apt install apache2`

Apache est un serveur Web open source utilisé pour héberger des sites Web et des applications en ligne. Il permet de gérer les requêtes HTTP entrantes et de fournir des pages Web et d'autres contenus aux utilisateurs via un navigateur Web. Apache est connu pour sa fiabilité, sa flexibilité et sa capacité à s'adapter à des environnements de serveur variés. Il est souvent utilisé en conjonction avec d'autres technologies Web telles que PHP et MySQL pour construire des sites Web dynamiques et interactifs.

On active les deux modules proxy et proxy_http :

`sudo en2mod proxy`

`sudo a2enmod proxy_http`

Pour appliquer les modifications, on relance Apache :

`sudo service apache2 restart`

Pour rendre accessible le service, il faut modifier le fichier de configuration d'Apache :

`sudo nano /etc/apache2/sites-available/domain.conf`

``` xml
<VirtualHost :80>
ServerName domain.com => ServerName ip-address-vm
ServerAlias www.domain.com => ServerAlias url-vm-istic

ProxyRequests Off
ProxyPreserveHost On
ProxyVia Full

<Proxy>
Require all granted
</Proxy>

ProxyPass / http://localhost:3000/
ProxyPassReverse / http://localhost:3000/
</VirtualHost>

```

Enregister les mofifications et relancer Apache :

`sudo a2ensite domain.conf`

`sudo service apache2 restart`

Les services communiquent ainsi via requêtes HTTP (Get, Post ...).


## Comment les systèmes communiquent entre eux

Le micro service Poll qui est le service principal de cette application joue le role d'orchestrateur des autres micros services.

Le front et l'api Poll sont lancés en local et communique avec les différentes api déployées sur les VM.

![SchemaArchi](image.png)

### Material

The introduction to the course and DevOps can be found [here](https://people.irisa.fr/Benoit.Combemale/course/esir/esir3/).
Binary file added VM.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
24 changes: 24 additions & 0 deletions doodlestudent-main/.dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
**/.classpath
**/.dockerignore
**/.env
**/.git
**/.gitignore
**/.project
**/.settings
**/.toolstarget
**/.vs
**/.vscode
**/*.*proj.user
**/*.dbmdl
**/*.jfm
**/bin
**/charts
**/docker-compose*
**/compose*
**/Dockerfile*
**/node_modules
**/npm-debug.log
**/obj
**/secrets.dev.yaml
**/values.dev.yaml
README.md
9 changes: 9 additions & 0 deletions doodlestudent-main/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
FROM openjdk:8-jdk-alpine
VOLUME /tmp
ARG JAVA_OPTS
ENV JAVA_OPTS=$JAVA_OPTS
COPY target/tlcdemoApp-1.0.0-SNAPSHOT.jar doodlestudentmain.jar
EXPOSE 3000
ENTRYPOINT exec java $JAVA_OPTS -jar doodlestudentmain.jar
# For Spring-Boot project, use the entrypoint below to reduce Tomcat startup time.
#ENTRYPOINT exec java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar doodlestudentmain.jar
22 changes: 22 additions & 0 deletions doodlestudent-main/README.french.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# Doodle in quarkus

Ce repository est une application de type doodle développée avec quarkus.io pour le back et angular pour le front.

Elle initialise automatiquement un pad pour la réunion et un salon de discussion.

Le but est de faire travailler les étudiants sur la partie déploiement de ce type d'application dite cloud native.

Votre mission est de mettre en production une telle application en permettant
- qu'à chaque commit sur ce repository, si les tests passent, alors nous déployons automatiquement une nouvelle version dans un contexte (Continuous Deployement)
- que l'application doit être monitorer finement.
- que l'application redémarre automatiquement en cas de crash du serveur ou de crash d'un des services de l'application.
- que Les accès doivent http doivent utiliser https.


Une démo de l'application est accessible [ici](https://doodle.diverse-team.fr).

- Voici une petite [vidéo](https://drive.google.com/file/d/1GQbdgq2CHcddTlcoHqM5Zc8Dw5o_eeLg/preview) de présentation des fonctionnalités de l'application.
- Voici une petite [vidéo](https://drive.google.com/file/d/1l5UAsU5_q-oshwEW6edZ4UvQjN3-tzwi/preview) de présentation de l'architecture de l'application.
- Voici une petite [vidéo](https://drive.google.com/file/d/1jxYNfJdtd4r_pDbOthra360ei8Z17tX_/preview) de revue de code de l'application.

Un descriptif du cours, des TPs et des étapes du projet est lui accessible [ici](https://hackmd.diverse-team.fr/s/SJqu5DjSD)
15 changes: 15 additions & 0 deletions doodlestudent-main/Readme.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# Remote meetings planning

This project is used in a course on the *ops* part at the [University of Rennes](https://www.univ-rennes1.fr/), France. It is a kind of doodle clone developed in so-called "native cloud" technologies in order to allow students to work on a continuous deployment chain in a containerized environment. Among the feature, the application automatically initializes a pad for the meeting and a chat room for the meeting participants.

- The [back](https://github.com/barais/doodlestudent/tree/main/api) is developed using the [quarkus.io](https://quarkus.io/) framework.
- The [front](https://github.com/barais/doodlestudent/tree/main/front) is developed in [angular](https://angular.io/) using the [primeng](https://www.primefaces.org/primeng/) angular UI component library and the [fullcalendar](https://fullcalendar.io/) graphical component.

A demo of the application is available [here](https://doodle.diverse-team.fr/).

Three videos (in french) are available. They present:
- the [main application feature](https://drive.google.com/file/d/1GQbdgq2CHcddTlcoHqM5Zc8Dw5o_eeLg/preview),
- its [architecture](https://drive.google.com/file/d/1l5UAsU5_q-oshwEW6edZ4UvQjN3-tzwi/preview)
- and a [short code review](https://drive.google.com/file/d/1jxYNfJdtd4r_pDbOthra360ei8Z17tX_/preview) .

For french native speaker that wants to follow the course. The course web page is available [here](https://hackmd.diverse-team.fr/s/SJqu5DjSD).
5 changes: 5 additions & 0 deletions doodlestudent-main/api/.dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
*
!target/*-runner
!target/*-runner.jar
!target/lib/*
!target/quarkus-app/*
37 changes: 37 additions & 0 deletions doodlestudent-main/api/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
#Maven
target/
pom.xml.tag
pom.xml.releaseBackup
pom.xml.versionsBackup
release.properties
.mvn/wrapper/maven-wrapper.jar
# Eclipse
.project
.classpath
.settings/
bin/

# IntelliJ
.idea
*.ipr
*.iml
*.iws

# NetBeans
nb-configuration.xml

# Visual Studio Code
.vscode
.factorypath

# OSX
.DS_Store

# Vim
*.swp
*.swo

# patch
*.orig
*.rej

2 changes: 2 additions & 0 deletions doodlestudent-main/api/.mvn/wrapper/maven-wrapper.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.3/apache-maven-3.6.3-bin.zip
wrapperUrl=https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar
1 change: 1 addition & 0 deletions doodlestudent-main/api/APIKEY.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
19d89ca52bc0fa4f19d6325464d9d7a032649b9fa68c111514627081e2784b4a
50 changes: 50 additions & 0 deletions doodlestudent-main/api/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
# code-with-quarkus project

This project uses Quarkus, the Supersonic Subatomic Java Framework.

If you want to learn more about Quarkus, please visit its website: https://quarkus.io/ .

## Running the application in dev mode

You can run your application in dev mode that enables live coding using:
```shell script
docker-compose up --detach & ./mvnw compile quarkus:dev
```

To stop the application and its dependencies, type `ctrl+c` in the bash session and run `docker-compose down`.

## Packaging and running the application

The application can be packaged using:
```shell script
./mvnw package
```
It produces the `code-with-quarkus-1.0.0-SNAPSHOT-runner.jar` file in the `/target` directory.
Be aware that it’s not an _über-jar_ as the dependencies are copied into the `target/lib` directory.
If you want to build an _über-jar_, execute the following command:
```shell script
./mvnw clean package -Dquarkus.package.type=uber-jar
```

The application is now runnable using `java -jar target/code-with-quarkus-1.0.0-SNAPSHOT-runner.jar`.

## Creating a native executable

You can create a native executable using:
```shell script
./mvnw package -Pnative
```

Or, if you don't have GraalVM installed, you can run the native executable build in a container using:
```shell script
./mvnw package -Pnative -Dquarkus.native.container-build=true
```

You can then execute your native executable with: `./target/code-with-quarkus-1.0.0-SNAPSHOT-runner`

If you want to learn more about building native executables, please consult https://quarkus.io/guides/maven-tooling.html.

# RESTEasy JAX-RS

Guide: https://quarkus.io/guides/rest-json

Loading