Aller au contenu

Stack technique

Cette page liste chaque composant logiciel utilisé par PerfShop avec sa version exacte, son rôle, et l'image Docker correspondante. Toutes les versions sont lues directement dans les fichiers Docker Compose de déploiement (docker-compose.desktop.yml, docker-compose.build.yml), dans application.yml, et dans les Dockerfile du projet.

Images et builds

PerfShop utilise un mélange d'images officielles upstream (Prometheus, Grafana, Loki…) et d'images custom buildées à partir du code source (perfshop-backend, perfshop-frontend, perfshop-admin, perfshop-chaos-admin, perfshop-monitoring, perfshop-welcome, perfshop-test-runner). Les images custom suivent un schéma de tag versionné (v4, v17, v18…) géré par les scripts build.sh / build.bat.

Cœur applicatif

Composant Version Rôle Image Docker
Java 21 Runtime du backend Spring Boot (intégré à perfshop-backend)
Spring Boot 3.2 Framework backend (REST, JPA, Actuator) (intégré à perfshop-backend)
Spring Web MVC inclus Stack HTTP synchrone Tomcat embarqué (intégré à perfshop-backend)
Hibernate ORM inclus JPA, dialecte MySQLDialect (intégré à perfshop-backend)
HikariCP inclus Pool de connexions JDBC, nom PerfShopHikariPool, max 20 / min 5 (intégré à perfshop-backend)
Flyway inclus Migrations SQL versionnées (V1 → V38) (intégré à perfshop-backend)
Lombok inclus Génération @Data / @Getter / @Setter (intégré à perfshop-backend)
BCrypt inclus (Spring Security crypto) Hash mots de passe utilisateurs et admin (strength 10) (intégré à perfshop-backend)
MySQL 8.0 Base de données principale mysql:8.0
React 18 Framework UI de la boutique e-commerce (intégré à perfshop-frontend)
Vite 5 Bundler frontend (intégré à perfshop-frontend)
nginx (image alpine officielle) Sert le bundle React + reverse proxy interne (intégré à perfshop-frontend)

Outils admin et formateur

Composant Stack Rôle Image Docker
perfshop-admin HTML/CSS/JS vanilla servi par nginx Backoffice produits, commandes, comptes perfshop-admin:v4 (custom)
perfshop-chaos-admin HTML/CSS/JS vanilla servi par nginx Pilotage des 6 familles de chaos perfshop-chaos-admin:v8 (custom)
perfshop-monitoring Node.js + Express Dashboard temps réel HTML + agrégation Docker socket perfshop-monitoring:v4 (custom)
perfshop-welcome nginx + HTML statique Page d'accueil avec annuaire des URLs perfshop-welcome:v6 (custom)

Observabilité

Composant Version Rôle Image Docker
Prometheus latest (image officielle) Collecte des métriques prom/prometheus:latest
Grafana 12.0.0 Dashboards et exploration grafana/grafana:12.0.0
Loki latest Stockage des logs (Promtail → Loki) grafana/loki:latest
Promtail latest Collecte des logs Docker via socket grafana/promtail:latest
Tempo 2.4.2 Stockage et requête des traces distribuées grafana/tempo:2.4.2
Pyroscope latest Profiling continu JVM grafana/pyroscope:latest
OpenTelemetry Java agent bundled opentelemetry-javaagent.jar Export OTLP des traces depuis le backend (intégré à perfshop-backend)
Pyroscope Java agent bundled pyroscope.jar Export JFR des profils CPU/alloc/lock (intégré à perfshop-backend)
OpenSearch 2.13.0 Indexation et recherche full-text des logs opensearchproject/opensearch:2.13.0
OpenSearch Dashboards 2.13.0 UI de visualisation OpenSearch opensearchproject/opensearch-dashboards:2.13.0
Vector 0.38.0-alpine Collecte logs Docker → OpenSearch (transform VRL) timberio/vector:0.38.0-alpine

Stack QA pédagogique

Composant Version Rôle Image Docker
Squash TM latest ALM de gestion des cas de test squashtest/squash-tm:latest
Squash Orchestrator latest Pilotage SSH des exécutions squashtest/squash-orchestrator:latest
PostgreSQL 16 BDD dédiée Squash TM postgres:16
Selenium standalone-chrome latest Selenium Grid + Chrome headless + noVNC selenium/standalone-chrome:latest
Robot Framework 7.0 Framework de tests fonctionnels (intégré à perfshop-test-runner)
robotframework-seleniumlibrary 6.3.0 Bindings Selenium pour Robot Framework (intégré à perfshop-test-runner)
robotframework-requests 0.9.6 Bindings HTTP pour Robot Framework (intégré à perfshop-test-runner)
robotframework-jsonlibrary 0.5 Manipulation JSON (intégré à perfshop-test-runner)
pytest 8.0 Framework Python alternatif (intégré à perfshop-test-runner)
selenium (Python) 4.18.1 Driver Selenium Python (intégré à perfshop-test-runner)
OpenSSH server (Debian) Canal SSH utilisé par Squash Orchestrator (intégré à perfshop-test-runner)
JMeter 5.5 (image justb4/jmeter) Tests de charge HTTP justb4/jmeter:5.5
perfshop-jmeter-ui Node.js 20-alpine + Express 4 UI custom de pilotage des tirs JMeter node:20-alpine (code monté en volume)
perfshop-scripts-ui Node.js 20-alpine + Express 4 Éditeur et lanceur de scripts pédagogiques node:20-alpine (code monté en volume)
Forgejo 14 Git auto-hébergé (fork communautaire de Gitea) codeberg.org/forgejo/forgejo:14

Outils transverses

Composant Version Rôle Image Docker
MkDocs Material latest Documentation servie par le conteneur docs squidfunk/mkdocs-material:latest
Python (seeds) 3.11-slim Scripts d'initialisation Grafana, Squash, Forgejo, OpenSearch python:3.11-slim
requests (seeds) 2.31.0 Client HTTP utilisé par tous les seeds (installé via pip install --no-cache-dir)

Frameworks et bibliothèques internes

Côté backend, le code applicatif s'appuie sur ces dépendances Spring standard :

Capacité Implémentation
Sessions HTTP jakarta.servlet.http.HttpSession (timeout 30 min, cookie HttpOnly, attribut secure et same-site configurables via env)
Authentification utilisateur AuthService + BCrypt strength 10, attribut session LOGGED_IN_USER
Authentification admin AdminAuth (session admin_logged_in ou header X-Admin-Token)
Validation jakarta.validation.@Valid + DTO LoginRequest, ValidationService métier
Internationalisation MessageSource Spring + résolution messages.properties (FR/EN), service I18nService
Métriques applicatives Spring Boot Actuator + Micrometer + endpoint Prometheus sur port management 9090

Versions clés à mémoriser

Si on doit retenir cinq versions

  • Java 21 + Spring Boot 3.2 côté backend
  • MySQL 8 côté données
  • Grafana 12.0.0 côté observabilité (les dashboards reposent sur les fonctionnalités de Grafana ≥ 11)
  • Tempo 2.4.2 (la version est figée volontairement, contrairement aux autres images obs en latest)
  • Forgejo 14 côté Git