Historique des versions
| Version | Date | Rédacteur | Description |
|---|---|---|---|
1.0.0 |
18/06/2026 |
Équipe Technique |
Version initiale |
1.1.0 |
11/10/2026 |
Équipe Technique |
Mise à jour d’ensemble. Les cas d’utilisation, les règles de gestion et les scénarios de recette sont alignés sur le comportement attendu de la solution. Les schémas de données, les vues d’exécution et les diagrammes de séquence sont repris sur le modèle et les échanges livrés. Le dictionnaire des données est ramené aux tables structurantes, le modèle complet étant porté en annexe. Les documents sont mis en cohérence entre eux sur les statuts, les rôles, les interfaces et les nomenclatures. |
Diffusion
| Destinataires | Pour validation | Pour information |
|---|---|---|
COPIL |
X |
Validation
| Représentants | Valideur | Date |
|---|---|---|
DCE |
||
MND |
||
ASIN |
||
MESRS - DSI |
||
UNIVERSITÉS - DSI |
||
DSI Présidence |
1. Contexte et Enjeux
1.1. Finalité de l’Application
La plateforme BDES (Base de Données de l’Enseignement Supérieur) est un système d’information unifié pour la gestion de la qualité de l’enseignement supérieur et l’évaluation du personnel enseignant et chercheur au Bénin.
1.1.1. Contexte
La DCE (Délégation au Contrôle et à l’Éthique) a pour mission le contrôle, l’évaluation et l’assurance qualité de l’enseignement supérieur au Bénin. Les données de l’enseignement supérieur sont dispersées entre MESRS, universités publiques (UPB), établissements privés (EPES) et MTFP, rendant difficile le pilotage stratégique du secteur.
1.1.2. Modules de la plateforme
La plateforme BDES se compose de deux modules autonomes et complémentaires :
| Module | Description |
|---|---|
bdes-evaluation |
Digitalisation du processus d’évaluation du personnel enseignant-chercheur : constitution des dossiers, commissions techniques d’évaluation (CTE), évaluations pédagogiques anonymes par les étudiants, validation finale DCE. |
bdes-referentiel |
Référentiel consolidé des données de l’enseignement supérieur : établissements, enseignants, étudiants, programmes académiques. Exposé via X-ROAD pour l’interopérabilité inter-administrations. |
1.1.3. Composants de support
En complément des modules métier, le projet comprend des composants transverses :
| Composant | Description |
|---|---|
bdes-infra |
Playbooks Ansible et manifestes Kubernetes pour le déploiement de l’infrastructure (livrable projet). |
bdes-keycloak-terraform |
Configuration as code (Terraform) pour le provisionnement Keycloak : realms, clients, rôles, mappers. |
bdes-keycloak-theme |
Thème Keycloak personnalisé pour respecter la charte graphique BDES. |
bdes-keycloak-event-listener-spi |
Extension Keycloak (SPI) pour la propagation des événements utilisateur vers users-api-ms. |
bdes-migration |
Scripts de migration des données existantes depuis les bases DCE legacy. Voir Stratégie de Migration. |
bdes-reporting |
Tableaux de bord et rapports décisionnels (TDR 4.1.6.1.e), servis par Metabase. |
1.1.4. Stratégie technique
Architecture microservices cloud-native sur Kubernetes, avec interopérabilité X-ROAD pour l’échange sécurisé inter-administrations. Le module bdes-referentiel est provider X-ROAD pour les consommateurs externes ; les services de la plateforme consomment le référentiel par appel de service à service.
1.2. Contenu du Document
Ce document décrit l’architecture technique de la plateforme BDES, couvrant :
-
L’architecture fonctionnelle et les processus métiers
-
L’architecture applicative (services, frameworks, interfaces)
-
L’architecture des données
-
L’architecture physique (infrastructure, hébergement)
-
Les aspects sécurité
-
La haute disponibilité et les stratégies de migration
-
Les modalités d’exploitation
1.3. Limites du Document
Ce document ne couvre pas :
-
Les spécifications fonctionnelles détaillées (voir SFD bdes-evaluation et SFD bdes-referentiel)
-
Les spécifications techniques détaillées par module (voir STD bdes-evaluation et STD bdes-referentiel)
-
Les guides d’exploitation et runbooks (documentation exploitation séparée)
1.4. Planning
Le planning détaillé du projet (phases, jalons, livrables) est documenté dans le Rapport de Cadrage.
1.5. Parties Prenantes
1.5.1. Gouvernance (COPIL)
Le Comité de Pilotage assure la gouvernance du projet avec prise de décisions collégiales.
| Organisation | Rôle |
|---|---|
DCE |
Commanditaire, maîtrise d’ouvrage |
ASIN |
Maîtrise d’ouvrage déléguée, validation technique, gestion X-ROAD |
MND |
Gouvernance SI gouvernemental, conformité standards nationaux |
DSI Présidence |
Hébergement infrastructure datacenter |
MESRS |
Tutelle enseignement supérieur, source autoritaire principale |
IT-NUM |
Prestataire développement et support technique (1ère année) |
1.5.2. Acteurs Métier
| Rôle | Partie prenante | Domaine d’intérêt |
|---|---|---|
Administrateur Technique |
Équipe technique BDES |
Administration de la plateforme, gestion des utilisateurs, maintenance, support |
Délégué DCE |
Membre de la DCE |
Gestion des campagnes, affectation des évaluateurs, validation des dossiers |
Enseignant |
Corps enseignant des établissements supérieurs |
Constitution et soumission de dossiers d’évaluation, consultation des retours |
Étudiant |
Étudiants des établissements supérieurs |
Évaluation anonyme de la qualité pédagogique des enseignants |
Évaluateur |
Enseignants-chercheurs désignés |
Évaluation des pairs, rédaction de rapports d’expertise, participation aux CTE |
Superviseur CTE |
Enseignants seniors ou experts |
Coordination du CTE, validation collégiale des rapports |
Responsable Académique |
Chefs de département, Vice-Doyens |
Suivi des enseignants de leur UFR, consultation des évaluations |
Admin Référentiel |
Équipe technique bdes-referentiel |
Gestion quotidienne du référentiel, résolution des doublons, validation des données |
1.5.3. Sources Autoritaires de Données
| Source | Données fournies |
|---|---|
MESRS |
Établissements, programmes, accréditations, nomenclatures officielles |
UPB (Universités Publiques) |
Enseignants, étudiants, programmes (UAC, UP, UNA, UNSTIM, etc.) |
EPES (Établissements Privés) |
Données des établissements privés d’enseignement supérieur |
MTFP |
Données RH des enseignants titulaires du secteur public |
ANIP |
Validation du NPI (Numéro Personnel d’Identification) |
1.5.4. Acteurs Exploitation
| Équipe | Rôle | Périmètre | Contact |
|---|---|---|---|
Équipe Infrastructure |
Administration système |
Serveurs, Kubernetes, réseau |
IT-NUM puis |
Équipe DBA |
Administration BDD |
PostgreSQL, sauvegardes |
IT-NUM puis |
Équipe Applicative |
Support applicatif |
Microservices, incidents N2/N3 |
IT-NUM puis |
1.6. Besoins et Attentes
1.6.1. Besoins Fonctionnels
Les besoins fonctionnels sont détaillés dans les spécifications par module :
-
SFD bdes-evaluation : Campagnes d’évaluation, dossiers enseignants, CTE, évaluations pédagogiques anonymes, validation DCE
-
SFD bdes-referentiel : Référentiel de données consolidé, gestion des sources autoritaires, exposition X-ROAD
1.6.2. Exigences Non-Fonctionnelles
| Exigence | Description | Cible | Réf. TDR |
|---|---|---|---|
Performance |
Temps de traitement par transaction |
< 5 secondes |
4.1.6.2 |
Disponibilité |
Disponibilité même en période de forte sollicitation |
- |
4.1.6.1 |
Qualité code |
Taux d’erreurs dans le code |
< 5% |
4.1.6.1 |
Couverture fonctionnelle |
Fonctionnalités principales développées |
90% |
4.1.6.1 |
Couverture tests |
Tests fonctionnels |
95% |
4.1.6.5 |
Intégration données |
Taux de réussite des intégrations |
95% |
4.1.6.2 |
Sécurité |
Conformité aux exigences gouvernementales |
Validation ASIN |
4.1.7.3 |
Interopérabilité |
Échange de données inter-administrations |
X-ROAD (XROADBJ) |
4.1.6.3 |
Ergonomie |
Interface intuitive, responsive design, support multilingue |
FR/EN |
- |
1.6.3. Contraintes Techniques
-
Hébergement souverain : Datacenter d’État - DSI Présidence (TDR 4.1.6.6)
-
Conformité sécurité : Validation ASIN obligatoire (TDR 4.1.7.3)
-
Interopérabilité : X-ROAD (XROADBJ) prioritaire pour échanges inter-administrations (TDR 4.1.6.3)
-
Authentification : SSO centralisé
-
Maintenance : 12 mois de garantie après réception définitive (TDR 4.8)
-
Propriété intellectuelle : Code source propriété de la DCE (TDR 4.1.6.8)
2. Architecture Fonctionnelle
2.1. Vue d’ensemble des Domaines Fonctionnels
La plateforme BDES se structure en cinq domaines fonctionnels principaux :
| Domaine | Description |
|---|---|
Évaluation |
Gestion des campagnes, dossiers enseignants, commissions CTE, évaluations pédagogiques, validations DCE |
Référentiel |
Consolidation et exposition des données de référence (établissements, enseignants, programmes) via X-ROAD |
Utilisateurs |
Gestion des identités, réconciliation multi-sources, demandes de rôles |
Notifications |
Envoi de notifications email, gestion des templates |
Reporting |
Visualisation des données et statistiques, exports (CSV, Excel, PDF) - TDR 4.1.6.1.e |
2.2. Processus Métier
|
Les processus métier sont détaillés dans les Spécifications Fonctionnelles Détaillées (SFD) de chaque module. |
2.2.1. Module bdes-evaluation
Processus de bout en bout : Création campagne → Constitution dossier → Évaluation CTE → Validation DCE
Flux principaux :
-
Création et activation de campagne
-
Constitution et soumission de dossier
-
Assignation à un CTE
-
Évaluation par le CTE
-
Validation par le Délégué DCE
-
Évaluations pédagogiques anonymes par les étudiants
2.2.2. Module bdes-referentiel
Processus de consolidation : Sources autoritaires → Validation → Déduplication → Données GOLDEN → Exposition API
Flux principaux :
-
Alimentation depuis les sources (API, dépôts Excel, synchronisation)
-
Détection et résolution des doublons
-
Exposition via X-ROAD pour les consommateurs
2.3. Points d’Entrée
| Interface | URL | Usage |
|---|---|---|
Application Web Évaluation |
|
Interface utilisateurs (enseignants, évaluateurs, DCE) |
Application Web Référentiel |
|
Interface administration données référentielles |
API Gateway |
|
Point d’entrée API REST |
Keycloak |
|
Authentification SSO |
2.4. Flux Internes
2.4.1. Matrice des Flux
| Source | Destination | Protocole | Port | Description |
|---|---|---|---|---|
Navigateur |
HAProxy |
HTTPS |
443 |
Accès IHM Frontend |
Navigateur |
Keycloak |
HTTPS |
443 |
Authentification OIDC/SSO |
Frontend |
API Gateway |
HTTPS |
443 |
Appels API avec JWT |
API Gateway |
Keycloak |
HTTPS |
443 |
Validation tokens JWT |
API Gateway |
Microservices |
HTTP |
8080 |
Routage interne |
Microservices |
PostgreSQL |
JDBC |
5432 |
Persistance données |
Microservices |
Kafka |
TCP |
9092 |
Événements asynchrones |
Microservices |
Redis |
TCP |
6379 |
Cache distribué |
Microservices |
MinIO |
HTTPS/S3 |
443 |
Stockage fichiers |
Microservices |
SMTP |
SMTP |
587 |
Notifications email |
bdes-evaluation |
X-ROAD Security Server |
HTTPS |
5500 |
Interopérabilité gouvernementale |
X-ROAD Security Server |
bdes-referentiel |
HTTPS |
5500 |
Requêtes des consommateurs externes relayées vers le référentiel |
Prometheus |
Microservices |
HTTP |
8081 |
Scraping métriques |
3. Architecture Applicative
3.2. Description des Services Applicatifs
3.2.1. Vue d’Ensemble des Services
La plateforme BDES est composée de microservices Spring Boot communiquant via API REST et événements Kafka.
3.2.2. Catalogue des Services
| Service | Type | Responsabilités | Dépendances |
|---|---|---|---|
evaluation-api-ms |
Microservice |
Gestion des campagnes, dossiers, évaluations CTE, formulaires |
PostgreSQL, Kafka, MinIO, Redis |
users-api-ms |
Microservice |
Reflet des comptes Keycloak, demandes et attribution des rôles, réception des évènements d’identité |
PostgreSQL, Kafka, Keycloak |
notifications-api-ms |
Microservice |
Envoi notifications email, gestion templates |
PostgreSQL, Kafka, SMTP |
referentiel-api-ms |
Microservice |
Exposition des données référentielles consolidées, alimentation et consolidation |
PostgreSQL, Redis |
job-runner-ms |
Microservice |
Travaux périodiques : cycle de vie des campagnes, relances d’échéance, nettoyage des fichiers temporaires, reprise et purge de la file de notifications |
PostgreSQL, les autres services |
API Gateway |
Gateway |
Routage, authentification, rate limiting |
Keycloak, Microservices |
3.2.4. Échanges entre Services de la Plateforme
Les échanges entre les services de la plateforme, et avec le référentiel, empruntent deux voies.
-
Appel de service à service pour les échanges internes à la plateforme. L’appelant porte un compte de service dont les habilitations ne sont jamais accordées à un utilisateur ; le service appelé vérifie l’autorisation sur le jeton présenté.
-
X-ROAD pour les consommateurs externes du référentiel : administrations et systèmes gouvernementaux, selon les contrats décrits au chapitre 2.
Ces échanges ne sont pas en lecture seule : le module d’évaluation écrit dans le référentiel les maquettes de formation et les planifications des enseignements.
3.2.5. Description Détaillée par Service
|
Les spécifications techniques détaillées de chaque service sont documentées dans les STD correspondants. |
3.2.5.1. Module bdes-evaluation
-
evaluation-api-ms : Gestion du cycle de vie des campagnes et dossiers d’évaluation
-
users-api-ms : Réconciliation des identités multi-sources, synchronisation Keycloak
-
notifications-api-ms : Envoi de notifications email, gestion des templates et préférences
3.3. Architecture des Batchs
3.3.1. Liste des Traitements Batch
| Traitement | Fréquence | Fenêtre | Description |
|---|---|---|---|
Cycle de vie des campagnes |
Toutes les 15 minutes |
Permanente |
Ouverture et clôture des campagnes selon leurs dates, et progression des dossiers qui en dépend |
Relances de campagne |
Quotidienne |
08h00 UTC |
Rappels aux enseignants et aux évaluateurs à 3 et 5 jours de l’échéance de soumission puis de fin |
Reprise de la file de notifications |
Toutes les 2 minutes |
Permanente |
Nouvelle tentative des notifications en échec, selon un délai croissant et un nombre d’essais plafonné |
Purge de la file de notifications |
Quotidienne |
03h00 UTC |
Suppression des entrées de la file au-delà de leur durée de conservation |
Nettoyage des fichiers temporaires |
Quotidienne |
02h00 UTC |
Suppression des dépôts temporaires de plus de 48 heures |
Synchronisation des paramètres applicatifs |
Toutes les 15 minutes |
Permanente |
Relecture de la table des paramètres, pour que les réglages modifiés en base s’appliquent sans redéploiement |
Rafraîchissement de l’entrepôt analytique |
Horaire |
Permanente |
Recalcul des vues consommées par l’outil décisionnel |
3.3.2. Orchestration des Batchs
Les traitements ci-dessus sont portés par le service job-runner-ms, et non par des objets
planifiés de l’orchestrateur. Chacun est décrit par une expression cron dans la configuration
du service et porte son propre interrupteur d’activation, ce qui permet de l’arrêter sans
redéployer les autres. Le rafraîchissement de l’entrepôt analytique fait exception : il est le
seul à être planifié par un CronJob Kubernetes, parce qu’il s’exécute hors du service.
-
Planification par expression
cron, versionnée avec la configuration du service -
Un interrupteur d’activation par traitement
-
Reprise sur échec propre à chaque traitement, et non générique
-
Journaux centralisés dans Loki, métriques exposées à Prometheus, alertes routées par Alertmanager
3.4. Langages, Composants Techniques et Framework
3.4.1. Stack Backend
| Composant | Version | Usage |
|---|---|---|
Java |
17 LTS |
Langage principal backend |
Spring Boot |
3.x |
Framework microservices |
Spring Security |
6.x |
Sécurité, OAuth2/OIDC |
Spring Data JPA |
3.x |
Persistance ORM |
Spring Kafka |
3.x |
Messaging asynchrone |
Resilience4j |
2.x |
Patterns de résilience (Circuit Breaker, Retry) |
MapStruct |
1.5.x |
Mapping DTO/Entity |
Flyway |
9.x |
Migration base de données |
3.4.2. Stack Frontend
| Composant | Version | Usage |
|---|---|---|
Vue.js |
3.x |
Framework frontend |
Nuxt |
3.x |
Framework SSR/SSG |
TypeScript |
5.x |
Typage statique |
Tailwind CSS |
3.x |
Framework CSS utilitaire |
3.4.3. Stack Data
| Composant | Version | Usage |
|---|---|---|
PostgreSQL |
16.x |
Base de données principale |
Redis |
7.x |
Cache distribué, sessions |
Apache Kafka |
3.7.x |
Messaging, event streaming |
MinIO |
Latest |
Stockage objets S3-compatible |
PL/pgSQL |
PostgreSQL 16 |
Transformation des données du référentiel, par fonctions embarquées dans la base |
3.5. Interface avec d’Autres Applications ou Composants Externes
3.5.1. Systèmes Externes Consommés
| Système | Protocole | Format | Usage |
|---|---|---|---|
Keycloak |
HTTPS/OIDC |
JWT |
Authentification, autorisation, SSO |
X-ROAD |
HTTPS/SOAP |
XML |
Interopérabilité gouvernementale |
ANIP |
HTTPS/REST |
JSON |
Validation du NPI (optionnel) |
Scolarités Universités |
Divers (dépôts Excel, API) |
Divers |
Données étudiants, inscriptions |
SMTP Gouvernemental |
SMTP/TLS |
RFC 5321 |
Envoi emails |
3.6. Caractéristiques des Interfaces Applicatives
3.6.1. Standards API REST
| Caractéristique | Spécification |
|---|---|
Format |
JSON (application/json) |
Authentification |
Bearer JWT (OAuth2/OIDC via Keycloak) |
Versioning |
URL path (/api/v1/…) |
Pagination |
Offset-based (page, size) ou Cursor-based |
Erreurs |
Format standardisé (code, message, traceId) |
Documentation |
OpenAPI 3.x (Scalar) |
3.6.2. Contrats d’Interface
| API | Spécification OpenAPI | Environnement |
|---|---|---|
evaluation-api-ms |
|
|
referentiel-api-ms |
|
|
users-api-ms |
|
|
notifications-api-ms |
|
|
3.6.3. Gestion des Erreurs
Format de réponse standardisé :
{
"timestamp": "2025-01-15T10:30:00Z",
"status": 400,
"error": "Bad Request",
"code": "ERR-EVAL-002",
"message": "La période d'évaluation est expirée",
"path": "/api/v1/evaluations/123/soumissions",
"traceId": "abc-123-def-456"
}
4. Architecture de la Donnée
4.1. Données
4.1.1. Modèle de Données Global
La plateforme BDES gère deux domaines de données distincts :
-
Données d’évaluation (bdes-evaluation) : Campagnes, dossiers, évaluations CTE, formulaires
-
Données référentielles (bdes-referentiel) : Établissements, enseignants, programmes, étudiants
|
Les modèles de données détaillés sont documentés dans les SFD de chaque module : |
4.1.2. Bases de Données par Service
| Service | Base de données | Schéma principal | Volumétrie estimée |
|---|---|---|---|
evaluation-api-ms |
PostgreSQL |
|
|
users-api-ms |
PostgreSQL |
|
|
notifications-api-ms |
PostgreSQL |
|
|
job-runner-ms |
PostgreSQL |
|
|
referentiel-api-ms |
PostgreSQL |
|
4.1.3. Pattern Database per Service
Chaque domaine dispose de ses propres schémas, migrés par un projet Flyway central (bdes-db-migration). Les services d’un même domaine partagent ses schémas, garantissant :
-
Isolation : aucun service n’écrit dans les schémas d’un autre domaine
-
Cohérence : un jeu de migrations unique, versionné avec le code
-
Scalabilité : possibilité de porter un domaine sur une instance dédiée
-
Résilience : Panne d’une base n’affecte pas les autres services
4.1.4. Données de Référence
| Référentiel | Description | Source |
|---|---|---|
Universités |
Établissements d’enseignement supérieur |
MESRS |
UFR/Départements |
Structure organisationnelle |
Universités |
Enseignants |
Personnel enseignant et chercheur |
Universités, MESRS |
Programmes |
Formations et parcours |
Universités |
Grades |
Grades académiques (Assistant, MC, Professeur) |
Référentiel statique |
Pays |
Liste des pays |
Référentiel statique |
Villes |
Villes et localités béninoises |
Référentiel statique |
Journaux académiques |
Revues et journaux pour publications |
Référentiel statique (bdes-evaluation) |
Voir : SFD bdes-referentiel - Modèle de données pour la liste complète des entités.
4.1.5. Stockage Fichiers
Les fichiers sont déposés dans un bucket unique, bdes-data, où l’arborescence des clés distingue les natures ci-dessous.
| Type | Stockage | Description |
|---|---|---|
Documents enseignants |
MinIO (S3) |
CV, diplômes, publications |
Pièces justificatives |
MinIO (S3) |
Documents joints aux dossiers et aux évaluations |
La clé de chaque objet porte le dossier auquel il appartient :
folders/{uuid du dossier}/{conteneur}/{entité}/files/{uuid}_{nom} pour les
pièces des rubriques du dossier, folders/{uuid du dossier}/survey_files/{uuid}_{nom}
pour celles déposées dans un formulaire. Cette clé est le nom interne enregistré
en base : elle fait seule le lien entre un dossier et ses pièces.
4.2. Règles de Gouvernance
4.2.1. Propriété des Données
| Domaine | Propriétaire | Responsabilités |
|---|---|---|
Données Évaluation |
DCE |
Campagnes, dossiers, évaluations |
Données Référentiel |
MESRS / Universités |
Établissements, enseignants, programmes |
Données Utilisateurs |
DCE |
Comptes, rôles, permissions |
4.2.2. Qualité des Données
| Critère | Description | Seuil |
|---|---|---|
Complétude |
Pourcentage de champs obligatoires renseignés |
> 95% |
Conformité |
Respect des formats (dates, codes, emails) |
> 99% |
Cohérence |
Références valides, pas de contradictions |
> 99% |
Unicité |
Pas de doublons sur clés uniques |
100% |
4.2.3. Cycle de Vie des Données
| Type de données | Rétention | Action fin de vie |
|---|---|---|
Données d’évaluation |
|
Archivage cold storage |
Logs d’audit |
|
Archivage puis suppression |
Notifications |
30 jours après lecture |
Suppression automatique |
Sessions utilisateurs |
24 heures |
Invalidation automatique |
Cache Redis |
1-24 heures (TTL) |
Expiration automatique |
4.2.4. Conformité Réglementaire
-
Protection des données personnelles : Conformité aux réglementations nationales
-
Droit d’accès : Les utilisateurs peuvent consulter leurs données personnelles
-
Droit de rectification : Procédure de demande de correction
-
Anonymisation : Évaluations pédagogiques anonymisées (aucun lien traçable)
-
Audit trail : Journalisation complète des accès et modifications
4.2.5. Sauvegarde et Restauration
Voir : Chapitre Exploitation - Sauvegarde pour la politique de sauvegarde et les procédures de restauration.
5. Architecture Physique
5.1. Cartographie de l’Architecture Physique
5.1.1. Architecture Multi-Tiers
| Tier | Composants |
|---|---|
Tier Web |
Application Vue.js/Nuxt (via HAProxy LB + Nginx Ingress) |
Tier Application |
API Gateway, Microservices Spring Boot (evaluation, users, notification, referentiel), Keycloak, Metabase, bdes-migration |
Tier Données |
PostgreSQL (CloudNativePG), Kafka (Strimzi), Redis Sentinel, MinIO |
Tier Outils |
Prometheus, Grafana, Loki, GlitchTip |
5.2. Caractéristiques des Machines
|
L’infrastructure est hébergée au Datacenter DSI Présidence (TDR 4.1.6.6 - Hébergement souverain). |
5.2.1. Machines Physiques du Cluster
| Type | Quantité | vCPU | RAM | Stockage | Réseau |
|---|---|---|---|---|---|
Masters K8s (Control Plane) |
3 |
8 |
32 GB |
200 GB SSD NVMe |
10 Gbps |
Workers K8s (Applications) |
3+ |
16 |
64 GB |
100 GB NVMe (OS) + 1 TB NVMe (données) |
10 Gbps |
Workers K8s (Data) |
3+ |
16 |
64 GB |
100 GB NVMe (OS) + 2 TB NVMe (stockage) |
10 Gbps |
Load Balancers (DMZ) |
2 |
4 |
8 GB |
50 GB SSD |
10 Gbps |
5.3. Détail des Composants Physiques
5.3.1. Services d’Infrastructure
| Composant | Version | Réplicas | Ressources (requests) |
|---|---|---|---|
PostgreSQL |
16 (CloudNativePG) |
1 primary + 2 replicas |
4 CPU, 8GB RAM par instance |
Kafka |
3.7.x (Strimzi) |
3 brokers |
2 CPU, 4GB RAM par broker |
Redis |
7.x (Sentinel) |
3 masters + 3 replicas |
1 CPU, 2GB RAM par nœud |
MinIO |
Latest |
4 nœuds |
2 CPU, 4GB RAM par nœud |
Loki |
3.x |
3 nœuds |
4 CPU, 8GB RAM par nœud |
Keycloak |
26.x |
3 pods |
2 CPU, 4GB RAM par pod |
Harbor Registry |
2.x |
2 réplicas |
2 CPU, 4GB RAM |
5.3.2. Applications BDES
| Microservice | Réplicas | Ressources (requests) |
|---|---|---|
Frontend Vue.js |
3 pods |
0.5 CPU, 512MB RAM |
API Gateway |
3 pods |
1 CPU, 2GB RAM |
evaluation-api-ms |
3 pods |
1 CPU, 2GB RAM |
referentiel-api-ms |
2 pods |
1 CPU, 2GB RAM |
users-api-ms |
2 pods |
1 CPU, 2GB RAM |
notifications-api-ms |
2 pods |
0.5 CPU, 1GB RAM |
Metabase |
2 pods |
1 CPU, 2GB RAM |
bdes-migration |
1 pod (CronJob) |
0.5 CPU, 1GB RAM |
5.3.3. Outils d’Observabilité
| Composant | Réplicas | Ressources (requests) |
|---|---|---|
Prometheus |
2 réplicas |
2 CPU, 4GB RAM |
Grafana |
2 réplicas |
1 CPU, 2GB RAM |
GlitchTip |
2 réplicas |
1 CPU, 2GB RAM |
5.3.4. Configuration Kubernetes
| Ressource | Configuration |
|---|---|
Namespaces |
Un espace par environnement applicatif — |
Ingress Controller |
NGINX Ingress Controller, TLS 1.3, cert-manager pour certificats |
Storage Classes |
OpenEBS Mayastor (PostgreSQL, Kafka), MinIO replicated (fichiers) |
Network Policies |
Isolation inter-namespaces, whitelist explicite |
Pod Security Standards |
Restricted profile : non-root, read-only filesystem |
HPA (Horizontal Pod Autoscaler) |
CPU > 70% trigger, min/max pods définis par service |
5.3.5. Domaines et Points d’Accès
| Service | URL |
|---|---|
Frontend Évaluation |
|
API Évaluation |
|
API Référentiel (X-ROAD) |
|
Keycloak |
|
Grafana |
|
5.4. Caractéristiques des Interfaces Techniques
5.4.1. Ports et Protocoles
| Service | Port | Protocole | Description |
|---|---|---|---|
HAProxy (Frontend) |
443 |
HTTPS |
Point d’entrée utilisateurs |
API Gateway |
8080 |
HTTP |
Routage interne |
Microservices |
8080 |
HTTP |
APIs REST |
PostgreSQL |
5432 |
TCP/JDBC |
Base de données |
Kafka |
9092 |
TCP |
Messaging (PLAINTEXT interne) |
Kafka (SSL) |
9093 |
TCP/SSL |
Messaging (clients externes) |
Redis |
6379 |
TCP |
Cache |
MinIO |
9000 |
HTTPS |
API S3 |
Prometheus |
9090 |
HTTP |
Métriques |
Grafana |
3000 |
HTTP |
Dashboards |
5.4.2. Certificats TLS
| Usage | Type | Validité |
|---|---|---|
Frontend HTTPS |
Certificat EV gouvernemental |
1 an |
API Gateway |
Let’s Encrypt (ACME) |
90 jours (auto-renew) |
Inter-services (mTLS) |
Cert-manager (self-signed CA) |
1 an (auto-renew) |
PostgreSQL SSL |
Cert-manager |
1 an (auto-renew) |
Kafka SSL |
Cert-manager |
1 an (auto-renew) |
5.5. Connectivité
5.6. Hébergement
5.6.1. Localisation
L’infrastructure BDES est hébergée au Datacenter DSI Présidence conformément aux exigences d’hébergement souverain (TDR 4.1.6.6).
5.6.2. Haute Disponibilité
Voir : Chapitre Haute Disponibilité pour les mécanismes HA par composant, les objectifs RPO/RTO et les scénarios de reprise.
6. Sécurité
|
Les aspects sécurité spécifiques à chaque module sont documentés dans les STD correspondants : |
6.1. Authentification et Autorisation
6.1.1. Keycloak - Serveur d’Authentification
| Paramètre | Configuration |
|---|---|
Version |
26.x |
Realm |
|
Protocole |
OAuth2 / OpenID Connect (OIDC) avec PKCE |
Fédération |
IdP gouvernementaux (SSO inter-administrations) |
Provisionnement |
Terraform (configuration as code) |
6.1.2. Configuration des Clients OAuth2
| Client | Type | Usage |
|---|---|---|
|
Public |
Application Nuxt/Vue, flux de code d’autorisation avec PKCE |
|
Confidential |
Service du domaine évaluation |
|
Bearer-only |
Service du domaine référentiel |
|
Bearer-only |
Service des comptes et des rôles |
|
Confidential |
Administration du royaume depuis |
|
Bearer-only |
Service de notification |
|
Confidential |
Exécuteur des traitements planifiés |
|
Confidential |
Transmission des évènements du fournisseur d’identité vers |
|
Confidential |
Dépôt en masse de données référentielles par l’Université d’Abomey-Calavi |
| Les appels de service à service ne passent pas par un client partagé : chaque client confidentiel dispose de son propre compte de service, porteur des seules habilitations dont il a besoin. Le compte de service d'`bdes-evaluation-api`, par exemple, ne reçoit du Référentiel que la lecture et la recherche de personnes. |
6.1.3. Tokens JWT
| Paramètre | Valeur |
|---|---|
Access Token TTL |
15 minutes |
Refresh Token TTL |
24 heures |
Algorithme signature |
RS256 (asymétrique) |
Claims personnalisés |
userId, roles, permissions |
6.1.4. Gestion des Rôles (RBAC)
| Rôle | Permissions |
|---|---|
ROLE_USER_BASE |
Accès de base, demande de rôles supplémentaires |
ROLE_ETUDIANT |
Soumission évaluations pédagogiques anonymes |
ROLE_ENSEIGNANT |
Consultation/constitution dossier personnel |
ROLE_EVALUATEUR |
Évaluation dossiers assignés (CTE) |
ROLE_SUPERVISEUR |
Coordination CTE, assignation dossiers |
ROLE_RESPO_ACADEMIQUE |
Consultation enseignants UFR |
ROLE_DELEGUE |
Administration, validation finale DCE |
ROLE_ADMIN |
Administration technique, Keycloak |
6.1.5. Synchronisation Utilisateurs
-
Event Listener SPI : Keycloak déclenche des webhooks vers
users-api-mslors des événements utilisateur (création, modification, suppression, changement de groupe). La réception est authentifiée par signature HMAC-SHA256 sur l’horodatage et le corps, avec une tolérance de cinq minutes -
Reflet des identités :
users-api-mstient le reflet local des comptes Keycloak, dans ce seul sens. Le rattachement à une fiche du Référentiel se fait par revendication, lors d’une demande de rôle -
Identifiant national : son format est contrôlé, dix chiffres
6.2. Chiffrement
6.2.1. Chiffrement des Données au Repos (At-Rest)
| Composant | Méthode | Algorithme |
|---|---|---|
PostgreSQL |
Transparent Data Encryption (volumes) |
LUKS / AES-256 |
MinIO |
Server-Side Encryption |
AES-256 |
Kafka |
Chiffrement disque |
LUKS / AES-256 |
Secrets Kubernetes |
Sealed Secrets / HashiCorp Vault |
AES-256-GCM |
Secrets de déploiement |
Ansible Vault (dépôt d’infrastructure) |
AES-256-GCM |
6.2.2. Chiffrement des Données en Transit (In-Transit)
| Flux | Protocole | Version minimale |
|---|---|---|
Client → HAProxy |
HTTPS |
TLS 1.3 |
HAProxy → API Gateway |
HTTPS |
TLS 1.2 |
API Gateway → Microservices |
HTTP (interne) ou mTLS |
TLS 1.2 |
Microservices → PostgreSQL |
SSL |
TLS 1.2 |
Microservices → Kafka |
SSL |
TLS 1.2 |
X-ROAD |
HTTPS + Signatures |
TLS 1.2 |
6.3. Protection des Données
6.3.1. Classification des Données
| Classification | Description | Exemples |
|---|---|---|
Public |
Données accessibles sans restriction |
Liste universités, programmes |
Interne |
Données accessibles aux utilisateurs authentifiés |
Formulaires, rapports agrégés |
Confidentiel |
Données personnelles, accès restreint |
Dossiers enseignants, évaluations |
Sensible |
Données hautement protégées |
Credentials, clés API |
6.4. Audit et Traçabilité
6.5. Sécurité Applicative
6.5.1. Conformité OWASP
Les développements respectent les recommandations du OWASP Top 10 (2021) pour la prévention des vulnérabilités applicatives les plus critiques. Les mesures de protection incluent :
-
Contrôle d’accès : RBAC via Keycloak, validation côté serveur
-
Chiffrement : TLS 1.3, AES-256, secrets chiffrés (Sealed Secrets)
-
Injection : Prepared statements, validation des entrées
-
Composants vulnérables : Scans CVE automatisés (Trivy)
-
Intégrité : Images Docker signées, SBOM (Software Bill of Materials)
7. Haute Disponibilité et Migration
7.1. Haute Disponibilité
7.1.1. Objectifs
| Métrique | Cible | Description |
|---|---|---|
Disponibilité |
|
Disponibilité même en période de forte sollicitation (TDR 4.1.6.1) |
Temps de failover |
< 30 secondes |
Bascule automatique intra-site |
7.1.2. Haute Disponibilité par Composant
| Composant | Mécanisme HA | Failover |
|---|---|---|
API Gateway |
3 réplicas, HPA |
Automatique (K8s) |
Microservices |
Multi-réplicas, HPA |
Automatique (K8s) |
PostgreSQL |
1 primary + 2 replicas |
Automatique (CloudNativePG) |
Kafka |
3 brokers, RF=3 |
Automatique (Strimzi) |
Redis |
3 masters + 3 replicas |
Automatique (Sentinel) |
HAProxy |
Actif/Passif + Keepalived |
Automatique (VRRP) |
7.2. Migration de l’Existant
|
La stratégie de migration complète est documentée dans Stratégie de Migration. |
7.2.1. Systèmes Existants
| Système | Description | Action |
|---|---|---|
Drupal |
Portail web existant |
Remplacement par Application Vue.js |
KoboToolbox |
Application gestion évaluations (Toolbox) |
Remplacement par bdes-evaluation |
Bases legacy |
Données enseignants/établissements |
Migration vers bdes-referentiel |
7.2.2. Migration des Données
| Données | Source | Stratégie |
|---|---|---|
Enseignants |
KoboToolbox / Sources universitaires |
ETL vers Référentiel GOLDEN |
Établissements |
Base MESRS |
ETL vers Référentiel GOLDEN |
Historique évaluations |
KoboToolbox |
Non migré (incompatibilité format KoboToolbox vs SurveyJS) |
|
L’historique des évaluations depuis KoboToolbox ne sera pas migré. Les formulaires KoboToolbox (format XLSForm/XForm) sont incompatibles avec SurveyJS utilisé par bdes-evaluation. |
8. Exploitation
8.1. Mise en Production
8.1.1. Checklist Pré-Production
Cette liste s’exerce avant chaque mise en production et se coche à cette occasion. Elle énumère les contrôles attendus ; ses cases sont vierges ici et ne renseignent pas sur une livraison particulière.
-
Tous les tests passent (unitaires, intégration, E2E)
-
Revue de code complète
-
Documentation mise à jour
-
Scripts de migration testés sur STAGING
-
Rollback plan validé
-
Communication utilisateurs planifiée
-
Fenêtre de maintenance réservée
-
Équipe de support informée
8.2. Intégration / Déploiement Continue
8.2.1. Stack CI/CD
| Outil | Version | Usage |
|---|---|---|
GitLab CI |
Latest |
Pipeline CI/CD, runners |
Harbor |
2.x |
Registry images Docker |
Helm |
3.x |
Packaging applications K8s |
SonarQube |
10.x |
Analyse qualité code |
8.2.2. Pipeline CI (Build)
stages:
- build
- test
- scan
- package
- publish
| Stage | Actions |
|---|---|
build |
Compilation Maven/npm, génération artifacts |
test |
Tests unitaires, couverture code (>80%) |
scan |
SonarQube, scan vulnérabilités (Trivy) |
package |
Build image Docker, tag version |
publish |
Push image vers Harbor, signature |
8.2.3. Pipeline CD (Deploy)
| Environnement | Trigger |
|---|---|
DEV |
Automatique sur merge branche |
STAGING |
Automatique sur merge branche |
PREPROD |
Automatique sur merge branche |
PROD |
Sur merge branche |
|
Le pipeline de production est exécuté sur le GitLab de la DSI Présidence pour des raisons de sécurité et d’isolation. |
8.3. Gestion de la Configuration
8.3.1. Stratégie
La plateforme BDES utilise une gestion de configuration entièrement native Kubernetes, sans serveur de configuration centralisé (Spring Cloud Config).
| Mécanisme | Usage | Sécurité |
|---|---|---|
Kubernetes ConfigMaps |
Configuration applicative non sensible : URLs, paramètres métier, limites, timeouts |
Stockage clair, versionné dans Git |
Kubernetes Secrets |
Configuration sensible : credentials BD, clés API, tokens |
Chiffrement at-rest (etcd encryption) |
Ansible Vault |
Secrets de déploiement versionnés chiffrés dans le dépôt d’infrastructure |
Chiffrement symétrique, déchiffrement au déploiement |
Sealed Secrets |
Secrets versionnés dans Git de manière sécurisée |
Chiffrement asymétrique, déchiffrement uniquement dans cluster |
External Secrets Operator |
Synchronisation secrets depuis HashiCorp Vault (optionnel) |
Rotation automatique, audit centralisé |
8.4. Sauvegarde
8.4.1. Politique de Sauvegarde
| Composant | Type | Fréquence | Rétention | Stockage |
|---|---|---|---|---|
PostgreSQL |
Full + WAL |
Quotidien + continu |
|
MinIO S3 |
MinIO |
Incrémental |
Quotidien |
|
MinIO S3 |
Kafka |
Topics critiques |
Quotidien |
|
MinIO S3 |
Configuration K8s |
Export YAML |
À chaque modification |
Indéfini |
Git |
Secrets |
Backup chiffré |
Quotidien |
|
Vault / MinIO |
8.5. Archivage
|
Responsabilité client. La définition de la politique d’archivage (critères, rétention, format) relève de la responsabilité de la DCE, avec le support technique d’IT-NUM pour sa mise en œuvre. |
8.6. Supervision
8.6.1. Stack de Monitoring
| Outil | Version | Fonction |
|---|---|---|
Prometheus |
2.x |
Collecte métriques (scraping) |
Grafana |
10.x |
Visualisation, dashboards |
Alertmanager |
0.27.x |
Gestion alertes, routing |
Loki |
3.x |
Centralisation des journaux |
Grafana (journaux) |
11.x |
Consultation des journaux |
GlitchTip |
Latest |
Error tracking (Sentry-compatible) |
OpenTelemetry |
Latest |
Distributed tracing |
8.6.2. Métriques Collectées
| Catégorie | Métriques |
|---|---|
Infrastructure |
CPU, RAM, disk, network, pods status |
Application |
Request rate, latency (P50, P95, P99), error rate |
Base de données |
Connexions, queries/s, slow queries, replication lag |
Kafka |
Consumer lag, throughput, partition status |
Business |
Évaluations créées, soumissions, rapports générés |
8.6.3. Dashboards Grafana
| Dashboard | Contenu |
|---|---|
Overview |
Santé globale, SLA, alertes actives |
Microservices |
Métriques par service (RED: Rate, Errors, Duration) |
PostgreSQL |
Connexions, performances requêtes, réplication |
Kafka |
Topics, consumer groups, lag |
Kubernetes |
Pods, nodes, resources usage |
Business KPIs |
Métriques métier temps réel |
9. Glossaire
| Terme | Définition |
|---|---|
ANIP |
Agence Nationale d’Identification des Personnes. Organisme gouvernemental responsable de l’identification unique des citoyens via le Numéro d’Identification Personnelle (NIP). |
API Gateway |
Point d’entrée unique pour toutes les requêtes API du système. Assure l’authentification, l’autorisation, le routage et le rate limiting. |
bdes-evaluation |
Système pour l’évaluation des enseignants, avec IHM + backend, NON exposé via X-Road, récupère des données référentielles de bdes-referentiel, hébergé sur |
bdes-referentiel |
Système qui agrège des données de sources autoritaires (scolarités, ministères, etc.) via un pipeline de traitement (déduplication, etc.), exposé via X-ROAD. |
Blue/Green Deployment |
Stratégie de déploiement avec deux environnements identiques (Blue et Green). Déploiement sur Green, bascule du trafic, rollback vers Blue si problème. |
CAMES |
Conseil Africain et Malgache pour l’Enseignement Supérieur. Organisme régional d’accréditation et d’harmonisation des formations. |
Circuit Breaker |
Pattern de résilience empêchant l’appel répété d’un service défaillant. Évite la propagation des pannes en cascade. |
Code d’accès |
Code unique et sécurisé généré pour chaque événement d’évaluation, permettant l’accès anonyme au formulaire par les répondants. |
DCE |
Délégation au Contrôle et à l’Éthique dans l’Enseignement Supérieur. Structure gouvernementale responsable du contrôle qualité de l’enseignement supérieur. |
EC |
Élément Constitutif. Sous-division d’une Unité d’Enseignement (UE), généralement correspondant à un cours ou un module spécifique. |
EES |
Établissement d’Enseignement Supérieur. Université, institut ou école du supérieur (UAC, UP, UNA, UNSTIM, etc.). |
Événement d’évaluation |
Instance concrète d’une évaluation planifiée, avec période d’activation, formulaire associé, ressource cible et codes d’accès. |
Failover |
Bascule automatique vers un système de secours en cas de défaillance du système principal. Objectif : minimiser l’interruption de service. |
HAProxy |
Load balancer open-source haute performance utilisé pour répartir la charge entre les nœuds des tiers Web, App, DB et Tools. |
JWT (JSON Web Token) |
Standard de token sécurisé pour l’authentification et l’échange d’informations. Composé de 3 parties : header, payload (claims), signature. |
Kafka |
Plateforme de streaming distribué pour messagerie asynchrone, événements métier et intégration inter-services. |
Keycloak |
Serveur open-source d’authentification et d’autorisation (IAM). Support OAuth2, OIDC, SAML, fédération d’identités et SSO. |
Microservices |
Architecture logicielle basée sur des services indépendants, déployables séparément, communiquant via APIs REST ou messagerie. |
MFA (Multi-Factor Authentication) |
Authentification multi-facteurs. Combinaison de plusieurs méthodes de vérification (mot de passe + SMS/OTP/biométrie). |
MTTR (Mean Time To Resolution) |
Temps moyen de résolution d’un incident. Indicateur clé pour mesurer l’efficacité de la réponse aux incidents. |
NIP |
Numéro d’Identification Personnelle. Identifiant unique national délivré par l’ANIP à chaque citoyen béninois. |
OIDC (OpenID Connect) |
Couche d’identité au-dessus d’OAuth2, permettant l’authentification des utilisateurs via tokens standardisés (ID Token). |
Prometheus |
Système open-source de monitoring et d’alerting. Collecte métriques time-series, requêtes PromQL, alerting. |
RBAC (Role-Based Access Control) |
Contrôle d’accès basé sur les rôles. Attribution de permissions aux utilisateurs via leur appartenance à des rôles prédéfinis. |
Redis |
Base de données clé-valeur en mémoire (in-memory). Utilisée pour cache distribué, sessions, et données temporaires haute performance. |
RPO (Recovery Point Objective) |
Objectif de Point de Reprise. Perte de données maximale acceptable en cas d’incident. |
RTO (Recovery Time Objective) |
Objectif de Temps de Reprise. Durée maximale d’interruption de service acceptable. |
SLA (Service Level Agreement) |
Accord sur le niveau de service. Contrat définissant les engagements de disponibilité, de performance et de support. |
SPA (Single Page Application) |
Application web monopage. Interface utilisateur dynamique développée en Vue.js, communiquant avec le backend via APIs REST. |
Spring Boot |
Framework Java pour développement rapide de microservices. Intégration Spring, configuration automatique, serveur embarqué. |
SSO (Single Sign-On) |
Authentification unique. L’utilisateur s’authentifie une seule fois pour accéder à plusieurs applications (via Keycloak). |
TLS (Transport Layer Security) |
Protocole de sécurisation des communications réseau. Les versions retenues par flux figurent au chapitre Sécurité du DAT. |
UAC |
Université d’Abomey-Calavi. Principale université publique du Bénin. |
UE (Unité d’Enseignement) |
Regroupement cohérent de plusieurs Éléments Constitutifs (EC) au sein d’un programme de formation. |
UFR (Unité de Formation et de Recherche) |
Structure académique regroupant plusieurs départements ou filières au sein d’une université (ex: UFR Sciences, UFR Lettres). |
UNA |
Université Nationale d’Agriculture. Université publique spécialisée dans les sciences agronomiques. |
UNSTIM |
Université Nationale des Sciences, Technologies, Ingénierie et Mathématiques. |
UP |
Université de Parakou. Deuxième université publique du Bénin, située dans le nord du pays. |
Vue.js |
Framework JavaScript progressif pour la construction d’interfaces utilisateur réactives. Version 3 utilisée dans bdes-evaluation. |
WAF (Web Application Firewall) |
Pare-feu applicatif web. Filtre et surveille le trafic HTTP/HTTPS pour bloquer les attaques (injection SQL, XSS, CSRF). |
X-ROAD |
Plateforme d’interopérabilité gouvernementale permettant l’échange sécurisé de données entre administrations publiques. |