Comprendre la synchronisation de la configuration sous Drupal 9

Laura Homar   lun 11/01/2021 - 19:13  215 vues

Le système de configuration de Drupal 9 stock l’ensemble des informations du site (blocks, vues, types de champs et de contenus, taxonomie…) sans inclure les données (contenu des blocks, terme de taxonomie, valeur des champs, ...). Dans Drupal 7 le système de configuration était stockée dans la base de données, ce qui rendait difficile le transfert d’une copie du site, en particulier si des modules (extensions) modifiaient la configuration.

Dans Drupal 9 la configuration est toujours stockée dans la base de données pour des raisons de sécurité et de performance mais il est possible d’importer et d’exporter la configuration au travers de fichiers. On peut donc donner une version à chaque configuration et les échanger sans forcément devoir inclure la base de données. Il est même possible d’installer Drupal depuis une configuration.

A quoi ressemble un fichier de synchronisation de la configuration ?

Les fichiers de configuration sont des fichiers textes au format YAML. Voici le fichier correspondant à un simple block. 

uuid: 0fc4cfaf-3436-44c9-8be2-8f3c9f27acc1
langcode: fr
status: true
dependencies: { }
code:
  default_config_hash: zglzjmYxi00g9MZ02y0LSJOdpWrwJxyP_OvofFyo
id: basic
label: 'Bloc Simple'
revision: 0
description: 'Un bloc simple contient un titre et un corps'

Il y a des fichiers de configuration pour les blocks, les champs, les vocabulaires, les vues, les langages et pour certaines extensions. La limite entre ce qui est inclut dans la configuration de Drupal 9 et ce qui ne l'est pas peut parfois être assez floue. Pour avoir une meilleure idée de ce qui appartient ou non à la configuration vous pouvez regarder dans l'onglet Configuration de votre site les différentes informations qu'on peut y trouver (nom du site, paramètres régionaux, rôles d'utilisateurs, ...) ou directement dans le dossier contenant les fichier .yml (sites/default/files/) car leur nom est assez explicite.

Comment importer et exporter une configuration ?

Les deux méthodes principales pour l’import/export de la configuration sont :

Avec l’interface utilisateur de Drupal

Dans Drupal cliquez sur l’onglet “Configuration” puis sur “Synchronisation de configuration”. Vous pouvez ensuite importer ou exporter une configuration.

img configuration drupal

Il est possible pour les deux cas de sélectionner l’ensemble de la configuration, qui sera compressée (format tar.gz), ou un élément individuel seulement (fichier .yml).

Avec Drush

Si drush est installé, vous pouvez utiliser drush cim pour importer et drush cex pour exporter la configuration. La configuration sera importée et exportée dans le dossier sites/default/files/config_HASH avec “HASH” remplacé par une chaîne de caractères aléatoires. Un message de confirmation récapitulant les différences entre l’ancienne et la nouvelle configuration sera affiché avant chaque import/export.

Un cadre d’utilisation typique dans un projet git est donc de faire pour l’export :

drush cex
git add sites/default/files/*
git commit

Et pour l’import :

git pull
drush cim

Il est aussi possible d’utiliser drush cim --partial pour ne pas perdre les éléments de configuration qui ont été supprimés et seulement récupérer ce qui a été ajouté ou modifié. Cela permet par exemple d'avoir des formulaires ou des extensions propres à un environnement et de ne pas les transmettre avec le reste.

Voici une liste des commandes drush pour manipuler la configuration Drupal.

config:                                                                                                                                                     
  config:delete (cdel)               Delete a configuration key, or a whole object.                                                                 
  config:edit (cedit)                Open a config file in a text editor. Edits are imported after closing editor.                                  
  config:export (cex)                Export Drupal configuration to a directory.                                                                    
  config:get (cget)                  Display a config value, or a whole configuration object.                                                       
  config:import (cim)                Import config from a config directory.                                                                         
  config:pull (cpull)                Export and transfer config from one environment to another.                                                    
  config:set (cset)                  Set config value directly. Does not perform a config import.                                                   
  config:status (cst)                Display status of configuration (differences between the filesystem configuration 
                                     and database configuration). 

Pour aller plus loin

Modifier le fichier de synchronisation de config

Pour un accès plus simple au fichier de synchronisation, il est possible de modifier son chemin dans le fichier settings.php en changeant la ligne
$settings['config_sync_directory']'sites/default/sync' ; par $settings['config_sync_directory']'chemin vers mon dossier';

Si votre version Drupal est inférieure à la version 8.8 il faut changer cette ligne $settings['config_sync_directory']'sites/default/sync' dans site/default/sync par $config_directories[CONFIG_SYNC_DIRECTORY]'chemin vers mon dossier'

Installer Drupal à partir d’une config

Depuis la version 8.6 de Drupal, il est possible de créer votre copie d'un site uniquement à partir des fichiers de configuration du site original. Cela dépend cependant du profil du site original. Ceux qui implémentent un web_hook(), par exemple, ne peuvent être copiés correctement de cette manière (la communauté Drupal travaille actuellement sur ce problème). Dans les autres cas, à l’installation de Drupal au lieu de sélectionner une installation minimale ou standard vous pouvez sélectionner l’option “Use existing configuration”. Il faut au préalable que le chemin de cette configuration soit indiqué dans le fichier settings.php (voir Modifier le fichier de synchronisation de config).

img configuration drupal

Utiliser des modules pour gérer la configuration

Il existe des modules Drupal dédiés à la configuration. Non seulement ils permettent de faire tout ce qu'on peut faire avec Drush ou l'interface de base de Drupal mais ils permettent aussi de filtrer les éléments de config à ne pas envoyer, de décider au cas par cas ce qu'il faut faire pour chaque élément et d'automatiser le tout. Les principaux modules à utiliser sont Config filter, Configuration Update Manager et Configuration Split.

Vous savez maintenant comment manipuler la configuration de Drupal 9, n’hésitez pas à ajouter un commentaire si cet article vous a été utile ou si vous avez la moindre question.

Inclure dans drupal.fr

À propos de Laura

ITSS vous présente Laura, la nouvelle Business Developer. Elle s’occupe de toute la partie communication de l’agence. Passionnée par la communication et le marketing digital, Laura est prête à relever de nouveaux défis.

sa rigueur et sa ponctualité

Les guêpes

Articles liés

Drupal

Vous souhaitez prendre connaissance des raisons pour lesquelles Drupal est recommandé par sa communauté ?

Drupal Camp

La Drupal Camp est une occasion d'apprendre, partager ses idées et de rencontrer les différents acteurs de la communauté Drupal. Vous souhaitez…

Ajouter un commentaire