Aller au contenu

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)

cp .env.production .env
docker compose up -d

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

docker ps | grep perfshop
docker stats --no-stream | grep perfshop

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 :

curl -I http://localhost:9091/images/products/placeholder.jpg
# HTTP/1.1 200 OK ✅

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 :

FlywayException: Validate failed: Migration checksum mismatch for migration version X

Si c'est inévitable (renommage, correction), mettre à jour le checksum en DB :

docker compose exec perfshop-db mysql -u root -prootpass123 perfshop \
  -e "UPDATE flyway_schema_history SET checksum=NOUVEAU_CHECKSUM WHERE version='X';"