7. Migration couche backend
7.1 Motifs choix
Version 18/04/2024 L’analyse des composants puis les études de préqualification technique des versions sur le code actuel ont permis de préciser les points suivants :
La couche Back utilise le langage PHP 7.2 qui peut monter en version actuelle 8.2.6. Il s’agit d’une montée de version majeure qui impliquera une revue approfondie pour identifier les impacts fonctionnels éventuels.
La couche Back utilise le Framework Zend qui peut monter en version actuelle LAMINAS 3.6.1, sous condition de la migration en PHP.8.2 et qui impliquera également une revue approfondie pour identifier les impacts fonctionnels éventuels.
L’ORM Doctrine sera mis à jour en version 5.3 en cohérence avec les montées de version du Back
7.2 Migration Zend vers Laminas
Laminas et ses sous-projets constituent une suite open source de ZEND Framework et de son sous-projets, et sont la variante officielle du projet maintenant qu’il a n’est plus maintenu et définitivement déprécié. Aux fins du présent document, lorsque nous nous référons à Framework nous entendons tout paquet initialement fourni par le projet Framework ou ses sous-projets, y compris celles fournies par Apigility ou Expressive.
Mettre à jour la brique « Composer » En raison des caractéristiques de Composer, nous utiliserons la version 1.7.0. ou supérieure
Vérification du contrôle de version du code L’outil de migration change le code source, met à jour les modèles, modifie le composer.jsonet enlève le sous-répertoire composer.locket vendor/, entre autres choses. Nous nous sommes appuyé sur la gestion des branches du projet EVA sous GILAB pour mettre en place cette montée de version. Le projet EVA utilise le Git. Pour gérer les version, nous avons donc pu recourir aux commandes de mises à jour suivantes :
cd path/to/your/application git init . echo "vendor/" > .gitignore git add . git commit -m 'Initial import'
Étape de migration avec l’outil Laminas-migration
Il y a deux façons d’installer l’outil:
Par le fait le composer
Via le clonage
Nous avons retenu cette méthode Composer nous a permis de requêter les paquets dans un contexte global.
$ composer global require laminas/laminas-migrationIe vendor/bin/sous-répertoire de composer doit être dans son environnement $PATH. On peut localiser le contexte en utilisant:
$ composer global config homeExécuter la commande de mise à jour Nous avons pu utiliser la commande
$ laminas-migration migrateVérification de l’intégration La montée de version a été très impactante pour le projet EVA et à nécessité des reprises du code. La commande suivante permet de déterminer ce qui a changé :
$ git diffMise à jour des dépendances Une fois la migration terminée et nous avons effectué les étapes de vérification puis installé les dépendances:
composer installTests unitaires En l’absence d’automatisation des tests unitaires, ce sont des tests d’intégration et fonctionnels qui ont été réalisés.
7.3 Migration PHP 8.2
Le passage d’une version majeure PHP demande de modifier les environnements de travail ainsi que d’exécution ; bibliothèques spécifiques à EVA également, non fournies dans l’archive PHP : apcu. Le lancement de la plateforme EVA dans ce nouvel environnement échoue avec de nombreuses erreurs techniques : la version 3.2 de Laminas n’est pas compatible avec PHP8.
7.3.1 Montée de version de l’ORM
La mise à jour de Laminas vers 3.6.1 est donc nécessaire, mais les dépendances doivent monter de version également ; c’est le cas notamment de l’ORM Doctrine (gérant l’accès à la base de données) dont la version est montée de 2.1 à 5.3 (3 versions majeures).
De nombreuses mise à jour manuelles dans la base de code EVA sont nécessaires pour que l’exécution de la plateforme fonctionne de nouveau :
Suppression des commentaires en base de données pour le type json_array (gestion antérieure de Doctrine) car cela empêche le connecteur de fonctionner : un script de migration a été créé pour permettre la mise à jour des environnements
Certaines classes ont été bougées dans de nouveaux dossier : DoctrineObject (liste non exhaustive)
Le mode commande a été largement modifié puisque Laminas ne le supporte plus nativement : la documentation préconise de passer sous la console Symfony, plus évoluée que la bibliothèque laminas-cli.
Ce mode commande est utilisé lors des livraisons de code pour :
Nettoyer le cache
Mettre à jour le schéma de base de données et créer les proxy des entités
Générer les fichiers de langues
Les commandes ont donc dû être totalement ré-écrites avec Symfony, elles sont disponibles dans le module Core puis dans le dossier Command. Le script d’appel a été mis à jour également pour gérer le nouveau mode d’appel (bin/update).
Des tests de non-régression ont été effectués afin de vérifier que la plateforme ne comportait plus de bugs; un large périmètre de fonctionnalités a été testé à cette fin.
7.3.2. Commandes de montée de version PHP(Click to expand)
7.3.2.1 Install php 8.2
apt update && apt install -y php8.2 php8.2-cli php8.2-intl php8.2-zip php8.2-gd php8.2-ssh2 php8.2-curl php8.2-mbstring php8.2-mysql php8.2-xml php8.2-opcache php8.2-zip php8.2-tidy php8.2-imagick php8.2-apcu php8.2-mysql
7.3.2.2 Check php version
php -v
7.3.2.3 Configure php
cp /etc/php/8.2/apache2/php.ini /etc/php/8.2/apache2/php.ini.bak.20231123
find /etc/php/8.2/apache2/php.ini -type f -exec sed -i 's/max_execution_time = 30/max_execution_time = 60/g' {} \;
find /etc/php/8.2/apache2/php.ini -type f -exec sed -i 's/memory_limit = 128M/memory_limit = 512M/g' {} \;
find /etc/php/8.2/apache2/php.ini -type f -exec sed -i 's/post_max_size = 8M/post_max_size = 50M/g' {} \;
find /etc/php/8.2/apache2/php.ini -type f -exec sed -i 's/upload_max_filesize = 2M/upload_max_filesize = 50M/g' {} \;
7.3.2.4 Link php8.2
rm -rf /etc/alternatives/php && ln -s /usr/bin/php8.2 /etc/alternatives/php
a2enmod php8.2
7.3.2.5 liste des modules mis à jour
PHP Modules :
apcu
calendar
Core
ctype
curl
date
dom
exif
FFI
fileinfo
filter
ftp
gd
gettext
hash
iconv
imagick
intl
json
libxml
mbstring
mysqli
mysqlnd
openssl
pcntl
pcre
PDO
pdo_mysql
pdo_sqlsrv
Phar
posix
random
readline
Reflection
session
shmop
SimpleXML
sockets
sodium
SPL
sqlsrv
ssh2
standard
sysvmsg
sysvsem
sysvshm
tidy
tokenizer
xml
xmlreader
xmlwriter
xsl
Zend OPcache
zip
zlib
Zend Modules :
Zend OPcache