Configuration Managements

Configuration Managements Una delle novità piu interessanti di Drupal 8 è sicuramente la modalità in cui vengono passate le configurazioni nei vari ambienti. In un mondo Ideale avremmo 3 ambienti. Development: identificato con il progetto sulla propria macchina, chiamato solitamente “locale” Staging: L’ambiente che rispecchia piu fedelmente possibile l’ambiente di produzione. Solitamente non è in locale Production: L’ambiente di produzione, dove non dobbiamo mai fare delle modifiche dirette. Questo nuovo approccio evita di installare moduli esterni quali features o Ctools, l’idea è avere già tutto a disposizione. Quindi grazie a questo nuovo componente abbiamo la possibilità di passare, views, blocks,content types etc, ovvero tutto quello che non è contenuto La teoria. Abbiamo la possibilità di passare le informazioni tra ambienti che hanno lo stesso UUID (Universally Unique IDentifier). UUID è una stringa che identifica l’installazione drupal, e grazie a questo che sappiamo se possiamo o meno importare delle configurazioni. La Pratica Vediamo con un piccolo esempio come mettere in pratica la teoria Per comodità creerà due ambienti in locale prj con database drupal. e prj_clone con database drupal_clone. Ma vediamo passo passo come ottenere il nostro risultato. posizionatevi dove preferite e installate drupal mkdir prj cd prj drush dl mv drupal-8.0.1* drupal mkdir config cd drupal drush si standard --db-url=mysql://root:root@127.0.0.1/drupal --site-name=drupal8.dev --account-name=admin --account-pass=admin --account-mail=alessio@ibuildings.it -y Stiamo dando per scontato che mysql sia installato ( in questo caso con user e pass root ). A questo punto abbiamo tutto il necessario, abbiamo creato il database, abbiamo impostato l’utente e abbiamo dato un nome al nostro sito La struttura delle cartelle in locale sono queste: /myprj/ /myprj/drupal /myprj/config vediamo nel dettaglio cosa devono contenere /myprj/ questa è la root del nostro progetto, è qui che instanzieremo il git git init > Initialized empty Git repository in /Users/bob/Documents/garage/prj/.git/ /myprj/drupal questa cartella contiene l’installazione pulita di drupal. Per prima cosa possiamo sfruttare il example.gitignore che drupal ci fornisce con una nuova installazione cp example.gitignore .gitignore Un file molto interessante da modificare è settings.php (sites/default/settings.php) vi sites/default/settings.php Alla fine del file avrete delle righe come queste $databases['default']['default'] = array ( 'database' => 'drupal', 'username' => 'root', 'password' => 'root', 'prefix' => '', 'host' => '127.0.0.1', 'port' => '', 'namespace' => 'Drupal\\Core\\Database\\Driver\\mysql', 'driver' => 'mysql', ); $settings['install_profile'] = 'standard'; $config_directories['sync'] = 'sites/default/files/config_cjtPXyzivT5AnoF7pbk7pLyHrY4JFk_VT1TdjLPB9uqyHYdQnoUDYQrRUX5FIipOq-OZ0ITOQA/sync'; La riga che a noi interessa è $config_directories[‘sync'] che ci indica dove vengono salvate tutte le configurazioni quando le esportiamo. Per motivi di sicurezza e anche per motivi di organizzazione di git, sconsiglio di tenere la cartella nel percorso di default offerto da drupal. Utilizzeremo infatti la cartella config precedentemente creata vi sites/default/settings.php $config_directories['sync'] = ‘../config'; Adesso tutte le configurazioni che esporteremo andranno in config. L’ideale è che config non sia raggiungibile dall’esterno quando il progetto viene messo sul server. Scopriamo quale uuid ha il nostro Drupal drush cget system.site uuid > 'system.site:uuid': 32de742a-fe99-4828-a014-20877303f2e4 quando andremo ad esportare le configurazioni, il drupal che riceve dovrà avere assolutamente lo stesso uuid, altrimenti l’importazione fallira. A questo punto non ci resta che fare il nostro primo commit git add . git commit -am ‘first commit’ Creiamo il clone del progetto che chiameremo prj_clone. Gli step che dobbiamo seguire sono. Clonare il progetto prj in prj_clone Importazione del Database drupal in drupal_clone copiare e modificare il settings.php Per comodità creerò il progetto sempre in locale, simulando un server remoto. per clonare il progetto, posizionarsi fuori dalla cartella prj e lanciare questo comando: git clone prj prj_clone 2) Importo il dump del database drupal (prj) dentro al database del progetto prj_clone che chiamerò drupal_clone 3) copiare il settings.php come preferite, tramite cp se siete in locale o tramite scp se state lavorando in remoto. modifichiamo il puntamento al Database vi sites/default/settings.php cosi $databases['default']['default'] = array ( 'database' => 'drupal_clone', 'username' => 'root', 'password' => 'root', 'prefix' => '', 'host' => '127.0.0.1', 'port' => '', 'namespace' => 'Drupal\\Core\\Database\\Driver\\mysql', 'driver' => 'mysql', ); $settings['install_profile'] = 'standard'; $config_directories['sync'] = '../config'; Adesso abbiamo due cloni. Per sicurezza verifico UUID drush cget system.site uuid Entrambi devono avere lo stesso uuid, nel mio caso 'system.site:uuid': 32de742a-fe99-4828-a014-20877303f2e4 La prima Modifica Spostiamoci nel prj (sito sorgente) e facciamo la nostra prima modifica, creeremo una vista e un content type,ed esporteremo la configurazione. Il content type lo chiamerò test_type ed aggiungerò ad esempio un campo email. La vista la chiameremo test_view Adesso da terminale lanciamo il comando configuration export drush cex e vedremo un qualcosa del genere The following configuration changes have been made since the last export: Collection Config Operation views.view.test_view create field.storage.node.field_email create field.field.node.test_type.field_email create core.entity_form_display.node.test_type.default update core.entity_view_display.node.test_type.default update The .yml files in your export directory (../config) will be deleted. (y/n): Did you mean this? facendo yes vedremo che la directory config avrà al suo interno tutte le configurazioni appena esportate a questo punto non ci resta che fare commit delle nostre modifiche git add . git commit -am ‘creati vista test_view e content type test_type’ spostiamoci su prj_clone e aggiorniamoci con le modifiche committate da prj, facendo git pull la cartella config del clone si è popolata, adesso bisogna importare queste modifiche. spostiamoci dentro la cartella drupal (prj_clone/drupal) e lanciamo il comando per importare la configurazione drush cim riceveremo un output di questo tipo Collection Config Operation views.view.test_view create node.type.test_type create field.field.node.test_type.body create field.storage.node.field_email create field.field.node.test_type.field_email create core.entity_form_display.node.test_type.default create core.entity_view_display.node.test_type.default create core.entity_view_display.node.test_type.teaser create Import the listed configuration changes? (y/n): Facendo yes avremo importato tutte le configurazioni del prj sorgente, infatti se navighiamo in content-type e nelle viste avremo conferma che l’importazione è andata a buon fine, trovando il nuovo content-type con i relativi campi e la nuova vista. Questo è solo un piccolo esempio che può far fare il primo passo verso questa nuova modalità di sviluppo.