PerfShop -- Code source complet de la plateforme pedagogique
  • JavaScript 48.5%
  • Java 23.1%
  • HTML 15.7%
  • CSS 4.2%
  • Python 2.9%
  • Other 5.6%
Find a file
2026-04-15 16:55:17 +02:00
admin Initial commit — PerfShop v0.1.0-beta 2026-04-14 19:51:52 +02:00
backend Initial commit — PerfShop v0.1.0-beta 2026-04-14 19:51:52 +02:00
chaos-admin Initial commit — PerfShop v0.1.0-beta 2026-04-14 19:51:52 +02:00
forgejo-seed Initial commit — PerfShop v0.1.0-beta 2026-04-14 19:51:52 +02:00
frontend Initial commit — PerfShop v0.1.0-beta 2026-04-14 19:51:52 +02:00
games Initial commit — PerfShop v0.1.0-beta 2026-04-14 19:51:52 +02:00
grafana Initial commit — PerfShop v0.1.0-beta 2026-04-14 19:51:52 +02:00
grafana-seed Initial commit — PerfShop v0.1.0-beta 2026-04-14 19:51:52 +02:00
jmeter Initial commit — PerfShop v0.1.0-beta 2026-04-14 19:51:52 +02:00
jmeter-ui Initial commit — PerfShop v0.1.0-beta 2026-04-14 19:51:52 +02:00
loki Initial commit — PerfShop v0.1.0-beta 2026-04-14 19:51:52 +02:00
mkdocs Initial commit — PerfShop v0.1.0-beta 2026-04-14 19:51:52 +02:00
monitoring Initial commit — PerfShop v0.1.0-beta 2026-04-14 19:51:52 +02:00
opensearch Initial commit — PerfShop v0.1.0-beta 2026-04-14 19:51:52 +02:00
opensearch-seed Initial commit — PerfShop v0.1.0-beta 2026-04-14 19:51:52 +02:00
prometheus Initial commit — PerfShop v0.1.0-beta 2026-04-14 19:51:52 +02:00
promtail Initial commit — PerfShop v0.1.0-beta 2026-04-14 19:51:52 +02:00
pyroscope Initial commit — PerfShop v0.1.0-beta 2026-04-14 19:51:52 +02:00
scripts-ui Initial commit — PerfShop v0.1.0-beta 2026-04-14 19:51:52 +02:00
squash-orchestrator Initial commit — PerfShop v0.1.0-beta 2026-04-14 19:51:52 +02:00
squash-seed Initial commit — PerfShop v0.1.0-beta 2026-04-14 19:51:52 +02:00
squash-tm Initial commit — PerfShop v0.1.0-beta 2026-04-14 19:51:52 +02:00
tempo Initial commit — PerfShop v0.1.0-beta 2026-04-14 19:51:52 +02:00
test-runner Initial commit — PerfShop v0.1.0-beta 2026-04-14 19:51:52 +02:00
vector Initial commit — PerfShop v0.1.0-beta 2026-04-14 19:51:52 +02:00
welcome Initial commit — PerfShop v0.1.0-beta 2026-04-14 19:51:52 +02:00
.env.example Initial commit — PerfShop v0.1.0-beta 2026-04-14 19:51:52 +02:00
.gitattributes Initial commit — PerfShop v0.1.0-beta 2026-04-14 19:51:52 +02:00
.gitignore Initial commit — PerfShop v0.1.0-beta 2026-04-14 19:51:52 +02:00
build.bat Initial commit — PerfShop v0.1.0-beta 2026-04-14 19:51:52 +02:00
build.sh Initial commit — PerfShop v0.1.0-beta 2026-04-14 19:51:52 +02:00
deploy.conf.example Initial commit — PerfShop v0.1.0-beta 2026-04-14 19:51:52 +02:00
docker-compose.build.yml Initial commit — PerfShop v0.1.0-beta 2026-04-14 19:51:52 +02:00
docker-compose.desktop.yml Initial commit — PerfShop v0.1.0-beta 2026-04-14 19:51:52 +02:00
LICENSE Initial commit — PerfShop v0.1.0-beta 2026-04-14 19:51:52 +02:00
LICENSE-COMMERCIAL.en Initial commit — PerfShop v0.1.0-beta 2026-04-14 19:51:52 +02:00
LICENSE-COMMERCIAL.fr Initial commit — PerfShop v0.1.0-beta 2026-04-14 19:51:52 +02:00
README.md Update README.md 2026-04-15 16:55:17 +02:00
result-publisher-community.jar Initial commit — PerfShop v0.1.0-beta 2026-04-14 19:51:52 +02:00
THIRD-PARTY-LICENSES Initial commit — PerfShop v0.1.0-beta 2026-04-14 19:51:52 +02:00

🌐 English · Français


PerfShop.io — Chaos Engineering Platform

The open source pedagogical platform to master chaos engineering, performance testing, and observability.

Deploy a complete full-stack e-commerce environment in 5 minutes — inject real anomalies, observe live metrics, train your QA, SRE, and DevOps teams.

🚧 Source repositorygithub.com/perfshop/perfshop.


🚀 Quick Start

Choose your deployment scenario below. All modes use the same build.sh script — only the target argument changes.


🪟 Windows — Docker Desktop

Prerequisites

Tool Download
Docker Desktop https://www.docker.com/products/docker-desktop/
Git for Windows (includes Git Bash) https://git-scm.com/download/win

Make sure Docker Desktop is started and running before proceeding.

Installation

Open Git Bash and run:

git clone https://github.com/perfshop/perfshop.git
cd perfshop
./build.sh desktop

Or with the native Windows launcher (cmd / PowerShell):

build.bat desktop

build.bat supports desktop and prod only. For Linux deployments, use ./build.sh unix or ./build.sh prod instead.

What the script does

⚠️ The script overwrites your .env file on every run, regenerating it from .env.example with the detected host IP injected into all PUBLIC_* URLs. Do not store custom values in .env — edit .env.example instead.

  1. Checks prerequisites (Docker, Git)
  2. Detects your host IP and lets you choose (useful for classroom use where students connect from other machines)
  3. Asks for a license key (Enter = community mode)
  4. Overwrites .env from .env.example and replaces localhost with your chosen IP
  5. Runs docker compose -f docker-compose.desktop.yml up -d --build
  6. Displays all service URLs

First launch: ~5 min (Maven build + npm install). Subsequent launches: ~30 sec (Docker cache).

Uses docker-compose.desktop.yml. Pyroscope runs in itimer mode (SIGPROF) — perf_event_open is unavailable under Docker Desktop's restricted Linux VM.

Silent / automated mode:

./build.sh desktop --silent --ip=192.168.1.10 --license=PFSH-xxx
./build.sh desktop --silent --ip=192.168.1.10 --lang=en
./build.sh desktop --params=deploy.conf

The script asks your preferred language (fr / en) before the banner. Use --lang=fr or --lang=en to skip the question in silent/CI mode. The chosen language is automatically injected into .env as PERFSHOP_LANG.

⚠️ Windows / Hyper-V port conflict — Hyper-V reserves port ranges at boot (typically 30613661). The following ports have been remapped in .env.example: DB_PORT=19306 · LOKI_HTTP_PORT=19100 · TEMPO_HTTP_PORT=19200


🐧 Linux — Local server / VPS / CI

Prerequisites

Works on all Debian-based distributions (Ubuntu, Debian, Linux Mint, Pop!_OS…). For other distros: use dnf on Fedora/RHEL or pacman on Arch. The Docker install script works everywhere.

# 1. Update system
sudo apt update && sudo apt upgrade -y

# 2. Install Docker
curl -fsSL https://get.docker.com | sudo sh
sudo usermod -aG docker $USER
newgrp docker

# 3. Install Git
sudo apt install -y git

After newgrp docker, Docker runs without sudo — no sudo needed for ./build.sh.

Installation

git clone https://github.com/perfshop/perfshop.git
cd perfshop
chmod +x build.sh
./build.sh unix

What the script does

⚠️ The script overwrites your .env file on every run, regenerating it from .env.example with the detected host IP injected into all PUBLIC_* URLs. Do not store custom values in .env — edit .env.example instead.

  1. Checks prerequisites
  2. Detects your host IP and lets you choose (LAN IP for multi-student access)
  3. Asks for a license key (Enter = community mode)
  4. Overwrites .env from .env.example and replaces localhost with your chosen IP
  5. Runs docker compose -f docker-compose.build.yml up -d --build
  6. Displays all service URLs

Uses docker-compose.build.yml. Pyroscope runs in cpu mode (perf_event) — requires bare-metal Linux or a full VPS (not available under Docker Desktop).

Silent / CI mode:

./build.sh unix --silent --ip=10.0.0.5
./build.sh unix --silent --ip=10.0.0.5 --lang=en

The script asks your preferred language (fr / en) before the banner. Use --lang=fr or --lang=en to skip the question in silent/CI mode. The chosen language is automatically injected into .env as PERFSHOP_LANG.


🏫 Production / University / Custom domain (DNS mode)

Use this mode when deploying on a server with real domain names (e.g. a university server, a cloud VPS with HTTPS, or any environment where URLs are not IP-based).

How it works

The script never touches your .env in this mode. All values are read as-is from the existing .env file. No IP is asked. No overwrite happens.

You are fully in control of the configuration.

Setup

git clone https://github.com/perfshop/perfshop.git
cd perfshop
chmod +x build.sh

# 1. Create your .env from the template
cp .env.example .env

# 2. Edit .env and fill in your real domain names and secrets
nano .env   # or vim, or any editor

Key variables to set in .env:

HOST_IP=perfshop.university.edu          # or your server IP

PUBLIC_FRONTEND_URL=https://perfshop.university.edu:9091
PUBLIC_API_URL=https://perfshop.university.edu:9080
PUBLIC_GRAFANA_URL=https://perfshop.university.edu:3002
PUBLIC_CHAOS_URL=https://perfshop.university.edu:3003
PUBLIC_FORGEJO_URL=https://perfshop.university.edu:3009
# ... all other PUBLIC_* URLs

FORGEJO_DOMAIN=perfshop.university.edu
CORS_ALLOWED_ORIGINS=https://perfshop.university.edu:9091,...
# 3. Deploy — reads your .env, never overwrites it
./build.sh prod

# Windows:
build.bat prod

Silent mode:

./build.sh prod --silent

# Windows:
build.bat prod --silent

🌐 Available Services

🏠 Welcome Page — your starting point

Bookmark this page. After deployment, all services are listed here with the correct host IP. Works with localhost for local access, and with the server IP for classroom deployments.

Local URL Production URL
http://localhost:3011 https://perfshop-welcome.perfshop.io

Main Stack

Service Local Production
🛒 Application http://localhost:9091 https://perfshop.perfshop.io
📊 Monitoring http://localhost:3001 https://perfshop-monitoring.perfshop.io
📈 Grafana http://localhost:3002 https://perfshop-grafana.perfshop.io
🔍 OpenSearch http://localhost:5601 https://perfshop-opensearch.perfshop.io
💥 Chaos Admin http://localhost:3003 https://perfshop-chaos.perfshop.io
🔧 Admin http://localhost:3004 https://perfshop-admin.perfshop.io
📚 Documentation http://localhost:9087 https://perfshop-docs.perfshop.io
🔌 API Backend http://localhost:9080 https://perfshop-api.perfshop.io

JMeter Stack

Service Local Production
🎯 JMeter UI http://localhost:3005 https://perfshop-jmeter.perfshop.io

Pedagogical QA Stack (Phase 9 & 10)

Service Local Production Login
🧪 Squash TM (ALM) http://localhost:9086/squash https://perfshop-squash.perfshop.io/squash admin / admin
🖥️ Selenium VNC http://localhost:7900 https://perfshop-selenium.perfshop.io
🦊 Forgejo Git http://localhost:3009 https://perfshop-git.perfshop.io admin / perfshop
📝 Scripts UI http://localhost:3008 https://perfshop-scripts.perfshop.io admin@perfshop.fr / perfshop

Grafana credentials: admin / perfshop

Test accounts: user1@perfshop.com / password1user20@perfshop.com / password20 (20 interactive accounts)

Load test accounts: load1@perfshop.com / load1load500@perfshop.com / load500 (500 accounts pre-loaded for JMeter scenarios)


Features

💥 Chaos Engineering

Backend — 8 anomalies (sliders 0100%)

Anomaly Description
🧠 JVM Memory Leak Progressively fills the JVM heap. Top slider sets fill target, bottom guardrail limits effective allocation.
📈 GC Pressure (sawtooth) Allocates short-lived objects in a loop → constant GC collections → sawtooth pattern on heap chart.
🗄️ DB Pool Saturation Blocks HikariCP connections. Requests queue up and timeout.
🧵 Thread Pool Saturation Blocks Tomcat threads with artificial delays. New requests rejected.
💻 CPU Overload Intensive SHA-256 computations in loop. Degrades all requests.
🌐 Slow SQL Queries Adds delays to SQL queries. Simulates overloaded DB or missing indexes.
🔒 DB Deadlock Triggers database deadlocks. Transaction rollbacks and retries.
🌍 Network Timeout Simulates slow connections and network timeouts. External call degradation.

Frontend — 5 anomalies (sliders 0100%)

Anomaly Description
🔥 Blocking CPU Loop Synchronous while() loop blocking the main thread. Browser freezes, clicks/scrolls unresponsive.
💾 JS Memory Leak Accumulates objects without releasing them (arrays, closures, orphan event listeners). Tab memory grows indefinitely.
🌊 Massive DOM Re-renders Massively inserts/removes DOM elements, forcing constant reflows/repaints. Rendering becomes choppy.
📡 Network Request Flood Launches HTTP requests in a loop. Saturates client network and generates backend load.
🔄 Double API Call Each click duplicates API calls. Backend receives 2× more requests. Classic double event listener bug.

Chaos Scripting — 4 levels (checkout flow token complexity)

Level Description
Level 1 Basic HTTP — standard checkout, no token required
Level 2 Session token — single token, static header
Level 3 Rotating token — token refreshed per request
Level 4 — Maestro Multi-step challenge with dynamic token and strict sequencing

Chaos Business — 4 levels (silent functional anomalies in e-commerce flow)

Level Description
Level 1 Subtle price rounding — cents randomly altered
Level 2 Stock inconsistency — available quantities differ between pages
Level 3 Order amount drift — total recalculated differently at checkout
Level 4 Silent order rejection — orders accepted then silently cancelled

Chaos Security — 4 levels (simulated OWASP Top 10 vulnerabilities)

Level Description
Level 1 Information disclosure — verbose error messages, stack traces exposed
Level 2 Broken access control — admin endpoints accessible without auth
Level 3 Injection — SQL injection vectors in product search
Level 4 — Master XSS + CSRF + admin portal exposure — combined attack surface

Chaos Pédagogique — 5 BAC levels (escape-room enigma system)

Level Enigmas Description
BAC 1 10 Beginner — HTTP basics, status codes, simple metrics reading
BAC 2 15 Intermediate — latency analysis, Grafana dashboards
BAC 3 20 Advanced — distributed traces, JVM profiling
BAC 4 25 Expert — chaos correlation, performance root-cause analysis
BAC 5 30 Master — full observability stack, SLO/SLA investigation

📊 Full APM Observability

  • Grafana + Prometheus — pre-configured JVM, HTTP, DB, and chaos-state dashboards
  • Tempo — end-to-end distributed OpenTelemetry traces
  • Pyroscope — continuous CPU and memory flamegraphs
  • Loki + Promtail — centralized log aggregation
  • OpenSearch + Vector — full-text log search and analytics
  • Zero configuration — everything is pre-wired out of the box

🧪 Complete Pedagogical QA Stack (Phase 9 & 10)

  • Squash TM — open source ALM: requirements → test cases → campaigns → results
  • Selenium Grid + noVNC — headless Chrome, students watch the browser execute live
  • Polyglot Test Runner — Robot Framework (.robot) AND pytest (.py) in the same container
  • Forgejo local Git — self-hosted Git server, perfshop-tests repository pre-initialized
  • Scripts UI — CodeMirror web editor, script execution, publish to Forgejo

🎮 PerfShop Games

  • Server Defender — pedagogical tower-defense game simulating SRE decisions under load

📜 Chaos Scripting

JMeter scripts provided at progressive pedagogical complexity levels.


⚙️ Configuration

All configuration is in the .env file.

Change ports (if conflict)

FRONTEND_HTTP_PORT=9091    # default
BACKEND_HTTP_PORT=9080     # default
DOCS_HTTP_PORT=9087        # default
DB_PORT=19306              # remapped — port 3306 reserved by Hyper-V on Windows
LOKI_HTTP_PORT=19100       # remapped — port 3100 reserved by Hyper-V on Windows
TEMPO_HTTP_PORT=19200      # remapped — port 3200 reserved by Hyper-V on Windows

Deploy on a custom domain

PUBLIC_API_URL=https://perfshop-api.yourdomain.com
PUBLIC_MONITORING_URL=https://perfshop-monitoring.yourdomain.com
PUBLIC_FRONTEND_URL=https://perfshop.yourdomain.com
PUBLIC_GRAFANA_URL=https://perfshop-grafana.yourdomain.com
PUBLIC_CHAOS_URL=https://perfshop-chaos.yourdomain.com
PUBLIC_ADMIN_URL=https://perfshop-admin.yourdomain.com
PUBLIC_FORGEJO_URL=https://perfshop-git.yourdomain.com
PUBLIC_SCRIPTS_URL=https://perfshop-scripts.yourdomain.com
FORGEJO_DOMAIN=perfshop-git.yourdomain.com
CORS_ALLOWED_ORIGINS=https://perfshop.yourdomain.com,https://perfshop-admin.yourdomain.com,https://perfshop-chaos.yourdomain.com

🏗️ Architecture

.env
 └── docker-compose.build.yml    ← Linux VPS / CI (local build, perf_event)
 └── docker-compose.desktop.yml  ← Docker Desktop Windows/macOS (local build, itimer)
      ├── perfshop-frontend    :9091   (React/Nginx)
      ├── perfshop-app         :9080   (Spring Boot)
      ├── perfshop-db          :19306  (MySQL — host port remapped for Windows)
      ├── perfshop-monitoring  :3001   (Node.js)
      ├── perfshop-chaos-admin :3003   (Nginx)
      ├── perfshop-admin       :3004   (Nginx)
      ├── prometheus           :9092
      ├── grafana              :3002
      ├── perfshop-loki        :19100  (host port remapped for Windows)
      ├── perfshop-tempo       :19200  (host port remapped for Windows)
      ├── pyroscope                    ← continuous profiling
      ├── docs                 :9087   (MkDocs)
      │
      ├── ── JMeter Stack ──────────────────────────────────────
      ├── perfshop-jmeter              (permanent container — runs via docker exec)
      ├── perfshop-jmeter-ui   :3005   (Node.js — JMeter control UI)
      ├── perfshop-games       :3010   (Nginx — pedagogical games hub)
      │
      ├── ── QA Stack Phase 9 ──────────────────────────────────
      ├── perfshop-testmgmt    :9086   (Squash TM — QA ALM) → /squash
      ├── perfshop-squash-db   :5433   (PostgreSQL 16 dedicated to Squash TM)
      ├── perfshop-selenium    :4444+7900 (headless Chrome + noVNC live)
      ├── perfshop-test-runner         ← Robot Framework + pytest + OpenSSH
      ├── perfshop-orchestrator        ← Squash Orchestrator (internal)
      ├── perfshop-squash-seed         ← one-shot Squash TM init
      │
      ├── ── Local Git Stack Phase 10 ──────────────────────────
      ├── perfshop-forgejo     :3009   (self-hosted Forgejo Git)
      ├── perfshop-forgejo-seed        ← one-shot accounts + repo + scripts init
      └── perfshop-scripts-ui  :3008   (editor + script runner)

🛑 Stop

docker compose down        # keep data
docker compose down -v     # remove everything (DB, metrics, dashboards)

📜 License

PerfShop is dual-licensed:

Usage License Cost
🟢 Personal, self-training, private testing AGPL-3.0-or-later Free
🔵 Professional, enterprise, training organizations Commercial On request

LICENSE · LICENSE-COMMERCIAL.en · contact@perfshop.io


📚 Full Documentation

http://localhost:9087 (local) — https://perfshop-docs.perfshop.io (production)


👤 Author

Philippe Naveau — Performance Testing & Chaos Engineering Expert


PerfShop.io — Master chaos, master performance.



PerfShop.io — Plateforme de Chaos Engineering

La plateforme pédagogique open source pour maîtriser le chaos engineering, les tests de performance et l'observabilité.

Déployez un environnement e-commerce full-stack complet en 5 minutes — injectez des anomalies réelles, observez les métriques en temps réel, formez vos équipes QA, SRE et DevOps.

🚧 Dépôt sourcegithub.com/perfshop/perfshop.


🚀 Démarrage rapide

Choisissez votre scénario de déploiement ci-dessous. Tous les modes utilisent le même script build.sh — seul l'argument cible change.


🪟 Windows — Docker Desktop

Prérequis

Outil Téléchargement
Docker Desktop https://www.docker.com/products/docker-desktop/
Git for Windows (inclut Git Bash) https://git-scm.com/download/win

Assurez-vous que Docker Desktop est démarré et en cours d'exécution avant de continuer.

Installation

Ouvrez Git Bash et lancez :

git clone https://github.com/perfshop/perfshop.git
cd perfshop
./build.sh desktop

Ou avec le lanceur Windows natif (cmd / PowerShell) :

build.bat desktop

build.bat supporte uniquement desktop et prod. Pour Linux, utilisez ./build.sh unix ou ./build.sh prod.

Ce que fait le script

⚠️ Le script écrase votre fichier .env à chaque exécution, en le régénérant depuis .env.example avec l'IP hôte détectée injectée dans toutes les URLs PUBLIC_*. Ne stockez pas de valeurs personnalisées dans .env — modifiez plutôt .env.example.

  1. Vérifie les prérequis (Docker, Git)
  2. Détecte votre IP hôte et vous laisse choisir (utile en salle où les étudiants se connectent depuis d'autres machines)
  3. Demande une clé de licence (Entrée = mode communauté)
  4. Écrase le .env depuis .env.example en remplaçant localhost par l'IP choisie
  5. Lance docker compose -f docker-compose.desktop.yml up -d --build
  6. Affiche toutes les URLs des services

Premier lancement : ~5 min (build Maven + npm install). Lancements suivants : ~30 sec (cache Docker).

Utilise docker-compose.desktop.yml. Pyroscope fonctionne en mode itimer (SIGPROF) — perf_event_open n'est pas disponible sous la VM Linux restreinte de Docker Desktop.

Mode silencieux / automatisé :

./build.sh desktop --silent --ip=192.168.1.10 --license=PFSH-xxx
./build.sh desktop --silent --ip=192.168.1.10 --lang=en
./build.sh desktop --params=deploy.conf

Le script propose le choix de langue (fr / en) avant le banner. Utilisez --lang=fr ou --lang=en pour ignorer la question en mode silencieux/CI. La langue choisie est automatiquement injectée dans .env comme PERFSHOP_LANG.

⚠️ Windows / Hyper-V — conflit de ports — Hyper-V réserve des plages de ports au démarrage (typiquement 30613661). Les ports suivants ont été remappés dans .env.example : DB_PORT=19306 · LOKI_HTTP_PORT=19100 · TEMPO_HTTP_PORT=19200


🐧 Linux — Serveur local / VPS / CI

Prérequis

Fonctionne sur toutes les distributions Debian-based (Ubuntu, Debian, Linux Mint, Pop!_OS…). Pour les autres : dnf sur Fedora/RHEL ou pacman sur Arch. Le script Docker fonctionne partout.

# 1. Mise à jour du système
sudo apt update && sudo apt upgrade -y

# 2. Installer Docker
curl -fsSL https://get.docker.com | sudo sh
sudo usermod -aG docker $USER
newgrp docker

# 3. Installer Git
sudo apt install -y git

Après newgrp docker, Docker s'utilise sans sudo — aucun sudo nécessaire pour ./build.sh.

Installation

git clone https://github.com/perfshop/perfshop.git
cd perfshop
chmod +x build.sh
./build.sh unix

Ce que fait le script

⚠️ Le script écrase votre fichier .env à chaque exécution, en le régénérant depuis .env.example avec l'IP hôte détectée injectée dans toutes les URLs PUBLIC_*. Ne stockez pas de valeurs personnalisées dans .env — modifiez plutôt .env.example.

  1. Vérifie les prérequis
  2. Détecte votre IP hôte et vous laisse choisir (IP LAN pour accès multi-étudiants)
  3. Demande une clé de licence (Entrée = mode communauté)
  4. Écrase le .env depuis .env.example en remplaçant localhost par l'IP choisie
  5. Lance docker compose -f docker-compose.build.yml up -d --build
  6. Affiche toutes les URLs des services

Utilise docker-compose.build.yml. Pyroscope fonctionne en mode cpu (perf_event) — nécessite Linux bare-metal ou VPS complet (non disponible sous Docker Desktop).

Mode silencieux / CI :

./build.sh unix --silent --ip=10.0.0.5
./build.sh unix --silent --ip=10.0.0.5 --lang=fr

Le script propose le choix de langue (fr / en) avant le banner. Utilisez --lang=fr ou --lang=en pour ignorer la question en mode silencieux/CI. La langue choisie est automatiquement injectée dans .env comme PERFSHOP_LANG.


🏫 Production / Université / Domaine personnalisé (mode DNS)

Utilisez ce mode pour déployer sur un serveur avec de vrais noms de domaine (serveur universitaire, VPS cloud avec HTTPS, ou tout environnement sans IP brute).

Fonctionnement

Le script ne touche jamais votre .env dans ce mode. Toutes les valeurs sont lues telles quelles depuis le fichier .env existant. Aucune IP n'est demandée. Aucun écrasement n'a lieu.

Vous gardez le contrôle total de la configuration.

Mise en place

git clone https://github.com/perfshop/perfshop.git
cd perfshop
chmod +x build.sh

# 1. Créer votre .env depuis le modèle
cp .env.example .env

# 2. Éditer .env et renseigner vos vrais domaines et secrets
nano .env   # ou vim, ou tout éditeur

Variables clés à renseigner dans .env :

HOST_IP=perfshop.universite.fr          # ou l'IP de votre serveur

PUBLIC_FRONTEND_URL=https://perfshop.universite.fr:9091
PUBLIC_API_URL=https://perfshop.universite.fr:9080
PUBLIC_GRAFANA_URL=https://perfshop.universite.fr:3002
PUBLIC_CHAOS_URL=https://perfshop.universite.fr:3003
PUBLIC_FORGEJO_URL=https://perfshop.universite.fr:3009
# ... toutes les autres URLs PUBLIC_*

FORGEJO_DOMAIN=perfshop.universite.fr
CORS_ALLOWED_ORIGINS=https://perfshop.universite.fr:9091,...
# 3. Déployer — lit votre .env, ne l'écrase jamais
./build.sh prod

# Windows :
build.bat prod

Mode silencieux :

./build.sh prod --silent

# Windows :
build.bat prod --silent

🌐 Services disponibles

🏠 Page d'accueil — votre point de départ

Mettez cette page en favori. Après le déploiement, tous les services y sont listés avec la bonne IP. Fonctionne avec localhost en local, et avec l'IP du serveur en salle de classe.

URL locale URL production
http://localhost:3011 https://perfshop-welcome.perfshop.io

Stack principale

Service Local Production
🛒 Application http://localhost:9091 https://perfshop.perfshop.io
📊 Monitoring http://localhost:3001 https://perfshop-monitoring.perfshop.io
📈 Grafana http://localhost:3002 https://perfshop-grafana.perfshop.io
🔍 OpenSearch http://localhost:5601 https://perfshop-opensearch.perfshop.io
💥 Chaos Admin http://localhost:3003 https://perfshop-chaos.perfshop.io
🔧 Admin http://localhost:3004 https://perfshop-admin.perfshop.io
📚 Documentation http://localhost:9087 https://perfshop-docs.perfshop.io
🔌 API Backend http://localhost:9080 https://perfshop-api.perfshop.io

Stack JMeter

Service Local Production
🎯 JMeter UI http://localhost:3005 https://perfshop-jmeter.perfshop.io

Stack QA pédagogique (Phase 9 & 10)

Service Local Production Login
🧪 Squash TM (ALM) http://localhost:9086/squash https://perfshop-squash.perfshop.io/squash admin / admin
🖥️ Selenium VNC http://localhost:7900 https://perfshop-selenium.perfshop.io
🦊 Forgejo Git local http://localhost:3009 https://perfshop-git.perfshop.io admin / perfshop
📝 Scripts UI http://localhost:3008 https://perfshop-scripts.perfshop.io admin@perfshop.fr / perfshop

Identifiants Grafana : admin / perfshop

Comptes de test : user1@perfshop.com / password1user20@perfshop.com / password20 (20 comptes interactifs)

Comptes tests de charge : load1@perfshop.com / load1load500@perfshop.com / load500 (500 comptes pré-chargés pour les scénarios JMeter)


Fonctionnalités

💥 Chaos Engineering

Backend — 8 anomalies (sliders 0100%)

Anomalie Description
🧠 JVM Memory Leak Remplit progressivement le heap JVM. Slider haut = objectif de remplissage, slider bas = guardrail.
📈 GC Pressure (dents de scie) Alloue des objets éphémères en boucle → GC constant → pattern en dents de scie sur le heap.
🗄️ DB Pool Saturation Bloque les connexions HikariCP. Les requêtes s'accumulent et timeout.
🧵 Thread Pool Saturation Bloque les threads Tomcat avec des délais artificiels. Nouvelles requêtes rejetées.
💻 CPU Overload Calculs SHA-256 intensifs en boucle. Dégrade toutes les requêtes.
🌐 Slow SQL Queries Ajoute des délais aux requêtes SQL. Simule une BDD surchargée ou des index manquants.
🔒 DB Deadlock Déclenche des deadlocks en base. Rollbacks et retentatives de transactions.
🌍 Network Timeout Simule des connexions lentes et timeouts réseau. Dégradation des appels externes.

Frontend — 5 anomalies (sliders 0100%)

Anomalie Description
🔥 Blocking CPU Loop Boucle while() synchrone bloquant le thread principal. Navigateur gelé, clics/scrolls sans réponse.
💾 JS Memory Leak Accumule des objets sans les libérer (tableaux, closures, event listeners orphelins). Mémoire de l'onglet croît indéfiniment.
🌊 Massive DOM Re-renders Insère/supprime massivement des éléments DOM, forçant reflows/repaints constants. Rendu saccadé.
📡 Network Request Flood Lance des requêtes HTTP en boucle. Sature la connexion réseau client et génère de la charge backend.
🔄 Double API Call Chaque clic duplique les appels API. Le backend reçoit 2× plus de requêtes. Bug classique double event listener.

Chaos Scripting — 4 niveaux (complexité des tokens sur le tunnel checkout)

Niveau Description
Niveau 1 HTTP basique — checkout standard, aucun token requis
Niveau 2 Token de session — token unique, header statique
Niveau 3 Token tournant — token rafraîchi à chaque requête
Niveau 4 — Maestro Challenge multi-étapes avec token dynamique et séquençage strict

Chaos Business — 4 niveaux (anomalies fonctionnelles silencieuses dans le flux e-commerce)

Niveau Description
Niveau 1 Arrondi de prix subtil — centimes aléatoirement altérés
Niveau 2 Incohérence de stock — quantités disponibles différentes selon les pages
Niveau 3 Dérive du montant commande — total recalculé différemment au checkout
Niveau 4 Rejet silencieux — commandes acceptées puis annulées silencieusement

Chaos Sécurité — 4 niveaux (vulnérabilités OWASP Top 10 simulées)

Niveau Description
Niveau 1 Divulgation d'informations — messages d'erreur verbeux, stack traces exposées
Niveau 2 Contrôle d'accès cassé — endpoints admin accessibles sans authentification
Niveau 3 Injection — vecteurs d'injection SQL dans la recherche produit
Niveau 4 — Master XSS + CSRF + exposition portail admin — surface d'attaque combinée

Chaos Pédagogique — 5 niveaux BAC (système d'énigmes escape-room)

Niveau Énigmes Description
BAC 1 10 Débutant — bases HTTP, codes de statut, lecture de métriques simples
BAC 2 15 Intermédiaire — analyse de latence, dashboards Grafana
BAC 3 20 Avancé — traces distribuées, profiling JVM
BAC 4 25 Expert — corrélation chaos, analyse root-cause performance
BAC 5 30 Maître — stack observabilité complète, investigation SLO/SLA

📊 Observabilité APM complète

  • Grafana + Prometheus — dashboards JVM, HTTP, DB, chaos state pré-configurés
  • Tempo — traces distribuées OpenTelemetry de bout en bout
  • Pyroscope — flamegraphs CPU et mémoire en continu
  • Loki + Promtail — agrégation centralisée des logs
  • OpenSearch + Vector — recherche full-text et analyse des logs
  • Zéro configuration — tout est pré-câblé out-of-the-box

🧪 Stack QA pédagogique complète (Phase 9 & 10)

  • Squash TM — ALM open source : exigences → cas de test → campagnes → résultats
  • Selenium Grid + noVNC — Chrome headless, les étudiants voient le navigateur s'exécuter en direct
  • Test Runner polyglotte — Robot Framework (.robot) ET pytest (.py) dans le même container
  • Forgejo Git local — serveur Git auto-hébergé, dépôt perfshop-tests pré-initialisé
  • Scripts UI — éditeur web CodeMirror, lancement de scripts, publication vers Forgejo

🎮 PerfShop Games

  • Server Defender — jeu pédagogique tower-defense simulant les décisions SRE sous charge

📜 Chaos Scripting

Scripts JMeter fournis en niveaux de complexité pédagogique progressifs.


⚙️ Configuration

Tout se passe dans le fichier .env.

Changer les ports (si conflit)

FRONTEND_HTTP_PORT=9091    # défaut
BACKEND_HTTP_PORT=9080     # défaut
DOCS_HTTP_PORT=9087        # défaut
DB_PORT=19306              # remappé — port 3306 réservé par Hyper-V sur Windows
LOKI_HTTP_PORT=19100       # remappé — port 3100 réservé par Hyper-V sur Windows
TEMPO_HTTP_PORT=19200      # remappé — port 3200 réservé par Hyper-V sur Windows

Déployer sur un autre domaine

PUBLIC_API_URL=https://perfshop-api.mondomaine.com
PUBLIC_MONITORING_URL=https://perfshop-monitoring.mondomaine.com
PUBLIC_FRONTEND_URL=https://perfshop.mondomaine.com
PUBLIC_GRAFANA_URL=https://perfshop-grafana.mondomaine.com
PUBLIC_CHAOS_URL=https://perfshop-chaos.mondomaine.com
PUBLIC_ADMIN_URL=https://perfshop-admin.mondomaine.com
PUBLIC_FORGEJO_URL=https://perfshop-git.mondomaine.com
PUBLIC_SCRIPTS_URL=https://perfshop-scripts.mondomaine.com
FORGEJO_DOMAIN=perfshop-git.mondomaine.com
CORS_ALLOWED_ORIGINS=https://perfshop.mondomaine.com,https://perfshop-admin.mondomaine.com,https://perfshop-chaos.mondomaine.com

🏗️ Architecture

.env
 └── docker-compose.build.yml    ← VPS Linux / CI (build local, perf_event)
 └── docker-compose.desktop.yml  ← Docker Desktop Windows/macOS (build local, itimer)
      ├── perfshop-frontend    :9091   (React/Nginx)
      ├── perfshop-app         :9080   (Spring Boot)
      ├── perfshop-db          :19306  (MySQL — port host remappé pour Windows)
      ├── perfshop-monitoring  :3001   (Node.js)
      ├── perfshop-chaos-admin :3003   (Nginx)
      ├── perfshop-admin       :3004   (Nginx)
      ├── prometheus           :9092
      ├── grafana              :3002
      ├── perfshop-loki        :19100  (port host remappé pour Windows)
      ├── perfshop-tempo       :19200  (port host remappé pour Windows)
      ├── pyroscope                    ← profiling continu
      ├── docs                 :9087   (MkDocs)
      │
      ├── ── Stack JMeter ──────────────────────────────────────
      ├── perfshop-jmeter              (container permanent — tirs via docker exec)
      ├── perfshop-jmeter-ui   :3005   (Node.js — IHM pilotage JMeter)
      ├── perfshop-games       :3010   (Nginx — hub de mini-jeux pédagogiques)
      │
      ├── ── Stack QA Phase 9 ──────────────────────────────────
      ├── perfshop-testmgmt    :9086   (Squash TM — ALM QA) → /squash
      ├── perfshop-squash-db   :5433   (PostgreSQL 16 dédié Squash TM)
      ├── perfshop-selenium    :4444+7900 (Chrome headless + noVNC live)
      ├── perfshop-test-runner         ← Robot Framework + pytest + OpenSSH
      ├── perfshop-orchestrator        ← Squash Orchestrator (interne)
      ├── perfshop-squash-seed         ← one-shot init Squash TM
      │
      ├── ── Stack Git local Phase 10 ──────────────────────────
      ├── perfshop-forgejo     :3009   (Forgejo Git auto-hébergé)
      ├── perfshop-forgejo-seed        ← one-shot init comptes + dépôt + scripts
      └── perfshop-scripts-ui  :3008   (éditeur + lanceur de scripts)

🛑 Arrêter

docker compose down        # garde les données
docker compose down -v     # supprime tout (BDD, métriques, dashboards)

📜 Licence

PerfShop est distribué sous double licence :

Usage Licence Coût
🟢 Personnel, auto-formation, tests privés AGPL-3.0-or-later Gratuit
🔵 Professionnel, entreprise, ESN, formation Commerciale Sur devis

LICENSE · LICENSE-COMMERCIAL.fr · contact@perfshop.io


📚 Documentation complète

http://localhost:9087 (local) — https://perfshop-docs.perfshop.io (production)


👤 Auteur

Philippe Naveau — Expert Tests de Performance & Chaos Engineering


PerfShop.io — Maîtrisez le chaos, maîtrisez la performance.