Comment Upgrader Core et Module de Drupal 8? Voici la marche à suivre pas à pas pour faire l'update de Drupal et de ses modules contributeurs ainsi que la check-list pour reproduire la mise à jour sur un site en production.
1. Sauvegarde de Drupal
Au préalable avant d'upgrade Drupal, on va faire une sauvegarde de tout le site : base de données + répertoire files + code (normalement dans un dépôt).
Avec Git on crée une branch pour l'upgrade (rappel des commandes Git).
Plusieurs méthodes sont possibles :
- Sauvegarde via le module backup & migrate :
On sauvegarde l'entièreté du site soit en téléchargeant l'archive soit en créant une archive sur le serveur.
- Sauvegarde à la main :
On sauvegarde le répertoire files :cp -R sites/default/files ../backup_files
On sauvegarde la base de données :drush sql:dump
- Sauvegarde par scripts comme par exemple celui décrit dans un de mes articles précédent sur la sauvegarde et la restauration d'un Drupal 8.
2. Etat des lieux des mises à jour
Pour vérifier l'état global du projet avec les packages :
composer outdated
Pour voir simplement ce qui est lié au projet sans voir les dépendances aux packages :
composer outdated --direct
Pour vérifier les updates de Drupal core et modules :
composer outdated 'drupal/*'
3. Upgrade du core ou d'un module
Pour Upgrader le Core :
composer update drupal/core* --with-dependencies
Pour Upgrader les modules c'est le même principe :
composer update drupal/NOM_DU_MODULE
ou
composer update drupal/NOM_DU_MODULE --with-dependencies
Cette commande est utilisé pour mettre à jour une version mineur.
Pour upgrader dans une version majeure on utilise d'abord la commande suivante (exemple pour passer de la version 1.x à 2.x):
composer require drupal/modulename:^2.0
Puis on fait une update de module comme ci-dessus.
A la suite de la mise à jour du core ou d'un module, on upgrade le schéma de la BDD de Drupal, on supprime le cache et on exporte les éventuels changements de config :
drush updatedb
drush cache:rebuild
drush config:export --diff
On peut aussi faire ça en http en visitant la page /update.php
du site sur un navigateur mais ce n'est pas recommandé au vue des limites de mémoire et timeout liées au serveur web.
4. Upgrader la production
Voici la petite check list pour update la production :
- On active le mode maintenance sur le site de façon à arrêter toutes transaction et prévenir les utilisateurs du site :
drush state:set system.maintenance_mode 1 drush cache:rebuild
- On aura fait les update au préalable sur un environnement de test.
On pull le composer.json et composer.lock sur la production avec donc toutes les nouvelles versions du core, des modules et des dépendances.
- On installe les nouvelles versions :
composer install --no-dev
préférable à un "composer update" pour la production.
-
On met à jour le schéma de base de données :
drush updatedb
- On vérifie que le site fonctionne bien en faisant quelques manips simples et en vérifiant au niveau des logs si on a pas de nouvelles erreurs ou warnings.
- Si tout est ok, on retire le site du mode maintenance et on supprime le cache :
drush state:set system.maintenance_mode 0 drush cache:rebuild
- Dernière vérification en utilisateur anonyme pour être sur que tout est bien ok.
Problème possible lors d'une update
Lors d'une mise à jour si drupal/core ne se met pas à jour cela peut être du à une dépendance qui bloque l'update.
On peut alors utiliser la commande suivante :
composer prohibits
identique à la commande composer why-not qui permet de voir ce qui bloque au niveau des dépendances.
Exemple si on souhaite upgrader Drupal de la 8.4.5 à la 8.5.0, on lance la commande suivante :
composer prohibits drupal/core:8.5.0
qui va nous lister les bloquants.
Et pour résoudre le problème, si c'est Symfony qui coince, on lance :
composer update drupal/core "symfony/*" --with-dependencies