Technical stack
This page lists every software component used by PerfShop with its exact version, its role and the corresponding Docker image. All versions are read directly from the deployment Docker Compose files (docker-compose.desktop.yml, docker-compose.build.yml), from application.yml and from the project Dockerfiles.
Images and builds
PerfShop uses a mix of upstream official images (Prometheus, Grafana, Loki, etc.) and custom images built from the source code (perfshop-backend, perfshop-frontend, perfshop-admin, perfshop-chaos-admin, perfshop-monitoring, perfshop-welcome, perfshop-test-runner). Custom images follow a versioned tag scheme (v4, v17, v18, etc.) managed by the build.sh / build.bat scripts.
Application core
| Component |
Version |
Role |
Docker image |
| Java |
21 |
Spring Boot backend runtime |
(embedded in perfshop-backend) |
| Spring Boot |
3.2 |
Backend framework (REST, JPA, Actuator) |
(embedded in perfshop-backend) |
| Spring Web MVC |
included |
Synchronous HTTP stack with embedded Tomcat |
(embedded in perfshop-backend) |
| Hibernate ORM |
included |
JPA, MySQLDialect |
(embedded in perfshop-backend) |
| HikariCP |
included |
JDBC connection pool, name PerfShopHikariPool, max 20 / min 5 |
(embedded in perfshop-backend) |
| Flyway |
included |
Versioned SQL migrations (V1 → V38) |
(embedded in perfshop-backend) |
| Lombok |
included |
@Data / @Getter / @Setter generation |
(embedded in perfshop-backend) |
| BCrypt |
included (Spring Security crypto) |
User and admin password hashing (strength 10) |
(embedded in perfshop-backend) |
| MySQL |
8.0 |
Main database |
mysql:8.0 |
| React |
18 |
E-commerce shop UI framework |
(embedded in perfshop-frontend) |
| Vite |
5 |
Frontend bundler |
(embedded in perfshop-frontend) |
| nginx |
(official alpine image) |
Serves the React bundle + internal reverse proxy |
(embedded in perfshop-frontend) |
| Component |
Stack |
Role |
Docker image |
perfshop-admin |
Vanilla HTML/CSS/JS served by nginx |
Backoffice for products, orders, accounts |
perfshop-admin:v4 (custom) |
perfshop-chaos-admin |
Vanilla HTML/CSS/JS served by nginx |
Control panel for the 6 chaos families |
perfshop-chaos-admin:v8 (custom) |
perfshop-monitoring |
Node.js + Express |
Real-time HTML dashboard + Docker socket aggregation |
perfshop-monitoring:v4 (custom) |
perfshop-welcome |
nginx + static HTML |
Landing page with the URL directory |
perfshop-welcome:v6 (custom) |
Observability
| Component |
Version |
Role |
Docker image |
| Prometheus |
latest (official image) |
Metrics collection |
prom/prometheus:latest |
| Grafana |
12.0.0 |
Dashboards and exploration |
grafana/grafana:12.0.0 |
| Loki |
latest |
Log storage (Promtail → Loki) |
grafana/loki:latest |
| Promtail |
latest |
Docker log collection via socket |
grafana/promtail:latest |
| Tempo |
2.4.2 |
Distributed traces storage and query |
grafana/tempo:2.4.2 |
| Pyroscope |
latest |
JVM continuous profiling |
grafana/pyroscope:latest |
| OpenTelemetry Java agent |
bundled opentelemetry-javaagent.jar |
OTLP traces export from the backend |
(embedded in perfshop-backend) |
| Pyroscope Java agent |
bundled pyroscope.jar |
JFR export of CPU/alloc/lock profiles |
(embedded in perfshop-backend) |
| OpenSearch |
2.13.0 |
Indexing and full-text search of logs |
opensearchproject/opensearch:2.13.0 |
| OpenSearch Dashboards |
2.13.0 |
OpenSearch visualization UI |
opensearchproject/opensearch-dashboards:2.13.0 |
| Vector |
0.38.0-alpine |
Docker logs collection → OpenSearch (VRL transform) |
timberio/vector:0.38.0-alpine |
Pedagogical QA stack
| Component |
Version |
Role |
Docker image |
| Squash TM |
latest |
Test case management ALM |
squashtest/squash-tm:latest |
| Squash Orchestrator |
latest |
SSH-driven test execution |
squashtest/squash-orchestrator:latest |
| PostgreSQL |
16 |
Dedicated Squash TM database |
postgres:16 |
| Selenium standalone-chrome |
latest |
Selenium Grid + headless Chrome + noVNC |
selenium/standalone-chrome:latest |
| Robot Framework |
7.0 |
Functional testing framework |
(embedded in perfshop-test-runner) |
| robotframework-seleniumlibrary |
6.3.0 |
Selenium bindings for Robot Framework |
(embedded in perfshop-test-runner) |
| robotframework-requests |
0.9.6 |
HTTP bindings for Robot Framework |
(embedded in perfshop-test-runner) |
| robotframework-jsonlibrary |
0.5 |
JSON manipulation |
(embedded in perfshop-test-runner) |
| pytest |
8.0 |
Alternative Python framework |
(embedded in perfshop-test-runner) |
| selenium (Python) |
4.18.1 |
Python Selenium driver |
(embedded in perfshop-test-runner) |
| OpenSSH server |
(Debian) |
SSH channel used by Squash Orchestrator |
(embedded in perfshop-test-runner) |
| JMeter |
5.5 (justb4/jmeter image) |
HTTP load testing |
justb4/jmeter:5.5 |
perfshop-jmeter-ui |
Node.js 20-alpine + Express 4 |
Custom UI to drive JMeter test runs |
node:20-alpine (code mounted as volume) |
perfshop-scripts-ui |
Node.js 20-alpine + Express 4 |
Editor and launcher for pedagogical scripts |
node:20-alpine (code mounted as volume) |
| Forgejo |
14 |
Self-hosted Git (community fork of Gitea) |
codeberg.org/forgejo/forgejo:14 |
| Component |
Version |
Role |
Docker image |
| MkDocs Material |
latest |
Documentation served by the docs container |
squidfunk/mkdocs-material:latest |
| Python (seeds) |
3.11-slim |
Initialization scripts for Grafana, Squash, Forgejo, OpenSearch |
python:3.11-slim |
requests (seeds) |
2.31.0 |
HTTP client used by all seeds |
(installed via pip install --no-cache-dir) |
Internal frameworks and libraries
On the backend side, the application code relies on these standard Spring dependencies:
| Capability |
Implementation |
| HTTP sessions |
jakarta.servlet.http.HttpSession (30 min timeout, HttpOnly cookie, secure and same-site attributes configurable via env) |
| User authentication |
AuthService + BCrypt strength 10, LOGGED_IN_USER session attribute |
| Admin authentication |
AdminAuth (admin_logged_in session or X-Admin-Token header) |
| Validation |
jakarta.validation.@Valid + LoginRequest DTO, business ValidationService |
| Internationalization |
Spring MessageSource + messages.properties resolution (FR/EN), I18nService service |
| Application metrics |
Spring Boot Actuator + Micrometer + Prometheus endpoint on management port 9090 |
Key versions to remember
If you must remember five versions
- Java 21 + Spring Boot 3.2 on the backend
- MySQL 8 on the data side
- Grafana 12.0.0 on the observability side (the dashboards rely on Grafana ≥ 11 features)
- Tempo 2.4.2 (the version is deliberately pinned, unlike the other observability images at
latest)
- Forgejo 14 on the Git side