SlideShare una empresa de Scribd logo
1 de 37
Descargar para leer sin conexión
Configuration Management
avec Drupal 8
Meetup Drupal Lyon, 03/03/2016
Qui suis-je ?
Senior Technical Solutions Analyst @Acquia
● Drupaliste depuis 2007
● Membre de la communauté Drupal et communauté lyonnaise depuis 2010
En ligne
● www.drupalfacile.org
● @DrupalFacile
● anavarre.net
● @AurelienNavarre
Une rapide genèse du système de configuration
● Table {variable} dans les précédentes versions de Drupal
● 2011 : sous-système remplacé par Config API et State API
○ Config : données persistantes (exemple : nom du site)
○ State : données volatiles (exemple : dernière fois que le cron a été exécuté)
● 2012-2014 : configuration ‘active’ stockée sous forme de fichiers YAML
○ Dossier ‘active’ pour la configuration live et ‘staging’ pour la nouvelle configuration
○ Problèmes de performance avec les systèmes de fichiers distribués
● 2014 : configuration stockée de nouveau en base de données et amélioration
de l’interface utilisateur
● 2015 : nettoyage des dossiers de configuration
○ ‘active’ et ‘staging’ sont remplacés par ‘sync’ uniquement
● 2016 : toujours aucun workflow ‘officiel’, mais des pistes sérieuses
○ $ drush config-pull (on en parle plus tard dans cette présentation)
Partie 1 - Les bases
Aperçu de l’interface utilisateur
Tableau de bord admin/config/development/configuration
Astuce d’apprentissage
Pour bien appréhender la gestion de configuration, il faut la découvrir dans le
sens inverse de celui indiqué dans l’interface.
Plus
conceptuel
Moins
conceptuel
Export complet de configuration via l’interface
Tableau de bord admin/config/development/configuration/full/export
Fichiers exportés : bonjour YAML !
Premier contact avec le format YAML
uuid: 517b0f02-c22f-4343-9008-8cb7a88e707a
name: 'Drupal Lyon'
mail: admin@lyon.local
slogan: ''
page:
403: ''
404: ''
front: /node
admin_compact_mode: false
weight_select_max: 100
Attention à l’indentation ! http://www.yamllint.com
Spécification YAML
http://www.yaml.org/spec
Export simple de configuration via l’interface
Tableau de bord admin/config/development/configuration/single/export
Import complet de configuration via l’interface
Tableau de bord admin/config/development/configuration/full/import
Import simple de configuration via l’interface
Tableau de bord admin/config/development/configuration/single/import
Synchronisation de configuration via l’interface
Tableau de bord admin/config/development/configuration
Nouvelle configuration sous sites/default/files/config_HASH/sync
Visualiser les différences de configuration
Synchronisation réussie
Passer à la vitesse supérieure avec Drush 8
Config commands: (config)
config-edit (cedit) Open a config file in a text editor.
config-export (cex) Export configuration to a directory.
config-get (cget) Display a config value, or object.
config-import (cim) Import config from a config dir.
config-list (cli) List config names by prefix.
config-pull (cpull) Transfer config between envs
config-set (cset) Set config value directly.
Afficher tous les fichiers de la configuration active
$ drush @lyon.local config-list
automated_cron.settings
block.block.bartik_account_menu
block.block.bartik_branding
block.block.bartik_breadcrumbs
block.block.bartik_content
block.block.bartik_footer
block.block.bartik_help
(snipped)
Exporter la configuration active
$ drush @lyon.local config-export -y sync
Configuration changes made since the last export:
Collection Config Operation
automated_cron.settings create
system.menu.account create
block.block.bartik_branding create
(snipped)
The .yml files in your export directory
(sites/default/files/config_kQ8/sync) will be deleted. (y/n): y
Configuration successfully exported [success]
Importer une nouvelle configuration
$ drush @lyon.local config-import -y sync
Collection Config Operation
system.site update
views.view.glossary delete
Import the listed configuration changes? (y/n): y
Cache rebuild complete. [ok]
The configuration was imported successfully. [success]
Afficher le détail d’un fichier de configuration active
$ drush @lyon.local config-get system.site
uuid: 9f93df8a-afc9-4765-8b29-41f98266b2fa
name: 'Drupal Lyon'
mail: admin@drupallyon.com
slogan: 'Meetups 2016'
page:
403: ''
404: ''
front: /node
Modifier un fichier de configuration active ‘inline’
$ drush @lyon.local config-set -y system.site slogan 'Liste
des meetups 2016'
$ drush @lyon.local config-get system.site | grep slogan
slogan: 'Liste des meetups 2016'
Modifier un fichier de configuration active via l’éditeur
$ drush @lyon.local config-edit system.site
1 uuid: 517b0f02-c22f-4343-9008-8cb7a88e707a
2 name: 'Drupal Lyon'
3 mail: admin@lyon.local
4 slogan: 'Liste des meetups 2016'
5 page:
6 403: ''
7 404: 'page-non-trouvee'
8 front: /node
9 admin_compact_mode: false
Le fichier s’ouvre dans
votre éditeur préféré
(ici, vim)
Quid de la portabilité de configuration ?
● Config API a été pensé pour assurer la gestion de configuration entre plusieurs
instances d’un même site
● Features peut outrepasser cette limitation
Bundles réutilisables avec Features : préparation
Fichiers candidats
à l’export
Bundles réutilisables avec Features : export
● Génération automatique d’un module
fonctionnel
● Fichiers YAML nécessaires auto-détectés
par Features
● Bundle ‘standalone’ prêt à être importé sur
un autre site
Bundles réutilisables avec Features : import
$ drush @lyon.local config-import -y --partial sync
Collection Config Operation
node.type.article create
field.field.node.article.body create
field.field.node.article.comment create
field.field.node.article.field_image create
field.field.node.article.field_tags create
core.entity_form_display.node.article.default create
(snipped)
Import the listed configuration changes? (y/n): y
Partie 2 - Workflows
Workflow minimaliste : 1 seule instance de site
● $ drush config-export et $ drush config-import
● Gestion des révisions via git, oui mais...
‘files’ n’est pas idéal pour stocker la configuration
● Bonne pratique : docroot/sites/*/files dans .gitignore
● sites/default/files/config_HASH/sync est donc problématique
● Déplacement du dossier de config hors du docroot via settings.php
$config_directories = [
CONFIG_SYNC_DIRECTORY => '/mnt/config/lyon',
];
● Cela améliore également la sécurité
Workflow avancé : plusieurs instances d’un site
● $ drush config-export et $ drush config-import
● Gestion des révisions via git
● $ drush config-pull pour transférer la configuration entre les instances
Préparer l’export de dév vers prod
$ drush @lyon.local config-export -y sync --commit && git
log
Configuration successfully exported [success]
commit 3d7ee1977ba661b5a59d9d4ae49ae7eca5f529ea
Author: Aurelien Navarre <aurelien.navarre@company.com>
Date: Sat Jan 30 11:55:46 2016 +0000
Exported configuration.
Collection Config Operation
system.site update
Appliquer les modifications de dév en prod
$ drush @lyon.prod config-import sync -y
Collection Config Operation
system.site update
Import the listed configuration changes? (y/n): y
Cache rebuild complete. [ok]
The configuration was imported successfully. [success]
Workflow avancé : prod vers dev
$ drush config-pull @lyon.prod @lyon.local
Starting to export configuration on Target. [ok]
Configuration successfully exported [success]
Starting to rsync config from @lyon.local to @lyon.prod [ok]
You will destroy data from
/var/www/html/lyon/sites/default/files/config_HASH/sync and
replace with data from ~/drush-backups/config-export/20160130/
Do you really want to continue? (y/n): y
Bien réfléchir à la stratégie de déploiement
Code
(+ nouvelle conf)
Base de
données
Fichiers
Code
(+ config active)
Base de
données
Fichiers
Développement Production
$ drush config-pull @lyon.prod @lyon.local
$ drush sql-sync @lyon.prod @lyon.local
$ drush rsync @lyon.prod:%files/ @lyon.
local:%files
$ git push $ git pull
VCS
On ne peut plus désactiver les modules sous Drupal 8
● Désinstaller un module implique effacer sa configuration ‘active’
● Installer de nouveau un module signifie ré-appliquer sa configuration d’origine
● Pour le dépannage, Drush arrive de nouveau à la rescousse :
$ drush @lyon.local config-export --destination=/tmp/backup
(dépannage du site)
$ drush @lyon.local config-import --source=/tmp/backup
Quelques modules contrib intéressants
● Configuration development : import automatisé de configuration pendant le dév
● Configuration inspector : inspection config et schémas
● Configuration installer : profil d’install custom YAML
● Configuration log : consigne les changements de config
● Configuration read-only : vérouille les changements de config via l’UI
● Configuration Tools : outils pour le développeur
● Config partial export : export arbitraire de configuration
● Configuration Update Manager: visualiser et importer une nouvelle
configuration pour un module déjà installé
Merci. Questions ?

Más contenido relacionado

La actualidad más candente

Drupal - La puissance de Drush
Drupal - La puissance de DrushDrupal - La puissance de Drush
Drupal - La puissance de DrushAlexandre Marie
 
Drupal7 - Bonnes Pratiques (Partie 1)
Drupal7 - Bonnes Pratiques (Partie 1)Drupal7 - Bonnes Pratiques (Partie 1)
Drupal7 - Bonnes Pratiques (Partie 1)Alexandre Marie
 
08 01 mise en place d'un serveur web
08 01 mise en place d'un serveur web08 01 mise en place d'un serveur web
08 01 mise en place d'un serveur webNoël
 
DevOps avec Ansible et Docker
DevOps avec Ansible et DockerDevOps avec Ansible et Docker
DevOps avec Ansible et DockerStephane Manciot
 
TP1 Big Data - MapReduce
TP1 Big Data - MapReduceTP1 Big Data - MapReduce
TP1 Big Data - MapReduceAmal Abid
 
Maven/Ivy vs OSGi (Toulouse Jug 26-05-2011)
Maven/Ivy vs OSGi (Toulouse Jug 26-05-2011)Maven/Ivy vs OSGi (Toulouse Jug 26-05-2011)
Maven/Ivy vs OSGi (Toulouse Jug 26-05-2011)hibnico
 
Support : introduction à docker
Support : introduction à dockerSupport : introduction à docker
Support : introduction à dockerBoubker ABERWAG
 
Installation hadoopv2.7.4-amal abid
Installation hadoopv2.7.4-amal abidInstallation hadoopv2.7.4-amal abid
Installation hadoopv2.7.4-amal abidAmal Abid
 
Play Framework - Toulouse JUG - nov 2011
Play Framework - Toulouse JUG - nov 2011Play Framework - Toulouse JUG - nov 2011
Play Framework - Toulouse JUG - nov 2011Sylvain Wallez
 
De Maven à SBT ScalaIO 2013
De Maven à SBT ScalaIO 2013De Maven à SBT ScalaIO 2013
De Maven à SBT ScalaIO 2013Stephane Manciot
 
08 02 mise en place de serveurs virtuels apache 2
08 02 mise en place de serveurs virtuels apache 208 02 mise en place de serveurs virtuels apache 2
08 02 mise en place de serveurs virtuels apache 2Noël
 
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassinOxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassinLudovic Piot
 
Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016
Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016
Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016Fabien Arcellier
 

La actualidad más candente (15)

Drupal - La puissance de Drush
Drupal - La puissance de DrushDrupal - La puissance de Drush
Drupal - La puissance de Drush
 
Drupal7 - Bonnes Pratiques (Partie 1)
Drupal7 - Bonnes Pratiques (Partie 1)Drupal7 - Bonnes Pratiques (Partie 1)
Drupal7 - Bonnes Pratiques (Partie 1)
 
08 01 mise en place d'un serveur web
08 01 mise en place d'un serveur web08 01 mise en place d'un serveur web
08 01 mise en place d'un serveur web
 
DevOps avec Ansible et Docker
DevOps avec Ansible et DockerDevOps avec Ansible et Docker
DevOps avec Ansible et Docker
 
TP1 Big Data - MapReduce
TP1 Big Data - MapReduceTP1 Big Data - MapReduce
TP1 Big Data - MapReduce
 
Maven/Ivy vs OSGi (Toulouse Jug 26-05-2011)
Maven/Ivy vs OSGi (Toulouse Jug 26-05-2011)Maven/Ivy vs OSGi (Toulouse Jug 26-05-2011)
Maven/Ivy vs OSGi (Toulouse Jug 26-05-2011)
 
Serveur Web (1)
Serveur Web (1)Serveur Web (1)
Serveur Web (1)
 
Support : introduction à docker
Support : introduction à dockerSupport : introduction à docker
Support : introduction à docker
 
Installation hadoopv2.7.4-amal abid
Installation hadoopv2.7.4-amal abidInstallation hadoopv2.7.4-amal abid
Installation hadoopv2.7.4-amal abid
 
Play Framework - Toulouse JUG - nov 2011
Play Framework - Toulouse JUG - nov 2011Play Framework - Toulouse JUG - nov 2011
Play Framework - Toulouse JUG - nov 2011
 
De Maven à SBT ScalaIO 2013
De Maven à SBT ScalaIO 2013De Maven à SBT ScalaIO 2013
De Maven à SBT ScalaIO 2013
 
08 02 mise en place de serveurs virtuels apache 2
08 02 mise en place de serveurs virtuels apache 208 02 mise en place de serveurs virtuels apache 2
08 02 mise en place de serveurs virtuels apache 2
 
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassinOxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
 
Livre blanc docker
Livre blanc docker Livre blanc docker
Livre blanc docker
 
Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016
Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016
Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016
 

Destacado

L'integration continue pour tous
L'integration continue pour tousL'integration continue pour tous
L'integration continue pour tousAurelien Navarre
 
Drupal 8 + Symfony 2 = une équipe gagnante
Drupal 8 + Symfony 2 = une équipe gagnanteDrupal 8 + Symfony 2 = une équipe gagnante
Drupal 8 + Symfony 2 = une équipe gagnanteVanessa David
 
Agora cms - Comment Drupal Commerce innove avec Drupal 8
Agora cms - Comment Drupal Commerce innove avec Drupal 8Agora cms - Comment Drupal Commerce innove avec Drupal 8
Agora cms - Comment Drupal Commerce innove avec Drupal 8Anne-Sophie Picot
 
Theming drupal8 - Meetup Paris - 26-mars-2015
Theming drupal8 - Meetup Paris - 26-mars-2015Theming drupal8 - Meetup Paris - 26-mars-2015
Theming drupal8 - Meetup Paris - 26-mars-2015Romain Jarraud
 
Présentation des initiatives Drupal 8 - Fev 12
Présentation des initiatives Drupal 8 - Fev 12Présentation des initiatives Drupal 8 - Fev 12
Présentation des initiatives Drupal 8 - Fev 12Drupal Asso France
 
Cfengine presentation @Loadays
Cfengine presentation @LoadaysCfengine presentation @Loadays
Cfengine presentation @LoadaysRUDDER
 
Industrialisez le développement et la maintenance de vos sites avec Drupal
Industrialisez le développement et la maintenance de vos sites avec DrupalIndustrialisez le développement et la maintenance de vos sites avec Drupal
Industrialisez le développement et la maintenance de vos sites avec DrupalLINAGORA
 
Cfengine vs Puppet vs Chef: A Guide for Stressed Developers
Cfengine vs Puppet vs Chef: A Guide for Stressed DevelopersCfengine vs Puppet vs Chef: A Guide for Stressed Developers
Cfengine vs Puppet vs Chef: A Guide for Stressed DevelopersRon Toland
 
Export procedures for agro based products
Export procedures for agro based productsExport procedures for agro based products
Export procedures for agro based productsDiraviam Jayaraj
 
eZ Publish vs Drupal - technical battle
eZ Publish vs Drupal - technical battleeZ Publish vs Drupal - technical battle
eZ Publish vs Drupal - technical battleKaliop-slide
 
Il n'y a pas que Drupal dans la vie - Drupalcamp Paris 2013
Il n'y a pas que Drupal dans la vie - Drupalcamp Paris 2013Il n'y a pas que Drupal dans la vie - Drupalcamp Paris 2013
Il n'y a pas que Drupal dans la vie - Drupalcamp Paris 2013Artusamak
 
Drupal 8 : regards croisés
Drupal 8 : regards croisésDrupal 8 : regards croisés
Drupal 8 : regards croisésOSInet
 
Blend web mix 2015 - Rencontre entre un gestionnaire de contenu et un framewo...
Blend web mix 2015 - Rencontre entre un gestionnaire de contenu et un framewo...Blend web mix 2015 - Rencontre entre un gestionnaire de contenu et un framewo...
Blend web mix 2015 - Rencontre entre un gestionnaire de contenu et un framewo...Vanessa David
 

Destacado (14)

L'integration continue pour tous
L'integration continue pour tousL'integration continue pour tous
L'integration continue pour tous
 
Drupal 8 + Symfony 2 = une équipe gagnante
Drupal 8 + Symfony 2 = une équipe gagnanteDrupal 8 + Symfony 2 = une équipe gagnante
Drupal 8 + Symfony 2 = une équipe gagnante
 
Agora cms - Comment Drupal Commerce innove avec Drupal 8
Agora cms - Comment Drupal Commerce innove avec Drupal 8Agora cms - Comment Drupal Commerce innove avec Drupal 8
Agora cms - Comment Drupal Commerce innove avec Drupal 8
 
Theming drupal8 - Meetup Paris - 26-mars-2015
Theming drupal8 - Meetup Paris - 26-mars-2015Theming drupal8 - Meetup Paris - 26-mars-2015
Theming drupal8 - Meetup Paris - 26-mars-2015
 
Présentation des initiatives Drupal 8 - Fev 12
Présentation des initiatives Drupal 8 - Fev 12Présentation des initiatives Drupal 8 - Fev 12
Présentation des initiatives Drupal 8 - Fev 12
 
Cfengine presentation @Loadays
Cfengine presentation @LoadaysCfengine presentation @Loadays
Cfengine presentation @Loadays
 
Industrialisez le développement et la maintenance de vos sites avec Drupal
Industrialisez le développement et la maintenance de vos sites avec DrupalIndustrialisez le développement et la maintenance de vos sites avec Drupal
Industrialisez le développement et la maintenance de vos sites avec Drupal
 
Cfengine vs Puppet vs Chef: A Guide for Stressed Developers
Cfengine vs Puppet vs Chef: A Guide for Stressed DevelopersCfengine vs Puppet vs Chef: A Guide for Stressed Developers
Cfengine vs Puppet vs Chef: A Guide for Stressed Developers
 
Export procedures for agro based products
Export procedures for agro based productsExport procedures for agro based products
Export procedures for agro based products
 
Séminaire Drupal 8
Séminaire Drupal 8Séminaire Drupal 8
Séminaire Drupal 8
 
eZ Publish vs Drupal - technical battle
eZ Publish vs Drupal - technical battleeZ Publish vs Drupal - technical battle
eZ Publish vs Drupal - technical battle
 
Il n'y a pas que Drupal dans la vie - Drupalcamp Paris 2013
Il n'y a pas que Drupal dans la vie - Drupalcamp Paris 2013Il n'y a pas que Drupal dans la vie - Drupalcamp Paris 2013
Il n'y a pas que Drupal dans la vie - Drupalcamp Paris 2013
 
Drupal 8 : regards croisés
Drupal 8 : regards croisésDrupal 8 : regards croisés
Drupal 8 : regards croisés
 
Blend web mix 2015 - Rencontre entre un gestionnaire de contenu et un framewo...
Blend web mix 2015 - Rencontre entre un gestionnaire de contenu et un framewo...Blend web mix 2015 - Rencontre entre un gestionnaire de contenu et un framewo...
Blend web mix 2015 - Rencontre entre un gestionnaire de contenu et un framewo...
 

Similar a Configuration Management avec Drupal 8

Tout comprendre de Nuxeo Drive - Nuxeo Tour 2014 - workshop
Tout comprendre de Nuxeo Drive - Nuxeo Tour 2014 - workshopTout comprendre de Nuxeo Drive - Nuxeo Tour 2014 - workshop
Tout comprendre de Nuxeo Drive - Nuxeo Tour 2014 - workshopNuxeo
 
"Un module Prestashop, comment ca marche?"
"Un module Prestashop, comment ca marche?""Un module Prestashop, comment ca marche?"
"Un module Prestashop, comment ca marche?"o2sources
 
PowerShell - Retours d'expériences
PowerShell - Retours d'expériencesPowerShell - Retours d'expériences
PowerShell - Retours d'expériencesRan Mellul
 
Mieux Développer en PHP avec Symfony
Mieux Développer en PHP avec SymfonyMieux Développer en PHP avec Symfony
Mieux Développer en PHP avec SymfonyHugo Hamon
 
WordCamp Lyon 2015 - WordPress, Git et l'intégration continue
 WordCamp Lyon 2015 - WordPress, Git et l'intégration continue WordCamp Lyon 2015 - WordPress, Git et l'intégration continue
WordCamp Lyon 2015 - WordPress, Git et l'intégration continueStéphane HULARD
 
Gitlab CI : Integration et Déploiement Continue
Gitlab CI : Integration et Déploiement ContinueGitlab CI : Integration et Déploiement Continue
Gitlab CI : Integration et Déploiement ContinueVincent Composieux
 
Performance et optimisation de PrestaShop
Performance et optimisation de PrestaShopPerformance et optimisation de PrestaShop
Performance et optimisation de PrestaShopPrestaShop
 
Powershell
PowershellPowershell
PowershellUGAIA
 
Une gestion efficace du changement de vos structures de données relationnelle...
Une gestion efficace du changement de vos structures de données relationnelle...Une gestion efficace du changement de vos structures de données relationnelle...
Une gestion efficace du changement de vos structures de données relationnelle...Olivier DASINI
 
Automatisez vos tâches répétitives avec Grunt (Blend 2013)
Automatisez vos tâches répétitives avec Grunt (Blend 2013)Automatisez vos tâches répétitives avec Grunt (Blend 2013)
Automatisez vos tâches répétitives avec Grunt (Blend 2013)Corinne Schillinger
 
Rapport systéme embarqué busybox
Rapport systéme embarqué busyboxRapport systéme embarqué busybox
Rapport systéme embarqué busyboxAyoub Rouzi
 
Solution d'OTA
Solution d'OTASolution d'OTA
Solution d'OTASidereo
 
Intégration continue des projets PHP avec Jenkins
Intégration continue des projets PHP avec JenkinsIntégration continue des projets PHP avec Jenkins
Intégration continue des projets PHP avec JenkinsHugo Hamon
 
Déploiement dans Azure depuis Visual Studio Team Services
Déploiement dans Azure depuis Visual Studio Team ServicesDéploiement dans Azure depuis Visual Studio Team Services
Déploiement dans Azure depuis Visual Studio Team ServicesAdrien Siffermann
 
Déploiement dans Azure depuis VSTS
Déploiement dans Azure depuis VSTSDéploiement dans Azure depuis VSTS
Déploiement dans Azure depuis VSTSAZUG FR
 
Le système de versioning git
Le système de versioning gitLe système de versioning git
Le système de versioning gitNassim Bahri
 

Similar a Configuration Management avec Drupal 8 (20)

Pentaho Ctools : tips & tricks
Pentaho Ctools : tips & tricks Pentaho Ctools : tips & tricks
Pentaho Ctools : tips & tricks
 
Pentaho Ctools : tips & tricks
Pentaho Ctools : tips & tricksPentaho Ctools : tips & tricks
Pentaho Ctools : tips & tricks
 
Tout comprendre de Nuxeo Drive - Nuxeo Tour 2014 - workshop
Tout comprendre de Nuxeo Drive - Nuxeo Tour 2014 - workshopTout comprendre de Nuxeo Drive - Nuxeo Tour 2014 - workshop
Tout comprendre de Nuxeo Drive - Nuxeo Tour 2014 - workshop
 
"Un module Prestashop, comment ca marche?"
"Un module Prestashop, comment ca marche?""Un module Prestashop, comment ca marche?"
"Un module Prestashop, comment ca marche?"
 
PowerShell - Retours d'expériences
PowerShell - Retours d'expériencesPowerShell - Retours d'expériences
PowerShell - Retours d'expériences
 
Mieux Développer en PHP avec Symfony
Mieux Développer en PHP avec SymfonyMieux Développer en PHP avec Symfony
Mieux Développer en PHP avec Symfony
 
WordCamp Lyon 2015 - WordPress, Git et l'intégration continue
 WordCamp Lyon 2015 - WordPress, Git et l'intégration continue WordCamp Lyon 2015 - WordPress, Git et l'intégration continue
WordCamp Lyon 2015 - WordPress, Git et l'intégration continue
 
Gitlab CI : Integration et Déploiement Continue
Gitlab CI : Integration et Déploiement ContinueGitlab CI : Integration et Déploiement Continue
Gitlab CI : Integration et Déploiement Continue
 
Performance et optimisation de PrestaShop
Performance et optimisation de PrestaShopPerformance et optimisation de PrestaShop
Performance et optimisation de PrestaShop
 
Powershell
PowershellPowershell
Powershell
 
Une gestion efficace du changement de vos structures de données relationnelle...
Une gestion efficace du changement de vos structures de données relationnelle...Une gestion efficace du changement de vos structures de données relationnelle...
Une gestion efficace du changement de vos structures de données relationnelle...
 
Automatisez vos tâches répétitives avec Grunt (Blend 2013)
Automatisez vos tâches répétitives avec Grunt (Blend 2013)Automatisez vos tâches répétitives avec Grunt (Blend 2013)
Automatisez vos tâches répétitives avec Grunt (Blend 2013)
 
Rapport systéme embarqué busybox
Rapport systéme embarqué busyboxRapport systéme embarqué busybox
Rapport systéme embarqué busybox
 
Compte rendu Blend Web Mix 2015
Compte rendu Blend Web Mix 2015Compte rendu Blend Web Mix 2015
Compte rendu Blend Web Mix 2015
 
Solution d'OTA
Solution d'OTASolution d'OTA
Solution d'OTA
 
Introduction aspnet
Introduction aspnetIntroduction aspnet
Introduction aspnet
 
Intégration continue des projets PHP avec Jenkins
Intégration continue des projets PHP avec JenkinsIntégration continue des projets PHP avec Jenkins
Intégration continue des projets PHP avec Jenkins
 
Déploiement dans Azure depuis Visual Studio Team Services
Déploiement dans Azure depuis Visual Studio Team ServicesDéploiement dans Azure depuis Visual Studio Team Services
Déploiement dans Azure depuis Visual Studio Team Services
 
Déploiement dans Azure depuis VSTS
Déploiement dans Azure depuis VSTSDéploiement dans Azure depuis VSTS
Déploiement dans Azure depuis VSTS
 
Le système de versioning git
Le système de versioning gitLe système de versioning git
Le système de versioning git
 

Configuration Management avec Drupal 8

  • 1. Configuration Management avec Drupal 8 Meetup Drupal Lyon, 03/03/2016
  • 2. Qui suis-je ? Senior Technical Solutions Analyst @Acquia ● Drupaliste depuis 2007 ● Membre de la communauté Drupal et communauté lyonnaise depuis 2010 En ligne ● www.drupalfacile.org ● @DrupalFacile ● anavarre.net ● @AurelienNavarre
  • 3. Une rapide genèse du système de configuration ● Table {variable} dans les précédentes versions de Drupal ● 2011 : sous-système remplacé par Config API et State API ○ Config : données persistantes (exemple : nom du site) ○ State : données volatiles (exemple : dernière fois que le cron a été exécuté) ● 2012-2014 : configuration ‘active’ stockée sous forme de fichiers YAML ○ Dossier ‘active’ pour la configuration live et ‘staging’ pour la nouvelle configuration ○ Problèmes de performance avec les systèmes de fichiers distribués ● 2014 : configuration stockée de nouveau en base de données et amélioration de l’interface utilisateur ● 2015 : nettoyage des dossiers de configuration ○ ‘active’ et ‘staging’ sont remplacés par ‘sync’ uniquement ● 2016 : toujours aucun workflow ‘officiel’, mais des pistes sérieuses ○ $ drush config-pull (on en parle plus tard dans cette présentation)
  • 4. Partie 1 - Les bases
  • 5. Aperçu de l’interface utilisateur Tableau de bord admin/config/development/configuration
  • 6. Astuce d’apprentissage Pour bien appréhender la gestion de configuration, il faut la découvrir dans le sens inverse de celui indiqué dans l’interface. Plus conceptuel Moins conceptuel
  • 7. Export complet de configuration via l’interface Tableau de bord admin/config/development/configuration/full/export
  • 8. Fichiers exportés : bonjour YAML !
  • 9. Premier contact avec le format YAML uuid: 517b0f02-c22f-4343-9008-8cb7a88e707a name: 'Drupal Lyon' mail: admin@lyon.local slogan: '' page: 403: '' 404: '' front: /node admin_compact_mode: false weight_select_max: 100 Attention à l’indentation ! http://www.yamllint.com Spécification YAML http://www.yaml.org/spec
  • 10. Export simple de configuration via l’interface Tableau de bord admin/config/development/configuration/single/export
  • 11. Import complet de configuration via l’interface Tableau de bord admin/config/development/configuration/full/import
  • 12. Import simple de configuration via l’interface Tableau de bord admin/config/development/configuration/single/import
  • 13. Synchronisation de configuration via l’interface Tableau de bord admin/config/development/configuration Nouvelle configuration sous sites/default/files/config_HASH/sync
  • 14. Visualiser les différences de configuration
  • 16. Passer à la vitesse supérieure avec Drush 8 Config commands: (config) config-edit (cedit) Open a config file in a text editor. config-export (cex) Export configuration to a directory. config-get (cget) Display a config value, or object. config-import (cim) Import config from a config dir. config-list (cli) List config names by prefix. config-pull (cpull) Transfer config between envs config-set (cset) Set config value directly.
  • 17. Afficher tous les fichiers de la configuration active $ drush @lyon.local config-list automated_cron.settings block.block.bartik_account_menu block.block.bartik_branding block.block.bartik_breadcrumbs block.block.bartik_content block.block.bartik_footer block.block.bartik_help (snipped)
  • 18. Exporter la configuration active $ drush @lyon.local config-export -y sync Configuration changes made since the last export: Collection Config Operation automated_cron.settings create system.menu.account create block.block.bartik_branding create (snipped) The .yml files in your export directory (sites/default/files/config_kQ8/sync) will be deleted. (y/n): y Configuration successfully exported [success]
  • 19. Importer une nouvelle configuration $ drush @lyon.local config-import -y sync Collection Config Operation system.site update views.view.glossary delete Import the listed configuration changes? (y/n): y Cache rebuild complete. [ok] The configuration was imported successfully. [success]
  • 20. Afficher le détail d’un fichier de configuration active $ drush @lyon.local config-get system.site uuid: 9f93df8a-afc9-4765-8b29-41f98266b2fa name: 'Drupal Lyon' mail: admin@drupallyon.com slogan: 'Meetups 2016' page: 403: '' 404: '' front: /node
  • 21. Modifier un fichier de configuration active ‘inline’ $ drush @lyon.local config-set -y system.site slogan 'Liste des meetups 2016' $ drush @lyon.local config-get system.site | grep slogan slogan: 'Liste des meetups 2016'
  • 22. Modifier un fichier de configuration active via l’éditeur $ drush @lyon.local config-edit system.site 1 uuid: 517b0f02-c22f-4343-9008-8cb7a88e707a 2 name: 'Drupal Lyon' 3 mail: admin@lyon.local 4 slogan: 'Liste des meetups 2016' 5 page: 6 403: '' 7 404: 'page-non-trouvee' 8 front: /node 9 admin_compact_mode: false Le fichier s’ouvre dans votre éditeur préféré (ici, vim)
  • 23. Quid de la portabilité de configuration ? ● Config API a été pensé pour assurer la gestion de configuration entre plusieurs instances d’un même site ● Features peut outrepasser cette limitation
  • 24. Bundles réutilisables avec Features : préparation Fichiers candidats à l’export
  • 25. Bundles réutilisables avec Features : export ● Génération automatique d’un module fonctionnel ● Fichiers YAML nécessaires auto-détectés par Features ● Bundle ‘standalone’ prêt à être importé sur un autre site
  • 26. Bundles réutilisables avec Features : import $ drush @lyon.local config-import -y --partial sync Collection Config Operation node.type.article create field.field.node.article.body create field.field.node.article.comment create field.field.node.article.field_image create field.field.node.article.field_tags create core.entity_form_display.node.article.default create (snipped) Import the listed configuration changes? (y/n): y
  • 27. Partie 2 - Workflows
  • 28. Workflow minimaliste : 1 seule instance de site ● $ drush config-export et $ drush config-import ● Gestion des révisions via git, oui mais...
  • 29. ‘files’ n’est pas idéal pour stocker la configuration ● Bonne pratique : docroot/sites/*/files dans .gitignore ● sites/default/files/config_HASH/sync est donc problématique ● Déplacement du dossier de config hors du docroot via settings.php $config_directories = [ CONFIG_SYNC_DIRECTORY => '/mnt/config/lyon', ]; ● Cela améliore également la sécurité
  • 30. Workflow avancé : plusieurs instances d’un site ● $ drush config-export et $ drush config-import ● Gestion des révisions via git ● $ drush config-pull pour transférer la configuration entre les instances
  • 31. Préparer l’export de dév vers prod $ drush @lyon.local config-export -y sync --commit && git log Configuration successfully exported [success] commit 3d7ee1977ba661b5a59d9d4ae49ae7eca5f529ea Author: Aurelien Navarre <aurelien.navarre@company.com> Date: Sat Jan 30 11:55:46 2016 +0000 Exported configuration. Collection Config Operation system.site update
  • 32. Appliquer les modifications de dév en prod $ drush @lyon.prod config-import sync -y Collection Config Operation system.site update Import the listed configuration changes? (y/n): y Cache rebuild complete. [ok] The configuration was imported successfully. [success]
  • 33. Workflow avancé : prod vers dev $ drush config-pull @lyon.prod @lyon.local Starting to export configuration on Target. [ok] Configuration successfully exported [success] Starting to rsync config from @lyon.local to @lyon.prod [ok] You will destroy data from /var/www/html/lyon/sites/default/files/config_HASH/sync and replace with data from ~/drush-backups/config-export/20160130/ Do you really want to continue? (y/n): y
  • 34. Bien réfléchir à la stratégie de déploiement Code (+ nouvelle conf) Base de données Fichiers Code (+ config active) Base de données Fichiers Développement Production $ drush config-pull @lyon.prod @lyon.local $ drush sql-sync @lyon.prod @lyon.local $ drush rsync @lyon.prod:%files/ @lyon. local:%files $ git push $ git pull VCS
  • 35. On ne peut plus désactiver les modules sous Drupal 8 ● Désinstaller un module implique effacer sa configuration ‘active’ ● Installer de nouveau un module signifie ré-appliquer sa configuration d’origine ● Pour le dépannage, Drush arrive de nouveau à la rescousse : $ drush @lyon.local config-export --destination=/tmp/backup (dépannage du site) $ drush @lyon.local config-import --source=/tmp/backup
  • 36. Quelques modules contrib intéressants ● Configuration development : import automatisé de configuration pendant le dév ● Configuration inspector : inspection config et schémas ● Configuration installer : profil d’install custom YAML ● Configuration log : consigne les changements de config ● Configuration read-only : vérouille les changements de config via l’UI ● Configuration Tools : outils pour le développeur ● Config partial export : export arbitraire de configuration ● Configuration Update Manager: visualiser et importer une nouvelle configuration pour un module déjà installé