Configuration Sync
Le système de Configuration Management (CMI) de Drupal permet d’exporter, versionner et synchroniser la configuration de votre site entre différents environnements.
🤔 Pourquoi le Configuration Sync ?
Section intitulée « 🤔 Pourquoi le Configuration Sync ? »Le problème
Section intitulée « Le problème »Sans CMI, la configuration (types de contenu, vues, permissions…) est stockée uniquement en base de données. Cela rend difficile :
- Le déploiement de changements
- Le travail en équipe
- Le retour à une version précédente
- La reproduction d’un environnement
La solution CMI
Section intitulée « La solution CMI »Drupal exporte la configuration en fichiers YAML stockés dans config/sync/. Ces fichiers peuvent être :
- ✅ Versionnés avec Git
- ✅ Partagés entre développeurs
- ✅ Déployés automatiquement
- ✅ Comparés (diff) facilement
📁 Le dossier config/sync
Section intitulée « 📁 Le dossier config/sync »config/└── sync/ ├── core.extension.yml # Modules et thèmes actifs ├── system.site.yml # Infos du site ├── node.type.product.yml # Type de contenu "product" ├── field.storage.node.field_price.yml ├── field.field.node.product.field_price.yml ├── views.view.products.yml # Vue "products" ├── user.role.editor.yml # Rôle "editor" └── ...Structure des fichiers YAML
Section intitulée « Structure des fichiers YAML »Exemple system.site.yml :
uuid: 12345678-1234-1234-1234-123456789012name: TailStoremail: contact@tailstore.localslogan: 'Votre boutique en ligne'page: 403: '' 404: '' front: /nodeadmin_compact_mode: falseweight_select_max: 100default_langcode: fr⌨️ Commandes Drush essentielles
Section intitulée « ⌨️ Commandes Drush essentielles »Exporter la configuration
Section intitulée « Exporter la configuration »drush cex -y# oudrush config:export -yCette commande :
- Lit la configuration de la base de données
- La convertit en fichiers YAML
- L’enregistre dans
config/sync/
Importer la configuration
Section intitulée « Importer la configuration »drush cim -y# oudrush config:import -yCette commande :
- Lit les fichiers YAML de
config/sync/ - Compare avec la configuration en base
- Applique les différences
Voir les différences
Section intitulée « Voir les différences »# Différences entre fichiers et base de donnéesdrush cst# oudrush config:statusExemple de sortie :
Name State node.type.product Only in DB views.view.products Different system.site Same| État | Signification |
|---|---|
Only in DB | Configuration non exportée |
Only in sync | Configuration en attente d’import |
Different | Modifications non synchronisées |
Same | Synchronisé |
🔄 Workflow de développement
Section intitulée « 🔄 Workflow de développement »-
Développer localement
Faites vos modifications via l’interface Drupal (créer un type de contenu, configurer une vue, etc.)
-
Exporter
Fenêtre de terminal drush cex -y -
Vérifier les changements
Fenêtre de terminal git statusgit diff config/sync/ -
Commiter
Fenêtre de terminal git add config/sync/git commit -m "feat: add product content type" -
Pousser
Fenêtre de terminal git push -
Sur un autre environnement
Fenêtre de terminal git pulldrush cim -ydrush cr
🎯 Exemple pratique
Section intitulée « 🎯 Exemple pratique »Créer et exporter un type de contenu
Section intitulée « Créer et exporter un type de contenu »-
Créer le type de contenu (via l’interface)
- Aller à
/admin/structure/types/add - Nom :
Article Blog - Identifiant machine :
blog_article - Enregistrer
- Aller à
-
Ajouter un champ
- Aller à
/admin/structure/types/manage/blog_article/fields - Ajouter un champ Image
- Aller à
-
Exporter
Fenêtre de terminal drush cex -y -
Vérifier les fichiers créés
Fenêtre de terminal ls config/sync/ | grep blogRésultat :
node.type.blog_article.ymlfield.storage.node.field_image.ymlfield.field.node.blog_article.field_image.ymlcore.entity_form_display.node.blog_article.default.ymlcore.entity_view_display.node.blog_article.default.ymlcore.entity_view_display.node.blog_article.teaser.yml -
Commiter
Fenêtre de terminal git add config/sync/git commit -m "feat: add blog_article content type with image field"
📋 Configuration vs Contenu
Section intitulée « 📋 Configuration vs Contenu »Ce qui est de la configuration ✅
Section intitulée « Ce qui est de la configuration ✅ »- Types de contenu
- Définitions de champs
- Vues
- Taxonomies (vocabulaires)
- Rôles et permissions
- Menus (structure)
- Blocs (placement)
- Paramètres du site
Ce qui n’est PAS de la configuration ❌
Section intitulée « Ce qui n’est PAS de la configuration ❌ »- Nœuds (articles, produits…)
- Termes de taxonomie
- Utilisateurs
- Fichiers uploadés
- Liens de menu (contenu)
🔧 Configuration avancée
Section intitulée « 🔧 Configuration avancée »Exporter une configuration spécifique
Section intitulée « Exporter une configuration spécifique »# Exporter une seule configurationdrush cex --destination=/tmp/export system.site
# Lister les configurations disponiblesdrush config:list | grep viewsImporter partiellement
Section intitulée « Importer partiellement »# Importer une seule configurationdrush config:import --partial --source=/tmp/configIgnorer certaines configurations
Section intitulée « Ignorer certaines configurations »Dans settings.php :
// Configurations à ignorer lors de l'import$settings['config_exclude_modules'] = ['devel', 'kint'];UUID du site
Section intitulée « UUID du site »Chaque site Drupal a un UUID unique dans system.site.yml. Si vous clonez un site, vous devrez peut-être synchroniser les UUIDs :
# Voir l'UUID actueldrush config:get system.site uuid
# Modifier l'UUID (si nécessaire)drush config:set system.site uuid "12345678-1234-1234-1234-123456789012"🐛 Résolution de problèmes
Section intitulée « 🐛 Résolution de problèmes »”Configuration sync directory not defined”
Section intitulée « ”Configuration sync directory not defined” »Dans settings.php, vérifiez :
$settings['config_sync_directory'] = '../config/sync';“Site UUID mismatch”
Section intitulée « “Site UUID mismatch” »# Récupérer l'UUID des fichiersgrep uuid config/sync/system.site.yml
# L'appliquer au sitedrush config:set system.site uuid "UUID-ICI" -ydrush cim -yConflits de configuration
Section intitulée « Conflits de configuration »# Forcer l'import (écrase les changements locaux)drush cim -y --diff
# Ou exporter d'abord pour voir les différencesdrush cex -ygit diff config/sync/Erreur d’import
Section intitulée « Erreur d’import »# Voir les erreurs détailléesdrush cim -y --debug
# Vérifier la syntaxe YAMLcat config/sync/fichier.yml | python -c "import yaml,sys; yaml.safe_load(sys.stdin)"📊 Tableau récapitulatif des commandes
Section intitulée « 📊 Tableau récapitulatif des commandes »| Commande | Alias | Description |
|---|---|---|
drush config:export | drush cex | Exporter la configuration |
drush config:import | drush cim | Importer la configuration |
drush config:status | drush cst | Voir les différences |
drush config:get | drush cget | Lire une configuration |
drush config:set | drush cset | Modifier une configuration |
drush config:list | Lister les configurations |
📦 Configuration des modules custom
Section intitulée « 📦 Configuration des modules custom »Les modules custom peuvent définir leur configuration par défaut dans config/install/ :
modules/custom/mon_module/├── config/│ └── install/│ └── mon_module.settings.ymlExemple :
# config/install/mon_module.settings.ymlma_cle: ma_valeurCette configuration sera automatiquement installée lors de l’activation du module. Pour exporter des modifications ultérieures :
drush cex -y🌍 Configurations spécifiques par environnement
Section intitulée « 🌍 Configurations spécifiques par environnement »Overrides dans settings.php
Section intitulée « Overrides dans settings.php »Certaines configurations doivent varier selon l’environnement (dev/staging/prod). Utilisez $config dans settings.php :
// settings.php
// Mode maintenance automatique en productionif (getenv('ENVIRONMENT') === 'prod') { $config['system.maintenance']['message'] = 'Site en maintenance.';}
// Configuration de mail en dev (ne pas envoyer de vrais emails)if (getenv('ENVIRONMENT') === 'dev') { $config['system.mail']['interface']['default'] = 'test_mail_collector';}
// API keys différentes par environnement$config['mon_module.settings']['api_key'] = getenv('API_KEY');Module Configuration Split
Section intitulée « Module Configuration Split »Pour des besoins avancés (modules différents par environnement, configurations conditionnelles), utilisez le module Config Split :
composer require drupal/config_splitdrush en config_split -yExemple d’usage : activer Devel uniquement en dev, désactiver le cache en local, etc.
🔄 Cache et configuration
Section intitulée « 🔄 Cache et configuration »Après un import de configuration, videz toujours le cache :
drush cim -ydrush cr # cr = cache:rebuildLe cache peut contenir d’anciennes références à la configuration. Sans le vider, certains changements peuvent ne pas apparaître.
✅ Exercice pratique
Section intitulée « ✅ Exercice pratique »-
Exportez la configuration actuelle
Fenêtre de terminal drush cex -y -
Modifiez le nom du site via l’interface
- Aller à
/admin/config/system/site-information - Changer le nom en “TailStore - E-Commerce”
- Aller à
-
Vérifiez les différences
Fenêtre de terminal drush cst -
Exportez à nouveau
Fenêtre de terminal drush cex -y -
Vérifiez le fichier modifié
Fenêtre de terminal cat config/sync/system.site.yml | grep name -
Commitez
Fenêtre de terminal git add config/sync/system.site.ymlgit commit -m "chore: update site name" -
Testez le cycle complet
Fenêtre de terminal # Modifier à nouveau le nom via l'interface# Puis annuler en réimportantdrush cim -ydrush cr# Le nom doit revenir à "TailStore - E-Commerce"
🚀 Étape suivante
Section intitulée « 🚀 Étape suivante »Vous maîtrisez maintenant la gestion de configuration de Drupal !
Passez à l’Interface d’administration pour découvrir les principales sections de l’admin Drupal.