Aller au contenu principal

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.

ComposantMécanisme sur le serveurCommande clé
Backendcode copié dans l'image : il faut reconstruiredocker compose -f … build backend puis up -d --no-deps backend
Frontendbuild bind-monté (frontend/build)remplacer les fichiers puis recréer frontend
Documentationbuild 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 -f avec docker compose.
  • Jamais cache:clear via docker exec en root (utiliser -u www-data ou 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 appellent docker-compose sans -f).