Avec la fin du support de Drupal 8 (2 Novembre 2021), il convient de migrer en version 9 pour retrouver une maintenabilité du CMS mais aussi du Framework Symfony qui est essentielle à son fonctionnement.
Pourquoi migrer de Drupal 8 à 9 ?
- Pour continuer à avoir le support technique sur les évolutions du CMS Drupal et des technologies qu’il utilise (on pense à Symfony et jQuery par exemple).
- Pour avoir continuellement des mises à jour ou patches qui corrigent les failles de sécurité.
- Pour améliorer les performances.
Prérequis :
- Mettre à jour la version de composer (de la version 1 à la version 2 : sudo composer self-update)
- Effectuer toutes les mises à jour de sécurité afin d’être à la dernière version 8 de Drupal (actuellement 8.9.19)
- Installer le module Upgrade Status pour vérifier les dépréciations de code (https://www.drupal.org/project/upgrade_status)
- Et pourquoi ne pas profiter de cette migration pour améliorer la qualité du code. Cela aura pour but principal de respecter les normes de codage Drupal mais également de documenter l’ensemble des fonctionnalités.
Pour ce faire, il faut installer php code sniffer pour Drupal :
Pour l’installation : https://www.drupal.org/docs/contributed-modules/code-review-module/installing-coder-sniffer
Pour l’utilisation : https://www.drupal.org/docs/contributed-modules/code-review-module/php-codesniffer-command-line-usage
Prérequis de l’environnement Drupal 9
1 – Serveurs
- Version Nginx supérieure ou égale à la version 0.7
- Version Apache supérieure ou égale à la version 2.4.7
2 – PHP
- Version supérieure ou égale à la version 7.3
Attention : Php version 8 est supporté à partir de la version 9.1 de Drupal.
3 – SGBD (Système de gestion de base de données)
- MySQL/Percona : version supérieure à la version 5.7.8.
- MariaDB : version supérieure à la version 5.7.8.
- SQLite : version supérieure à la version 3.26. Attention car la version PHP 7.4 n’intègre plus SQLite, il faut donc bien vérifier que votre PHP est bien compilé avec cette version.
- PostgreSQL : version 10 avec l’extension pg_trgm.
4 – Drush
- Version 10 requise.
Vous trouverez l’ensemble des informations ici : https://www.drupal.org/docs/understanding-drupal/how-drupal-9-was-made-and-what-is-included/environment-requirements-of suivant ce que vous possédez.
Utiliser “Upgrade Status”
Après l’installation, Upgrade Status nous donne des informations pour savoir si on est compatible, que ce soit au niveau de l’environnement ou bien du core de Drupal, pour la montée en version 9 :
Si tout est ok, vous pouvez commencer à scanner les modules pour vérifier le code déprécié.
Après avoir sélectionné les projets et les avoir scanné, Vous trouverez un ensemble d’informations dans les résultats. Nous allons nous attarder sur les colonnes suivantes : STATUS, LOCAL SCAN RESULT, PLAN.
STATUS : Il est important de regarder le statut du module contrib pour savoir si vous l’utilisez ou pas. Dans le cas d’une non-utilisation, pas besoin de s’en occuper, vous pouvez l’enlever du composer.json. Ce sera l’occasion de faire le ménage !
LOCAL SCAN RESULT : Cette partie vous donne des informations sur le code et notamment savoir ce qui est déprécié.
PLAN : C’est la solution proposée par les contributeurs pour migrer le module en Drupal 9. Parfois cette description n’est pas renseignée. Nous allons détailler par la suite comment faire dans tous les cas.
Nous allons voir comment préparer cette partie à la migration.
1 – Modules/Themes contrib
Etape 1 :
Supprimer dans le composer.json (partie require) tous modules qui ne sont pas installés/activés. Par exemple pour le module “Configuration Split”, il faut supprimer la ligne “drupal/config_split”. Si le module est introuvable c’est qu’il s’agit d’une dépendance qui sera enlevée à la suppression du module concerné.
Etape 2 :
Pour les modules restants, pour chacun il faut se rendre sur la page officielle du module (https://www.drupal.org/project/<nom_module>).
Il faut ensuite se rendre dans la section “Downloads” et cliquer sur la version la plus stable, compatible avec la version 9.
Nous allons ensuite copier la version du module à renseigner dans le composer.json
Etape 3 (optionnelle) :
Si vous avez patché le module il faudra revoir les patches.
Si c’est un patch de la communauté, il faudra regarder si le patch n’a pas été mis à jour ou bien intégré directement dans le module en question.
Si c’est un patch custom, il faudra le réadapter avec la nouvelle version du module.
2 – Modules/Themes custom
Fixer le code déprécié renseigné par la colonne “LOCAL SCAN RESULT”
Attention, cas particulier : Il faut bien vérifier les classes qui héritent/surchagent du code venant du core ou bien des modules contrib. Parfois, l’implémentation héritée peut changer d’une version majeure à une autre. C’est le cas, par exemple, du module contrib webform (https://www.drupal.org/node/3076421).
Pour terminer et si tout est au vert, vous pouvez désinstaller le module “Upgrade Status”.
Fin de la première partie !
Dans la seconde partie, nous aborderons le déroulement de la migration.
Mise à jour en Drupal 9
Après avoir préparé votre migration de Drupal 8 à Drupal 9, doucement mais sûrement, nous allons détailler le processus de mise à jour.
Etape 1 :
Changer les droits du dossier du site ainsi que les settings afin que le composer puisse écrire dedans :
chmod 777 web/sites/default
chmod 666 web/sites/default/*settings.php
chmod 666 web/sites/default/*services.yml
Etape 2 :
Mettre à jour la version du core Drupal dans le composer.json :
composer require 'drupal/core-recommended:^9' 'drupal/core-composer-scaffold:^9' 'drupal/core-project-message:^9' --update-with-dependencies --no-update
et si vous avez “drupal/core-dev” dans le composer.json, il faut également le mettre :
composer require 'drupal/core-dev:^9' --dev --update-with-dependencies --no-update
Etape 3 :
Mettre à jour le code du core et des modules/themes contribs (que nous avions mis à jour précédemment dans le composer.json)
composer update
Etape 4 :
Lancer les updates pour mettre à jour la base de données (mise à jour des structures, des configurations, etc…).
drush updatedb
Etape 5 :
Rétablir les droits du dossier du site ainsi que des settings
chmod 755 web/sites/default
chmod 644 web/sites/default/*settings.php
chmod 644 web/sites/default/*services.yml
Etape 6 :
vider les caches et vérifier si la migration est bien passée
drush cr
Vérifier que vous êtes bien à jour soit dans /admin/reports/status
Ou bien avec la commande “drush status”
Etape 7 :
Une fois fini, vous devez exporter et appliquer les changements de configurations dus à l’upgrade de drupal 9 (l’étape du drush updatedb) :
drush cex --destination=./export_d9
Et utiliser un outil comparaison fichier par fichier (comme meld) pour répercuter les changements :
meld <path/to/export_d9> <path/to/sync>
Etape 8 :
Il est temps de versionner la mise à jour.
Voilà grosso-modo la liste des fichiers à commiter :
- composer.json
- composer.lock
- sync/
- modules/custom
- themes/custom
Cette liste n’est pas exhaustive et ne prend pas en compte des spécificités (config split par exemple).
Conclusion
Avec la fin du support de la version 8, ce sera l’occasion de redonner des couleurs à votre site.
Comme vous pouvez le voir, cette migration n’est pas si complexe que cela. Il faut néanmoins faire attention aux cas spécifiques.
De toute manière, ça ne pourra jamais être pire qu’une migration de Drupal 7 à Drupal 9, à bon entendeur !
Maintenant c’est à vous de jouer !