Aller au contenu

Lancer Docker Compose

PerfShop est livré avec trois fichiers Docker Compose distincts. Chacun cible un scénario de déploiement précis. Cette page décrit lequel choisir, comment le démarrer, et comment gérer le cycle de vie de la stack.

Les trois fichiers compose

Fichier Cible Stratégie d'image
docker-compose.yml Production — NAS Synology, VPS production, registry d'images Utilise des images pré-construites publiées sur un registry
docker-compose.desktop.yml Docker Desktop (Windows, macOS) Build local des images avec optimisations Docker Desktop
docker-compose.build.yml Linux local, VPS Unix, CI Build local sans optimisations spécifiques Docker Desktop

Choisir le bon fichier

  • Sur Windows / macOS avec Docker Desktop : utilisez docker-compose.desktop.yml
  • Sur Linux en local ou sur un VPS : utilisez docker-compose.build.yml
  • En production NAS : utilisez docker-compose.yml avec .env.production

Première mise en route

1. Copier le fichier d'environnement

cp .env.example .env

Ce fichier contient toutes les variables de configuration avec des valeurs par défaut raisonnables pour un déploiement local. Vous pouvez le laisser en l'état pour un premier démarrage, ou éditer les valeurs que vous voulez personnaliser (mots de passe, langue, ports, URL publiques).

Points à vérifier selon votre situation :

  • HOST_IP — garder localhost sur Docker Desktop ; mettre l'IP de l'hôte si vous voulez que d'autres postes puissent accéder
  • PERFSHOP_LANGfr (défaut) ou en
  • ADMIN_PASSWORD — à changer pour toute exposition publique
  • DB_PASSWORD, DB_ROOT_PASSWORD — idem
  • PERFSHOP_LICENSE_KEY — collez votre clé PerfShop ici pour démarrer avec la licence déjà active (voir Système de licence)

Voir la référence des variables d'environnement pour le détail exhaustif.

2. Démarrer la stack

docker compose -f docker-compose.desktop.yml up -d --build
docker compose -f docker-compose.build.yml up -d --build
cp .env.production .env
docker compose up -d

L'option -d démarre en mode détaché (en arrière-plan). L'option --build force la reconstruction des images locales — nécessaire au premier démarrage et après chaque modification de code.

Le premier démarrage télécharge les images de base (MySQL, Grafana, Prometheus, Loki, Tempo, OpenSearch, Selenium…), ce qui peut prendre plusieurs minutes selon votre connexion. Les démarrages suivants sont beaucoup plus rapides.

3. Attendre que les healthchecks passent

Plusieurs services ont des dépendances explicites via depends_on: { condition: service_healthy }. Le backend attend MySQL, le monitoring attend le backend, etc. Compose gère l'ordre de démarrage automatiquement.

Vous pouvez suivre l'état avec :

docker compose ps

Tous les services doivent passer de starting à healthy en 30 à 90 secondes selon la machine. Le plus lent est souvent perfshop-app (Spring Boot avec Flyway qui exécute V1-V10 sur une base vide).

4. Accéder à la welcome page

Une fois la stack démarrée, ouvrez dans un navigateur :

http://<HOST_IP>:3011

Cette page liste toutes les URLs des services exposés avec leurs identifiants par défaut. Voir Page d'accueil welcome.

Cycle de vie

Arrêter la stack

docker compose -f <fichier-compose> down

Les conteneurs sont arrêtés et supprimés. Les volumes persistants (base de données, données Grafana, dashboards provisionnés, logs Loki, traces Tempo, profils Pyroscope) sont conservés.

Arrêter et supprimer les volumes

docker compose -f <fichier-compose> down -v

Ajoute -v pour supprimer aussi les volumes — toute la base de données, les dashboards Grafana personnalisés, les logs historiques seront perdus. À utiliser pour repartir d'un état propre.

Redémarrer un seul service

docker compose restart perfshop-app

Utile après un changement de configuration backend sans toucher aux autres services.

Voir les logs

# Tous les services
docker compose logs -f

# Un seul service
docker compose logs -f perfshop-app

# Les 100 dernières lignes
docker compose logs --tail=100 perfshop-app

L'option -f fait du tail continu.

Reconstruire une seule image

docker compose build perfshop-app
docker compose up -d perfshop-app

Utile après modification du code d'un seul composant sans vouloir tout reconstruire.

Volumes persistants

Les données suivantes sont conservées entre redémarrages :

Volume Docker Service Contenu
mysql-data perfshop-db Base PerfShop (users, products, orders, licence, sessions…)
grafana-data perfshop-grafana Utilisateurs Grafana, dashboards personnels
prometheus-data perfshop-prometheus Historique des métriques (rétention par défaut 15 jours)
loki-data perfshop-loki Historique des logs
tempo-data perfshop-tempo Historique des traces
pyroscope-data perfshop-pyroscope Profils CPU et mémoire
squash-db-data perfshop-squash-db Base Squash TM
opensearch-data perfshop-opensearch Index OpenSearch
forgejo-data perfshop-forgejo Dépôts Git locaux

Dépendances entre services

Docker Compose démarre les services dans l'ordre défini par depends_on. Le graphe simplifié :

flowchart TD
  db[perfshop-db]
  app[perfshop-app]
  front[perfshop-frontend]
  mon[perfshop-monitoring]
  chaos[perfshop-chaos-admin]
  welcome[perfshop-welcome]

  prom[perfshop-prometheus]
  graf[perfshop-grafana]
  loki[perfshop-loki]
  tempo[perfshop-tempo]
  pyro[perfshop-pyroscope]

  db --> app
  app --> front
  app --> mon
  app --> chaos
  prom --> graf
  loki --> graf
  tempo --> graf
  pyro --> graf
  app -.->|push metrics| prom
  app -.->|push logs| loki
  app -.->|push traces| tempo
  app -.->|push profiles| pyro

Les services de stack QA (Selenium, Squash, Forgejo, Scripts UI, JMeter UI) sont largement indépendants du cœur PerfShop et démarrent en parallèle.

Healthchecks

Chaque service critique expose un healthcheck HTTP ou une commande shell que Docker interroge toutes les quelques secondes :

Service Endpoint / commande
perfshop-app GET /actuator/health
perfshop-frontend curl http://localhost
perfshop-db mysqladmin ping
perfshop-grafana GET /api/health
perfshop-prometheus GET /-/healthy

L'option condition: service_healthy dans depends_on fait que Compose attend que le healthcheck soit vert avant de démarrer les services dépendants.

Voir aussi