Le WordPress d'aujourd'hui, décodé pour les développeurs

Outils & workflow

PHP 8.3 sur un parc de 40 sites d’agence : notre montée de version échelonnée

Comment organiser une migration progressive vers PHP 8.3 sur quarante sites hétérogènes sans big bang ni interruption de service généralisée.

Par WordPress Développement • 1 décembre 2023 • 4 min de lecture • Aucun commentaire
PHP 8.3 sur un parc de 40 sites d'agence : notre montée de version échelonnée

Quarante sites, quarante configurations différentes, et une seule version de PHP à faire progresser sur l’ensemble du parc : PHP 8.3, sorti le 23 novembre 2023, apporte des améliorations de performance réelles et une durée de support étendue par rapport à PHP 8.1, mais chaque montée de version majeure sur un parc hétérogène pose la même question. Faut-il basculer tous les sites d’un coup, ou étaler la migration sur plusieurs semaines ?

La réponse retenue a été l’étalement, avec une méthode reproductible plutôt qu’une décision au cas par cas pour chacun des quarante projets. Ce retour d’expérience détaille l’ordre de migration choisi, les outils de test utilisés et les deux incidents mineurs rencontrés en cours de route.

Classer les sites avant de migrer

La première étape n’a pas été technique mais organisationnelle : dresser l’inventaire des extensions installées sur chacun des quarante sites, avec leur dernière date de mise à jour et leur déclaration explicite de compatibilité PHP 8.3. Cet inventaire a permis de répartir les sites en trois groupes : ceux dont toutes les dépendances annonçaient déjà la compatibilité, ceux avec une ou deux extensions incertaines, et ceux qui reposaient sur du code sur mesure ancien jamais audité.

Les sites du premier groupe, une quinzaine, ont constitué la première vague de migration. Les sites du troisième groupe, cinq au total, ont été traités en dernier, avec un audit de code préalable pour identifier les fonctions dépréciées ou les usages incompatibles avec les changements de typage plus stricts introduits par les versions récentes de PHP.

Un environnement miroir par site, pas un test générique

L'essentiel à retenir : Classer les sites par risque avant de fixer un ordre de migration ; Un environnement miroir par site plutôt qu'un test générique unique ; Prévoir un délai de rollback de 48 heures par vague

Tester une montée de version PHP sur un environnement générique ne suffit pas dès que le parc dépasse une dizaine de sites : chaque projet a sa combinaison propre d’extensions, de thème et de code métier. La méthode retenue a été de cloner chaque site dans un environnement de staging strictement identique à sa production, base de données incluse via une synchronisation wp db export suivie d’un import, puis de basculer ce clone sur PHP 8.3 avant de lancer une série de vérifications automatisées.

#!/bin/bash
# migration-php83.sh — bascule un site staging vers PHP 8.3
SITE=$1
ssh agence@serveur "cd /var/www/$SITE && wp cli info"
ssh agence@serveur "a2dismod php8.1 && a2enmod php8.3 && systemctl restart apache2"
ssh agence@serveur "cd /var/www/$SITE && wp plugin list --status=active --format=csv"

Ce script minimal a été exécuté pour chacun des quarante sites, avec vérification manuelle de la liste des extensions actives après bascule, avant tout passage en production.

Le rythme des vagues

Chaque vague comprenait cinq sites au maximum, migrés le même jour, avec un délai d’observation de 48 heures avant de lancer la vague suivante. Ce délai a permis, lors de la troisième vague, de repérer une incompatibilité entre une extension de formulaire ancienne et la gestion plus stricte des arguments nullables en PHP 8.3, révélée uniquement après un pic de trafic sur le site concerné et invisible lors des tests de staging à faible charge.

  • Vague 1 : 15 sites entièrement compatibles selon l’inventaire, aucun incident.
  • Vague 2 : 12 sites avec une extension incertaine, deux avertissements de dépréciation corrigés en amont.
  • Vague 3 : 8 sites, un incident de formulaire corrigé en quatre heures grâce au délai d’observation.
  • Vague 4 : 5 sites à code sur mesure ancien, audit préalable complet, aucun incident en production.

Le rollback comme filet, pas comme aveu d’échec

Chaque migration a été précédée de la conservation explicite de l’environnement PHP 8.1 en parallèle sur le serveur, activable en une commande en cas de problème bloquant. Ce filet n’a été utilisé qu’une seule fois, pour le site concerné par l’incident de formulaire, le temps de livrer un correctif ciblé plutôt que de laisser le site en panne pendant la résolution.

Un rollback préparé à l’avance coûte quelques minutes de configuration ; un rollback improvisé en pleine nuit coûte une nuit entière.

Pour aller plus loin

Six semaines pour quarante sites, avec un seul incident bloquant corrigé en quelques heures grâce au rythme par vagues : la méthode a démontré sa valeur par rapport à un big bang qui aurait exposé l’ensemble du parc au même risque le même jour. Sur un parc de cette taille, l’inventaire préalable des dépendances reste l’étape la plus rentable, largement avant l’écriture du moindre script de migration.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Partager :

À propos de l'auteur

WordPress Développement

Développeur WordPress, passionné par Elementor, le FSE et l’automatisation par IA.

Voir tous ses articles

Dans la même veine

À lire aussi