Aller au contenu

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 :

# Local (Docker Desktop / build)
cp .env.example .env

# Production (NAS)
cp .env.production .env

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.