Docker Compose¶
Structure des services¶
Stack principale¶
perfshop-frontend # React/Nginx — port 9091
perfshop-app # Spring Boot — port 9080 (API) + 9090 (Actuator)
perfshop-db # MySQL 8.0 — port 3306 (interne)
perfshop-monitoring # Node.js — port 3001
perfshop-chaos-admin # Nginx HTML — port 3003
perfshop-admin # Nginx HTML — port 3004
prometheus # Prometheus — port 9092
grafana # Grafana — port 3002
docs # MkDocs Material — port 9087
perfshop-loki # Loki — port 3100
perfshop-promtail # Promtail (collecte logs Docker)
perfshop-tempo # Tempo — port 3200
perfshop-pyroscope # Pyroscope — port 4040
Stack JMeter¶
perfshop-jmeter # JMeter 5.5 permanent — docker exec pour les tirs
perfshop-jmeter-ui # Node.js UI — port 3005
Stack QA pédagogique (Phase 9)¶
perfshop-squash-db # PostgreSQL 16 — port 5433
perfshop-testmgmt # Squash TM — port 9086 (local) / 8088 (prod)
perfshop-selenium # Selenium Grid Chrome — port 4444 + VNC 7900
perfshop-test-runner # Robot Framework + pytest + OpenSSH
perfshop-orchestrator # Squash Orchestrator — ports 7774/7775/7776
perfshop-filebrowser # Filebrowser — port 3007
perfshop-squash-seed # Init Squash TM (restart: no)
Stack Git local (Phase 10)¶
perfshop-forgejo # Forgejo Git auto-hébergé — port 3009
perfshop-forgejo-seed # Init comptes + dépôt + scripts (restart: no)
perfshop-scripts-ui # Éditeur + lanceur de scripts — port 3008
Trois fichiers docker-compose¶
| Fichier | Usage | Build | Pyroscope |
|---|---|---|---|
docker-compose.desktop.yml |
Build local — Docker Desktop Windows/macOS | ✅ | itimer (SIGPROF) |
docker-compose.build.yml |
Build local — VPS Linux / CI | ✅ | cpu (perf_event) |
docker-compose.yml |
Production NAS — images registry GitLab | ❌ images | cpu (perf_event) |
Pourquoi deux modes Pyroscope ?
perf_event_open (mode cpu) nécessite un accès kernel Linux direct. Sous Docker Desktop,
la VM interne a kernel.perf_event_paranoid=3 — cet appel système est bloqué.
Le mode itimer utilise SIGPROF (signal POSIX) — 100% JVM, aucun privilège kernel.
Services NAS sans build (image + volume)¶
Deux services ne peuvent pas utiliser build: sur le NAS Synology (pas de seccomp) :
ils utilisent une image standard avec le code source monté en volume.
| Service | Image | Démarrage |
|---|---|---|
perfshop-jmeter-ui |
node:20-alpine |
npm install && node src/server.js |
perfshop-scripts-ui |
node:20-alpine |
npm install && node src/server.js |
perfshop-forgejo-seed |
python:3.11-slim |
pip install requests && python seed.py |
perfshop-squash-seed |
python:3.11-slim |
pip install requests && python seed.py |
Réseau¶
Tous les services partagent le réseau bridge perfshop-network.
Aucun service n'est exposé directement sur Internet — le reverse proxy Synology gère
les sous-domaines *.perfshop.io.
Volumes persistants¶
| Volume | Service | Contenu |
|---|---|---|
mysql-data |
perfshop-db | Données MySQL |
prometheus-data |
prometheus | Métriques |
grafana-data |
grafana | Dashboards, datasources |
loki-data |
perfshop-loki | Logs |
tempo-data |
perfshop-tempo | Traces distribuées |
pyroscope-data |
perfshop-pyroscope | Profils JVM |
squash-db-data |
perfshop-squash-db | BDD PostgreSQL Squash TM |
forgejo-data |
perfshop-forgejo | Dépôts Git + config Forgejo |
forgejo-token-data |
forgejo-seed → scripts-ui | Token API CI partagé |
scripts-ui-modules |
perfshop-scripts-ui | node_modules (NAS) |
jmeter-ui-modules |
perfshop-jmeter-ui | node_modules (NAS) |
filebrowser-data |
perfshop-filebrowser | Base SQLite Filebrowser |
Variables d'environnement¶
Tout se configure via le fichier .env à la racine :
Variables Phase 10 — Forgejo + Scripts UI¶
| Variable | Description | Défaut |
|---|---|---|
FORGEJO_HTTP_PORT |
Port Forgejo exposé | 3009 |
FORGEJO_DOMAIN |
Domaine Forgejo (pour ROOT_URL) | localhost |
FORGEJO_ADMIN_USER |
Login admin Forgejo | forgejo-admin |
FORGEJO_ADMIN_PASSWORD |
Mot de passe admin Forgejo | PerfShop2026! |
FORGEJO_CI_USER |
Login compte CI | perfshop-ci |
FORGEJO_CI_PASSWORD |
Mot de passe compte CI | Squash2026/* |
FORGEJO_CI_EMAIL |
Email compte CI | ci@perfshop.fr |
FORGEJO_REPO |
Nom du dépôt de scripts | perfshop-tests |
SCRIPTS_UI_PORT |
Port Scripts UI exposé | 3008 |
PUBLIC_FORGEJO_URL |
URL publique Forgejo | http://localhost:3009 |
PUBLIC_SCRIPTS_URL |
URL publique Scripts UI | http://localhost:3008 |
SESSION_SECRET |
Secret session Express (scripts-ui) | perfshop-dev-secret |
Ajouter un service¶
mon-service:
image: mon-image:tag
container_name: mon-service
ports:
- "PORT_HOTE:PORT_CONTENEUR"
mem_limit: 256m
mem_reservation: 64m
networks:
- perfshop-network
restart: unless-stopped
Limite mémoire obligatoire
Toujours définir mem_limit pour éviter qu'un service ne consomme toute la RAM.
Ports Windows
Sur Windows, les ports 80xx sont souvent réservés. PerfShop utilise des ports 90xx (local) pour éviter les conflits.