CMS

Content Management System (and Framework)

Migration Drupal 9 vers Drupal 10

Le contexte

Ce site fonctionne avec un CMS Drupal, Drupal 7 lors de sa création (en 2012!). Depuis, il a été migré en Drupal 8, cette migration ayant été la plus complexe, puisque le produit passait d'un code 100% spécifique à une architecture basée sur Symfony.

La migration Drupal8 vers Drupal9 s'est passée beaucoup plus facilement, en modifiant essentiellement les paramètres du composer.

Drupal 10 a été mise à disposition du grand public en décembre 2022. 

Tags

Migration Media et Images Inline

Dans la série d'articles sur la migration de mon site https://www.vincentliefooghe.net/content/migration-drupal-7-vers-drupal-8 j'en viens maintenant à une partie qui m'a pris pas mal de temps et demandé un peu de développement.

Sur mon site en Drupal 7, j'avais utilisé le module Media_Wysiwyg et Colorbox, qui me permettaient d'insérer des images directement dans le texte.

Migration avec le module migrate_upgrade

Installation et activation des modules Drush requis

On va installer les 2 modules suivants : migrate_upgrade, migrate_tools.

composer require drupal/migrate_upgrade composer require drupal/migrate_tools 

Puis activer les modules :

drush pm:enable migrate_upgrade migrate_tools -y 

Dans le fichier settings.php , il faut ajouter la définition de la base source.

Important : elle doit s'appeler migrate.

Par exemple :

Processus de migration vers Drupal 8

Processus de migration

Le processus de migration a été testé plusieurs fois. Je suis parti sur la base d'une sauvegarde du site Drupal 7 (fichiers + base de données).

J'ai installé ça dans un container LXC sur mon PC, ce qui me permettra de supprimer tout cela une fois la migration terminée.

Au final, on a donc un container sous Debian 10 avec PHP 7.3.11 et une base MariaDB 10.1.

L'idée est donc la suivante :

Migration Drupal 7 vers Drupal 8

Après plusieurs années sous Drupal 7, et l'arrivée imminente de Drupal 9, il était temps pour moi de migrer mon site sur Drupal 8, d'autant que les dernières versions ont maintenant des utilitaires de migration.

Situation initiale

Mon site perso n'est pas très complexe, ni au niveau contenu (environ 200 articles), ni au niveau modules Drupal.

La version utilisée est Drupal 7.69.

En plus des modules du "core", j'utilise des choses plutôt classiques :

Changer le nom du site (URL) de Wordpress

Contrairement à Drupal, Wordpress stocke dans sa base de données l'URL complète du site. Ceci inclut également le protocole (http ou https).

Du coup, en cas de passage d'un site en https, ou du transfert d'un site de développemnt en production (avec changement d'URL, par exemple de dev.monsupersite.org en www.monsupersite.org), on perd une grande partie du contenu (média, éventuellement CSS).

Il est possible de résoudre le problème, avec Search-Replace-DB-master. C'est un ensemble de scripts php.

Wordpress : utiliser WP-CLI pour gére wordpress en ligne de commande

Autant pour Drupal, l'outil drush est très connu et permet de simplifier et d'accélérer les choses (installation de modules, mises à jour, nettoyage du cache), autant il semble que l'utilisation de la ligne de commande pour Wordpress n'est pas très répandu.

Cependant, il existe un outil wp-cli, qui fournit des fonctionnalités relativement semblables.

Je ne reprends pas ici toutes les commandes, vous pouvez vous référer au site d'origine.

Hack de sites Wordpress avec jquery.min.php / jquery*js

Depuis quelques jours, je recevais des mails de monit, indiquant un load average trop élevé sur un serveur dont je m'occupe épisodiquement (serveur de l'association Down Up).

Cela m'a semblé curieux, car il  s'agit d'un serveur dédié OVH, avec un Xeon 8 coeurs, et 64 Go de RAM, qui héberge uniquement quelques sites web.

Ayant eu dans le temps des problèmes de piratage de sites, j'ai regardé le nombre de messages dans la file postfix :

Créer une vue Drupal sur un type de contenu, pour tous les auteurs ou moi seulement

J'ai eu récemment un besoin qui semble assez simple à première vue : pour un type de contenu spécifique, je voulais ajouter dans Views un filtre exposé me permettant de sélectionner tous les contenus ou seulement ceux dont j'étais l'auteur.

A priori, il suffit de créer une relation de type "Contenu: Auteur", et l'utiliser dans un filtre exposé sur l'utilisateur Actuel.

Sauf que... ceci me donne 2 options : les contenus de l'utilisateur actuel (les miens) ou les autres (pas les miens).