Build & Déploiement¶
Démarrage rapide local (Docker Desktop)¶
git clone https://perfshop-gitlab.perfshop.io/perf/perfshop.git
cd perfshop
cp .env.example .env
docker compose -f docker-compose.build.yml up -d --build
Premier lancement : ~5 min (build Maven + npm install).
Lancements suivants : ~30 sec (cache Docker).
Déploiement production (NAS)¶
Rebuild un seul service¶
# Frontend (nécessite un build Vite)
docker compose build perfshop-frontend && docker compose up -d perfshop-frontend
# Backend (nécessite un build Maven)
docker compose build perfshop-app && docker compose up -d perfshop-app
# Monitoring — server.js modifié → rebuild obligatoire
docker compose build perfshop-monitoring && docker compose up -d perfshop-monitoring
# Monitoring — fichiers HTML uniquement → SCP suffit, pas de rebuild
# scp monitoring/public/admin/monitoring.html user@nas:/volume4/docker-speed/perfshop/monitoring/public/admin/
# Docs (restart suffit si seul mkdocs.yml ou les .md changent)
docker compose restart docs
Vérifier les containers¶
Voir les logs¶
docker logs perfshop-app --tail=50 -f
docker logs perfshop-monitoring --tail=50 -f
docker logs perfshop-frontend --tail=20
Réinitialiser la base de données¶
docker compose down -v --remove-orphans
docker volume prune -f
docker compose -f docker-compose.build.yml up -d --build
Flyway
Flyway applique les migrations automatiquement au démarrage du backend.
Ne pas modifier les fichiers V*.sql déjà appliqués — leur checksum est vérifié à chaque démarrage.
Arborescence des fichiers¶
perfshop/
├── .env.example # Ports 90xx, valeurs locales
├── .env.production # URLs production NAS
├── .gitattributes # Force LF sur les scripts .sh
├── docker-compose.yml # Production (images registry GitLab)
├── docker-compose.build.yml # Local (build depuis sources)
├── frontend/
│ ├── Dockerfile
│ ├── env-inject.sh # Substitution URLs au démarrage
│ ├── src/
│ │ ├── App.jsx
│ │ ├── chaos-agent.js
│ │ └── ...
│ └── package.json
├── backend/
│ ├── Dockerfile
│ ├── src/main/java/com/perfshop/
│ │ ├── config/
│ │ │ ├── CorsConfig.java # CORS via CORS_ALLOWED_ORIGINS
│ │ │ └── WebConfig.java # ChaosInterceptor
│ │ ├── controller/
│ │ │ ├── AuthController.java # login, logout
│ │ │ ├── UserController.java # /me, status, updateProfile
│ │ │ └── ...
│ │ └── chaos/
│ └── pom.xml
├── monitoring/
│ ├── Dockerfile
│ └── src/server.js
├── admin/
│ ├── Dockerfile
│ └── env-inject-nginx.sh
├── chaos-admin/
│ ├── Dockerfile
│ └── env-inject-nginx.sh
├── docs/
│ ├── mkdocs.yml
│ └── docs/
├── prometheus/
│ └── prometheus.yml
└── grafana/
└── provisioning/
Téléchargement des images produits (NAS uniquement)¶
Les 919 images produits ne sont pas dans le repository Git (trop volumineux). Elles doivent être téléchargées une fois après le déploiement sur le NAS.
# Depuis /volume4/docker-speed/perfshop/
tr -d '\r' < scripts/download-images-919.sh > download-fixed.sh
bash download-fixed.sh
Le script est idempotent — il skippe les fichiers déjà présents (> 5KB).
Puis corriger les permissions pour nginx :
chmod -R 755 frontend/public/images/products/
chmod 755 frontend/public/images/ frontend/public/ frontend/
docker compose restart perfshop-frontend
Vérification :
Compatibilité Synology/busybox
Le script utilise wc -c < (compatible busybox) et non stat -c%s (GNU only).
Si vous voyez CRLF errors sur le NAS, lancer tr -d '\r' avant exécution.
Ajouter des migrations Flyway¶
Les migrations Flyway sont dans backend/src/main/resources/db/migration/.
Ne jamais modifier une migration déjà appliquée
Flyway vérifie le checksum de chaque fichier à chaque démarrage.
Toute modification d'un fichier V*.sql déjà appliqué provoque :
Si c'est inévitable (renommage, correction), mettre à jour le checksum en DB :