Configuration Sync
This content is not available in your language yet.
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.