Migrer de Drupal 7 à Drupal 9
Pourquoi migrer ? Démarrage ...
https://www.drupal.org/psa-2022-02-23
Le support de Drupal 7 doit s'arrêter en novembre 2023. Drupal 9 est sorti le 3 juin 2020. La migration devient nécessaire.
Quelques principes de Drupal 8 & 9
https://www.drupal.org/about/9/from-7
- améliore l'ergonomie pour les mobiles
- facilite la gestion de version des sites (développement / production)
- utilisation du framework Symphony pour faciliter les mises à jour et la gestion des bibliothèques
- drupal 8 & 9 utilisent le gestionnaire de version composer
Préparer la migration
Drupal 9 (ou version ultérieure) a considérablement modifié la manière dont le contenu et la configuration sont stockés dans la base de données. De ce fait, une mise à jour ne peut pas simplement être appliquée à un site Drupal 7 existant. Au lieu de cela, le contenu et les données de configuration du site Drupal 7 doivent être migrés vers un nouveau site Drupal 9 (ou version ultérieure). Cela se fait à l'aide des modules Migrate et Migrate Drupal fournis par Drupal core dans Drupal 8 et versions ultérieures, puis mise à niveau soit dans un navigateur Web, soit à l'aide de Drush.
Tous les modules contribués n'ont pas de chemins de mise à niveau automatiques. Cela peut nécessiter une migration manuelle ou personnalisée. Drupal 9 (ou version ultérieure) a considérablement modifié la structure des thèmes. Ces modifications ne peuvent pas être migrées. Au lieu de cela, un thème doit être reconstruit pour fonctionner dans Drupal 9 (ou version ultérieure).
Bien qu'il existe des outils automatisés disponibles, leur configuration peut toujours être un processus complexe. Si un site n'a pas beaucoup de contenu ou de configuration personnalisée, certains utilisateurs peuvent trouver plus facile/plus rapide de créer manuellement ces données dans le nouveau site. Cela devrait être déterminé au cas par cas.
- https://www.drupal.org/docs/upgrading-drupal/upgrading-from-drupal-6-or-drupal-7/preparation
- Mettre à jour notre site Drupal 7 pour utiliser les dernières versions des modules principaux et contribués
- Réaliser l'inventaire des modules du site source
- Consulter la page des problèmes connus
- Installer un site Drupal 9 vide
- Activer les modules principaux et contribués requis
- Ne pas configurer le site de destination Drupal
- Ne pas créer pas de contenu sur le site de destination Drupal
- Réaliser la mise à niveau
Identifier les modules à mettre à jour
Installer le module upgrade status
#composer require 'drupal/upgrade_status:^2.0@alpha'
Choisir la "Target version of Drupal core" à 9.4
Lancer une recherche de mise à jour (onglet UPGRADE STATUS)
Les modules suivants ne sont pas compatibles avec drupal 9.4 (au 31.12.2022):
- Advanced Forum
- Bbcode
- CSS Injector
- Date / Date iCal
- FileField Sources Plupload
- Max Image Size
- Media: YouTube
- Menu target
- Messaging - replaced by Courrier
- Notifications - replaced by Courrier
- Node Gallery
- Forum notifications
- Printer, email and PDF versions - Replaced by: Entity Print 8.x-2.2, Printer and PDF versions for Drupal 8+
- Taxonomy Access Control
Il faudra donc :
- revoir la gestion des albums photos & vidéos
- trouver une solution pour le forum
- trouver une solution pour les articles écrits en bbcode
- revoir le contrôle d'accès
Créer un nouveau site
Créer un site de test pour comprendre le fonctionnement de Drupal 9 (cf la page Drupal 9). Ainsi, nous avons du:
- choisir un thème
- revoir la gestion des droits - nous choisissons la gestion par taxonomy (public/privé)
- manipuler l'ajout et suppression de modules
- identifier manipuler certains modules spécifiques. Dans notre cas:
- target link est remplacé par menu_link_attributes
- CSS injector est remplacé par asset injector
- node_gallery est remplacé par photo_albums (le changement est majeur!)
A noter que Drupal 9 demande une version 5.7.8 de mysql.
Une fois que l'on a suffisamment compris le fonctionnement de Drupal 9, refaire une installation "propre".
Créer un site "propre" et un site de test
Nous allons créer dev.livois.com, en nous restreignant à Drupal 9 car notre version de PHP n'est pas compatible avec Drupal 10.
#cd /srv/data/web/vhosts/dev/htdocs #composer create-project drupal/recommended-project:^9 live
Créer la base de données via phpmyadmin:
- ajouter un compte utilisateur (par exemple drupal_live)avec le compte root et noter le mot de passe.
- choisir localhost si la base de données est locale. Cela limite les risques.
- choisir "Créer une base portant son nom et donner à cet utilisateur tous les privilèges sur cette base."
- dans opérations, choisir l'interclassement utf8mb4_unicode_ci
- Installer le site en allant à la page d'installation <drupal>/live/web/
- Paramétrer les hôtes de confiance
https://www.drupal.org/docs/installing-drupal/trusted-host-settings
<licode file=site/default/settings.php>
$settings['trusted_host_patterns'] = [ '^livois\.com$', '^.+\.livois\.com$', ];
</licode>
- Installer et activer les modules requis:
- taxonomy (core)
- book (core)
- forum (core)
- https://www.drupal.org/project/photo_albums - pour créer une bibliothèque d'albums photos
- https://www.drupal.org/project/permissions_by_term - pour gérer les accès public/privé
- https://www.drupal.org/project/xbbcode - beaucoup de nouvelles contiennent du bbcode
- https://www.drupal.org/project/pathauto - pour organiser les documents des articles (book)
- https://www.drupal.org/project/video_embed_field
- https://www.drupal.org/project/filefield_paths
On peut reproduire l'installation avec le site de test: <drupal>/test/web/
Réaliser la migration avec Drush
https://www.drupal.org/docs/upgrading-drupal/upgrading-from-drupal-6-or-drupal-7/upgrade-using-drush
- Installer Drush
#composer require drush/drush
Par la suite <drush> correspond à la commande ./vendor/bin/drush.
- Installer les modules de migration
#composer require drupal/migrate_upgrade drupal/migrate_plus #<drush> install migrate migrate_drupal migrate_upgrade migrate_plus
- Indiquer l'accès à la base de données à migrer dans settings.php
<licode file=site/default/settings.php> $databases['migrate']['default'] = array (
'database' => 'drupal7', 'username' => '<username>', 'password' => '<password>', 'prefix' => , 'host' => 'localhost', 'port' => '3306', 'namespace' => 'Drupal\\mysql\\Driver\\Database\\mysql', 'driver' => 'mysql', 'autoload' => 'core/modules/mysql/src/Driver/Database/mysql/',
); </licode>
- Lancer la commande migrate:upgrade pour identifier les migrations possibles
#<drush> migrate:upgrade --legacy-db-key=migrate --configure-only #<drush> migrate:status --tag='Drupal 7'
- Lancer les migrations désirées avec la commande de migration:
#<drush> migrate:import <migration>
- migration des utilisateurs
upgrade_d7_user_role upgrade_d7_user_mail upgrade_d7_user
- migration des termes de taxonomy, les formats et langues
upgrade_d7_taxonomy_vocabulary upgrade_d7_filter_format upgrade_d7_node_type upgrade_language
- migration des nouvelles (article)
upgrade_d7_taxonomy_term_nouvelles upgrade_d7_node_complete_article
- migration des articles (book) avec l'option --force pour le dernier
upgrade_d7_taxonomy_term_articles upgrade_book_settings upgrade_d6_book_settings upgrade_d7_node_complete_book upgrade_d7_book --force
- migration des posts du forum
upgrade_d7_taxonomy_term_forums upgrade_d7_forum_settings upgrade_d7_node_complete_forum
- migrer les commentaires (avec l'option --force pour le dernier car nous n'avons pas migré les albums photos, ni les vidéos)
upgrade_d7_comment_type upgrade_d7_comment_field upgrade_d7_comment_field_instance upgrade_d7_comment_entity_display upgrade_d7_comment
Copyright
© 2022-2023 Christophe de Livois
Vous avez l'autorisation de copier, distribuer et/ou modifier ce document suivant les termes de la GNU Free Documentation License, Version 1.2 ou n'importe quelle version ultérieure publiée par la Free Software Foundation; sans section invariante, sans page de garde, sans entête et sans page finale. Pour plus d'informations consulter le site de l'APRIL. |