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.

  1. Mettre à jour la brique « Composer » En raison des caractéristiques de Composer, nous utiliserons la version 1.7.0. ou supérieure

  2. 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'
    
  3. Étape de migration avec l’outil Laminas-migration

    Il y a deux façons d’installer l’outil:

    1. Par le fait le composer

    2. 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-migration

    Ie vendor/bin/sous-répertoire de composer doit être dans son environnement $PATH. On peut localiser le contexte en utilisant:

    $ composer global config home

  4. Exécuter la commande de mise à jour Nous avons pu utiliser la commande

    $ laminas-migration migrate

  5. Vé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 diff

  6. Mise à 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 install

  7. Tests 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.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