Déploiement Serveur
Le déploiement se fait depuis le poste d'administration, en SSH. Ordre immuable : préproduction d'abord, production ensuite, à partir des branches staging puis main.
| Composant | Mécanisme sur le serveur | Commande clé |
|---|---|---|
| Backend | code copié dans l'image : il faut reconstruire | docker compose -f … build backend puis up -d --no-deps backend |
| Frontend | build bind-monté (frontend/build) | remplacer les fichiers puis recréer frontend |
| Documentation | build bind-monté (documentation/build) | remplacer les fichiers puis réindexer l'assistant |
Dans les exemples, F=docker-compose.prod.yml en production et F=docker-compose.preprod.yml en préproduction.
Backend
# Poste d'administration : archive de la branche à déployer
git archive --format=tar.gz -o backend.tar.gz main backend
scp backend.tar.gz pch-prod:~/
# Serveur
cd ~/pch-sig
rm -rf backend/src # git archive n'efface pas les fichiers supprimés
tar -xzf ~/backend.tar.gz && rm ~/backend.tar.gz
sed -i 's/\r$//' backend/docker/*.sh # fins de ligne Windows -> Unix
nohup sh -c "docker compose -f $F build backend && docker compose -f $F up -d --no-deps backend" > ~/build-backend.log 2>&1 &
backend/config/n'est pas effacé : il contient les clés JWT du serveur.- Le build tourne détaché (
nohup) : une coupure SSH pendant les minutes de compilation ne l'interrompt pas. Suivre~/build-backend.log. - Les migrations sont jouées automatiquement au redémarrage du conteneur.
Vérifier que le nouveau code tourne vraiment : un build en échec laisse l'ancien conteneur en place, sain, sans le correctif.
docker exec pch_backend grep -c "<chaîne présente seulement dans le nouveau code>" /app/src/<fichier>.php
docker exec pch_backend curl -s http://127.0.0.1:8000/api/health
docker exec -u www-data pch_backend php bin/console doctrine:migrations:status
Frontend
# Poste d'administration
cd frontend && npm run build && cd ..
tar -czf fe.tar.gz -C frontend/build .
scp fe.tar.gz pch-prod:~/
# Serveur
cd ~/pch-sig/frontend/build && rm -rf ./* && tar -xzf ~/fe.tar.gz && rm ~/fe.tar.gz
cd ~/pch-sig && docker compose -f $F up -d --no-deps --force-recreate frontend
Vérifier une chaîne propre au changement dans les fichiers servis : le code est découpé en chunks, il faut chercher dans tout frontend/build/static/js, pas seulement main.js.
Documentation
# Poste d'administration
cd documentation && npm run build && cd ..
tar -czf doc.tar.gz -C documentation/build .
scp doc.tar.gz pch-prod:~/
# Serveur
cd ~/pch-sig/documentation/build && rm -rf ./* && tar -xzf ~/doc.tar.gz && rm ~/doc.tar.gz
docker exec -u www-data pch_backend php bin/console app:assistant:indexer --max-appels=5
La réindexation met à jour la base documentaire de l'assistant Bemba (fragments ajoutés, modifiés ou supprimés). Avant l'envoi, vérifier les trois langues du site (/, /pt/, /en/).
Après un déploiement
- Santé :
https://<domaine>/api/health→ 200. - Journaux du backend sans exception :
docker logs pch_backend --since 5m | grep -i exception. - Les utilisateurs reçoivent la nouvelle version au rechargement (le service worker met à jour les ressources).
Règles
- Toujours
-favecdocker compose. - Jamais
cache:clearviadocker execen root (utiliser-u www-dataou recréer le conteneur). - Les scripts de la racine du dépôt (
deploy.sh,deploy-*.bat,*.ps1) datent de l'ancien hébergement : ne pas les utiliser sans les relire (certains appellentdocker-composesans-f).