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) |
| 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