chore(content): Cahier des charges - finished!

This commit is contained in:
Olivier DOSSMANN 2025-02-12 17:31:51 +01:00
parent a62c095843
commit fe3ac235d8

View File

@ -2,17 +2,21 @@
# Cahier des charges # Cahier des charges
TODO: cahier des charges Premier élément du projet sur lequel travailler : le cahier des charges.
## Contexte ## Contexte
TODO : présenter Datascientest succinctement (dans un sous titre ?) Dans le cadre d'une formation, dans l'école DataScientest, il a été demandé à des équipes composées de 3 à 5 personnes de travailler sur un projet défini, cadré et suivant un certain nombre de contraintes dont nous allons parler ici.
Le cahier des charges a été la première réflexion sur le projet.
### Dans le cadre d'une formation ### Dans le cadre d'une formation
[Datascientest]{#datascientest} [Datascientest]{#datascientest} est une école de formation créée en 2017, située sur Paris et proposant plus de 18 formations différentes, dont Administrateur Système DevOps.
TODO: compléter ici ce que Datascientest fait Plusieurs formats de formation existent parmi Bootcamp, continu et en alternance. Ce projet est un exercice de fin de formation proposé à tous les élèves de la « cohorte » (équivalent d'une classe).
Plusieurs élèves se regroupent autour d'un projet auquel ils ont un intérêt commun.
### L'équipe DevU42 {#devu42} ### L'équipe DevU42 {#devu42}
@ -31,6 +35,8 @@ L'équipe a été supervisée et suivie par [Jérémie Tarot sous la dénominati
### Organisation d'équipe ### Organisation d'équipe
Pour s'organiser, l'équipe s'est doté de plusieurs outils et suivi quelques méthodologies.
#### Rapports hiérarchiques #### Rapports hiérarchiques
Léquipe s'articule autour de membres ayant le même degré de responsabilités et d'objectifs. Leur périmètre et leur champ d'action est similaire qu'il s'agisse de déterminer les tickets à prendre en charge, les axes de travail à rajouter au projet ou bien de nouveaux objectifs. Léquipe s'articule autour de membres ayant le même degré de responsabilités et d'objectifs. Leur périmètre et leur champ d'action est similaire qu'il s'agisse de déterminer les tickets à prendre en charge, les axes de travail à rajouter au projet ou bien de nouveaux objectifs.
@ -42,7 +48,7 @@ En cas de désaccord sur un sujet, une décision est prise à la majorité votan
La géolocalisation des membres de l'équipe étant éparse, plusieurs moyens de communication en ligne ont été nécessaires, parmi : La géolocalisation des membres de l'équipe étant éparse, plusieurs moyens de communication en ligne ont été nécessaires, parmi :
* Canaux de discussions sur [Slack](https://slack.com/intl/fr-fr/) fournis initialement par [Datascientest](#datascientest) : * Canaux de discussions sur [Slack](https://slack.com/intl/fr-fr/) fournis initialement par [Datascientest](#datascientest) :
* canal du projet - sep24_bootcamp_devops : favorise l'échange entre [DevU42](#devu42) et le [Mentor](#mentor), * canal du projet - sep24_bootcamp_devops : favorise l'échange entre [DevU42](#devu42) et le [Mentor](#mentor),
* canal d'équipe - devu42 : pour les discussions techniques, les choix déccisifs et de la bonne humeur ! * canal d'équipe - devu42 : pour les discussions techniques, les choix déccisifs et de la bonne humeur !
* Un nom de domaine, **devu42.fr**, * Un nom de domaine, **devu42.fr**,
* Une boîte courriel, <team@devu42.fr> partagée pour la gestion des services, * Une boîte courriel, <team@devu42.fr> partagée pour la gestion des services,
@ -71,148 +77,194 @@ Après livraison, lamélioration du projet en continu se fera sur **6 semaine
## Le projet ## Le projet
Le point de départ du projet est un dépôt de version contenant une application à mettre en ligne. Justification du projet, l'application elle-même, ambitions et objectifs sont des points à soulever.
### Justification du projet ### Justification du projet
Le projet sinscrit dans le cadre suivant&nbsp;: L'école de formation [DataScientest](#datascientest) s'éverture à proposer une situation proche de la réalité afin que l'équipe nouvellement formée puisse apprendre par la pratique.
Une entreprise a besoin que son application de gestion dutilisateur soit portée par les pratiques DevOps, pour faire évoluer son service. On imagine ainsi le cadre suivant&nbsp;:
De nombreux problèmes sont constatés avec la façon de fonctionner actuelle&nbsp;: > Une entreprise ayant une application de gestion dutilisateur souhaite déployer et faire évoluer son service en favorisant les bonnes pratiques suivies dans la culture DevOps.
* Reprise dactivité lente, coûteuse et avec des pertes dinformations importantes De la même manière, on imagine de l'entreprise une façon de fonctionner ayant de nombreux problèmes&nbsp;:
* Stabilité et disponibilité du service vulnérable
* Capacité limitée à encaisser les charges soudaines de trafic * Reprise dactivité lente, coûteuse et avec pertes dinformations,
* Absence de supervision efficace, et de capacité à prévoir les problèmes * Service instable, disponibilité non garantie, vulnérabilité du service,
* Manque de contrôle sur la qualité du code, et les procédures de développement * Capacité limitée pour encaisser des augmentations ponctuelles de la charge et du trafic,
* Grande perte de temps lié aux nombreuses actions manuelles et aux erreurs humaines * Absence de supervision et faible capacité à prévoir les problèmes,
* Possibilité dévolution limité par le manque de portabilité * Manque de contrôle sur la qualité du code ; procédures de développement pouvant être améliorées par l'automatisation,
* Lenteur de limplémentation de nouvelles fonctionnalité, et interruptions de service * Perte de temps et erreurs humaines liées aux actions manuelles,
* Manque de portabilité de l'application d'un système à l'autre,
* Lenteurs dimplémentation de nouvelles fonctionnalité avec interruptions de service.
Pour bien saisir l'état des lieux de ladite application, regardons de plus près.
### Application existante ### Application existante
Lapplication FastAPI-Træfik est fournie avec les éléments principaux suivants : Lapplication FastAPI-Træfik est fournie avec les éléments principaux suivants :
* BackEnd FastAPI (en Python) * BackEnd FastAPI (en Python),
* FrontEnd (Interface de gestion et denregistrement dutilisateurs. Statique, Utilise React, Vite.js, Chakra UI.) * FrontEnd (Interface de gestion et denregistrement dutilisateurs. Statique, Utilise React, Vite.js, Chakra UI.),
* Base de données * Base de données postgreSQL,
* Traefik (Proxy inverse) * et Traefik (Proxy inverse).
Tout ceci est déposé dans un dépôt de version avec de la documentation en fichier Markdown (*.md) bruts.
De simples fichiers Docker et docker-compose.yml permettent aux développeurs de lancer l'application localement.
Une procédure existe pour expliquer comment manuellement mettre l'application en production sur une machine serveur dédiée.
Mais le projet voit plus loin.
### Ambitions ### Ambitions
* Répondre aux problématiques de lapplication existante par la méthode DevOps. En dehors des objectifs à atteindre, le projet vise à&nbsp;:
* Répondre aux attentes de lexamen en matière de compétences attendues.
* Démontrer un savoir-faire technique sur les sujets principaux du Cloud dont AWS. * répondre aux problématiques de lentreprise sur l'application existante par la méthode DevOps,
* Appliquer une méthode de travail qui optimise lefficacité de la production des livrables. * répondre aux attentes de lexamen en matière de compétences attendues (méthode d'apprentissage par la pratique),
* démontrer un savoir-faire technique sur les sujets principaux du DevOps, notamment vis à vis du Cloud en utilisant AWS,
* appliquer une méthode de travail qui optimise lefficacité de la production des livrables.
C'est de ces ambitions que naîssent plusieurs objectifs spécifiques.
### Objectifs ### Objectifs
* Porter lapplication sur le cloud, avec une architecture réseau dans le respect du budget. D'après moi, ce projet à plusieurs objectifs&nbsp;:
* Assurer une reprise dactivité en un minimum de temps.
* Déployer automatiquement et en continu avec des fichiers modularisés. * balayer l'ensemble des sujets liés à la culture DevOps et ses méthodes,
* Sauvegarder les données pour garantir leur conservation en cas de sinistre. * porter, puis déployer une application sur le cloud,
* Etablir une sécurité multi-niveau qui garantisse lintégrité de lapplication et de larchitecture, sans * préparer une architecture complète pour accueillir une à plusieurs applications,
handicaper les travailleurs dans leur travail au quotidien. * respecter un budget et des limites de temps,
* Rendre le système résilient, en assurant son auto-scalabilité et sa haute disponibilité. * déployer en continu un projet en passant par une phase de test, de pré-production puis de production,
* Automatiser lessentiel des actions pour limiter les erreurs humaines et gagner du temps. * penser à la gestion de la donnée,
* Rendre le contrôle du code et des versions, systématique. * superviser un système déployé en production avec des tableaux de bord efficaces,
* Mettre en place des solutions de supervisions et des tableaux de bord efficaces. * rendre un système résilient en prenant en compte les augmentations ET les diminution de charges et par une haute disponibilité,
* Mettre en place un système dalertes pour détecter les problèmes au plus tôt. * automatiser la plupart des actions afin de limiter les erreurs humaines,
* procéder, de manière automatique, à des vérifications sur la sécurité des éléments produits et déployés,
* favoriser une collaboration plus fluide entre les équipes de développements et les équipes d'opérations,
* et obtenir des alertes en cas de défaillance d'un ou plusieurs éléments du système.
Ce sont des objectifs plutôt ambitieux pour un temps aussi court. Un travail d'équipe et une organisation sont totalement nécessaires.
## Planification ## Planification
C'est par le [mentor](#mentor) que nous avons reçu un plan d'action pour les 7 semaines de travail et une liste de livrables attendus. Nous avons adapté ce plan d'action pour nous correspondre.
### Étapes de travail ### Étapes de travail
Semaine 1 : Choix du projet Voici le détail de chaque étape de travail.
* Constitution des groupes par lorganisme de formation #### Semaine 1&nbsp;: Cadrage
* Choix du projet par le groupe nouvellement formé
* Découverte de lapplication en détail
* organisation de léquipe
* choix des outils principaux et prise en main de ces derniers
Semaine 2 : Planification Sous le signe de l'encadrement, cette première semaine est dite « douce »&nbsp;:
* Etablissement du présent cahier des charges * réunion de prise de contact, présentation et cadrage,
* Prise en main de lapplication * introduction de chaque membre du projet,
* Conception des schémas * découverte de l'application,
* Choix des différents outils qui seront explorés les semaines suivantes * analyse du sujet,
* Mise en place de lorganisation sur GitLab, et des procédures de travail * évaluation du contexte, des objectifs et du périmètre du projet,
* Attribution de tâches par individu * et rédaction du premier jet du présent cahier des charges.
* Exploration de projets similaires
* Décider dune première approche pour lautomatisation gitlab-ci
* Décider des futurs repo/registry pour les images et les charts.
Semaine 3 : Automatisation de la chaine dintégration et de livraison Il faut ce temps pour découvrir de quoi il retourne.
* Adoption de la méthode GitOneFlow #### Semaine 2&nbsp;: Planification
* Mise en œuvre des deux environnements séparés Stagging et Prod
* Développement des processus dautomatisation des :
- Tests
- Constructions/Compilations
- Livraison
- Déploiement
* Mise en place de la promotion de version (basé sur Sem Ver)
* Produire un schéma clair résumant nos dépôts et nos pipelines sur Gitlab.
Semaine 4 : Conception de lInfrastructure Vient ensuite une phase d'organisation avec&nbsp;:
* Définir la couche réseau de linfrastructure sur AWS en haute disponibilité * définition du contexte, des objectifs et du périmètre du projet,
* Assurer la sécurité des éléments de la couche réseau * organisation des exigences,
* Prévoir une future solution de stockage * identification des composants d'architecture,
* Adopter une solution de backup * choix de solutions à implémenter,
* Définir la distribution de Kubernetes à employer, et la déployer. * et définition de l'architecture et les spécifications du système cible.
* Gestion des secrets
* Générer la redirection vers notre propre nom de domaine
* Objectif : Infrastructure As Code
Semaine 5 : Gestion des données Ce qui amène à compléter le cahier des charges.
* Appliquer la méthode de stockage de données choisie Nous prévoyons aussi&nbsp;:
* Définir les politiques dauthentification, dautorisation et de contrôle daccès
* Assurer une journalisation
* Garantir la sauvegarde des données, et leur restauration en cas de sinistre
* Mettre en place la scalabilité de la solution choisie.
* Tester laccessibilité des données par lapplication
Semaine 6 : Observabilité et Alertes * une configuration de Gitlab, des principaux dépôts Gitlab, des branches, etc.,
* de s'organiser en équipe&nbsp;: définir des méthodologies à suivre.
* Choisir une solution de monitoring #### Semaine 3&nbsp;: Automatisation de la chaine dintégration et de livraison
* Définir les données danalyse du système dans sa globalité, et multi-environnement
* Créer des tableaux de bord pratiques et simples dinterprétation
* Attribuer des alertes à certaines métriques
* Tester des situations anormales pour constater si les alarmes se déclenchent correctement
Semaine 7 : Préparer la communication Une fois les outils principaux mis en place, il s'agit d'automatiser certaines choses&nbsp;:
* Mettre à jour les schémas as code (Mermaid et Draw.io) * automatisation des tests pour le backend et le frontend,
* Création du support de diapositives as code * création d'image Docker pour le backend,
* Rédaction de la présentation, et entrainement individuel * création d'image Docker pour le frontend,
* Tests de fonctionnement de limplémentation dune nouvelle fonctionnalité * automatisation des images Docker et de leur publication sur des registres,
* Mise en commun des compétences et des connaissances en vue de la présentation * création de chart Helm pour le backend,
* Fabrication dun logo déquipe * création de chart Helm pour le frontend,
* Résolution des dernières améliorations * automatisation de la création des chart Helm et de leur publication,
* et automatisation de la création de l'infrastructure (même si elle n'est pas encore clairement définie).
### Livrables attendus L'adoption d'un workflow pour la gestion des branches Git est la bienvenue.
Documents informatifs&nbsp;: #### Semaine 4&nbsp;: Conception de linfrastructure
* Cahier des charges Vient ensuite la création de la couche basse de l'infrastructure&nbsp;:
* Support de communication diapositive
* Schéma pour chaque préoccupation majeure
* Dossier de projet
Gitlab&nbsp;: * création d'un schéma de la couche basse de l'infrastructure,
* description de cette infrastructure via des modules adaptés et en adoptant l'Infrastructure as Code (IaC),
* premiers choix de solutions pour le stockage, les sauvegardes, la supervision et l'environnement d'accueil de l'application,
* activation des certificats Let's Encrypt,
* liaison avec le nom de domaine,
* et mise à l'échelle automatique.
* Registre dimages docker Une semaine n'est pas suffisante pour traiter tous les sujets. En revanche cela permet de les aborder et d'échanger sur ces derniers.
* Dépôt pour les charts
* Dépôt de lapplication initiale
* Ensemble des fichiers de déploiement de larchitecture et des environnement modularisés
* Pipelines (Gitlab-ci)
* Le dépôt du projet
Lapplication&nbsp;: #### Semaine 5&nbsp;: Gestion des données
* Laccès au backend La semaine 5 passe par&nbsp;:
* Laccès sécurisé https à notre Frontend
* Le tout via notre propre nom de domaine
* créer et configurer des ressources de stockage de données,
* mise en place de politique d'authentification et d'autorisation,
* import des données,
* et installer et configurer une solution de sauvegarde et de restauration de données.
Rien de très particulier à ce niveau là.
#### Semaine 6&nbsp;: Observabilité et alertes
Quant à la semaine 6, nous avons principalement la supervision à gérer&nbsp;:
* configuration du système de supervision centralisé,
* mise en place d'une collecte de surveillance pertinente pour l'application,
* choix des métriques à utiliser pour la création de tableaux de bords,
* création des tableaux de bords,
* définition des niveaux d'alertes pour les métriques choisis,
* mise en place des alertes,
* et envoi des alertes sur les canaux choisis.
Ces éléments pourront être complétés et étendus une fois la solution principale de supervision configurée.
#### Semaine 7&nbsp;: Présentation de la solution finale
Cette dernière semaine ciblera la présentation et le lancement officiel de l'application. Il faudra donc&nbsp;:
* compléter les documentations,
* mettre à jour les schémas en fonction d'éventuels changements,
* préparer un support visuel de présentation du projet,
* veiller à ce que l'application tourne sans accrocs pour la présentation,
* et résoudre les derniers problèmes majeurs connus - s'ils existent.
C'est un plan assez ambitieux quand on considère que les membres de l'équipe proviennent d'horizons et de formations variées.
### Livrables
Sont attendus les éléments suivants&nbsp;:
* un cahier des charges,
* une présentation par diapositives pour le lancement de l'application,
* une application déployée en production, sans bugs,
* un système de supervision de la production,
* une gestion des données avec un système de sauvegarde,
* un schéma de la couche basse de l'infrastructure utilisée dans le Cloud pour la production,
* un accès aux dépôts et scripts permettant l'automatisation du déploiement de l'application et de la génération des différents éléments (images Docker, Chart Helm, registres, etc.),
* et un fonctionnement en haute disponibilité de l'application.
## Conclusion
Le projet couvre beaucoup de situations et domaines autour de l'automatisation et la mise en production, dans le Cloud, d'une application avec une supervision et une mise à l'échelle de cette dernière.
En groupe, c'est un projet idéal pour suivre l'« apprentissage par la pratique » proposée par [DataScientest](#datascientest) et couvrir un maximum de compétences demandées pour le Titre Professionnel d'Administrateur Système DevOps.