Skip to content

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)

Admin and instructor tools

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

Cross-cutting tools

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