Déploiement
|
Une migration de schéma est en attente et son ordre est contraignant.
Ce que ça casse, et qui dépasse la seule API : Sur la base de production, avant de synchroniser les sources :
La production tourne sur MariaDB 10.11, non sur MySQL — le conteneur de
développement a été aligné dessus. L’opération y est Détail complet et étapes suivantes : API Subsonic. |
Comment la mise en ligne se produit
Plesk tire main à chaque poussée. Il n’y a pas de geste de mise en ligne :
une fusion sur main est une mise en production. Mesure du 2026-08-19, commit
ba9d5c2 : poussé à 04:37:15 UTC, fichier écrit sur l’origine à 04:37:20 —
cinq secondes.
Conséquences, qui expliquent plusieurs choix du dépôt :
-
Aucune migration de schéma ne s’exécute au déploiement. Il faut la passer à la main avant la fusion (voir l’encadré en tête de page).
-
Il n’existe aucune étape de mise en ligne où accrocher une commande. Tout ce qui doit suivre un déploiement s’accroche ailleurs : à un workflow GitHub déclenché sur
push, ou aux « actions de déploiement supplémentaires » de l’extension Git de Plesk.
Les caches, et lequel a mordu
Trois couches, indépendantes, à ne pas confondre quand un fichier ne bouge pas :
| Couche | Ce qu’elle fait |
|---|---|
Cloudflare (edge) |
Sert une copie du fichier. Rien ne la prévient d’un déploiement. C’est elle
qui a servi pendant des heures un |
Navigateur |
Obéit au |
Service worker ( |
Troisième couche, distincte des deux autres. |
Ce qui les traite :
-
.github/workflows/purge-cloudflare.ymlpurge la zone après chaque poussée surmain, puis vérifie que les octets servis par Cloudflare sont ceux du dépôt. Il a besoin de deux secrets :CLOUDFLARE_API_TOKEN(permission « Zone / Cache Purge ») etCLOUDFLARE_ZONE_ID. -
Les assets de désastre portent une empreinte
?v=<date du fichier>, posée parsfDesastreManager. Leur adresse change quand le fichier change, donc aucun cache ne peut les servir périmés — y compris celui des navigateurs, que la purge n’atteint pas. -
src/web/.htaccessdonne unCache-Controlà chaque fichier statique. Deux régimes, parce que les deux caches n’ont pas les mêmes moyens de se corriger :Les pages HTML ne sont pas touchées : les actions posent leurs propres en-têtes.
|
Ce bloc et le réglage Cloudflare Browser Cache TTL forment une paire, et l’ordre compte. Basculer le réglage sur « Respect Existing Headers » avant que ce
Donc : déployer d’abord, constater que l’origine émet bien l’en-tête, basculer le réglage ensuite. |
|
Pour constater qu’un fichier est bien arrivé, interroger l'URL nue. Ajouter |
Déploiement par rsync (déprécié)
make deploy n’est plus le chemin de mise en ligne : Plesk tire main tout seul.
La cible reste décrite ici parce qu’elle sert encore à pousser ce que git ne
porte pas, src/vendor en particulier.
# Simulation, valeur par défaut de RSYNC_PARAMETERS
make deploy PROFILE=www.musiqueapproximative.net
# Envoi réel
make deploy PROFILE=www.musiqueapproximative.net RSYNC_PARAMETERS=
La cible enchaîne make configure, composer install --no-dev puis rsync.
L’étape composer install est indispensable : src/vendor est gitignoré mais
part bien par rsync, et sans elle la production se retrouve sans dépendances —
getID3 notamment, dont Post::preSave() a besoin à chaque enregistrement.
Après synchronisation, sur l’hôte :
php symfony cache:clear
php symfony musiqueapproximative:scan-tracks --env=prod --limit=200
Le rattrapage renseigne durées et tailles. Tant qu’il n’a pas tourné, aucun
morceau n’a de durée et les clients Subsonic n’affichent ni barre de
progression ni seek. Commencer par --limit=200 pour mesurer avant de lancer
les ~7 000 fichiers.
Déploiement avec Docker
Vérifications post-déploiement
Après le déploiement, vérifier :
-
Application accessible : Tester l’URL de production
-
Base de données : Vérifier la connexion
-
Logs : Consulter les logs pour détecter les erreurs
-
Performance : Vérifier les temps de réponse
# Vérifier les logs
docker-compose logs -f
# Vérifier l'état des conteneurs
docker-compose ps
# Tester la connexion à la base de données
docker-compose exec php php symfony doctrine:check-schema
Rollback
En cas de problème, revenir à la version précédente :
# Avec Docker
docker-compose down
docker pull ghcr.io/constructions-incongrues/musiqueapproximative:previous-tag
docker-compose up -d
# Avec Git
git checkout <previous-version>
ant configure build deploy -Dprofile=pastishosting
Sauvegarde
Troubleshooting
L’application ne démarre pas
-
Vérifier les logs :
docker-compose logs -
Vérifier la configuration :
.envetdocker-compose.yml -
Vérifier les permissions des fichiers