SlideShare a Scribd company logo
1 of 53
Drupal 8: dal download del core alla
pubblicazione in produzione
Cos’è cambiato rispetto a Drupal 7
Chi sono
Vincenzo Di Biaggio
@vincenzodb
Software Developer @SparkFabrik - Milano
Drupal Social Club https://www.facebook.com/sparkfabrik/
Software: https://github.com/vincenzodibiaggio
Videogiochi: http://steamcommunity.com/id/vincenzodb/
Foto: https://500px.com/vincenzodb
Musica: http://www.last.fm/it/user/vincenzodb
Scaletta
- La “rivoluzione” Drupal 8 ha portato con se
- La gestione del Core di Drupal come dipendenza
- Il Configuration Management System
- I Moduli espongono le proprie configurazioni nativamente su file di testo
Configurazione?
“A configuration is neither cache or content, but
everything that is left”
@alexpott
Scaletta
- La “rivoluzione” Drupal 8 ha portato con se
- Il Configuration Management System
- I Moduli espongono le proprie configurazioni nativamente su file di testo
- Come cambiano le nostre Feature
- Il nostro modulo non conterrà più le configurazioni dei moduli
- Le feature organizzeranno le configurazioni
- Mediante i bundle potremo pubblicare un set di funzionalità replicabili
Scaletta
- La “rivoluzione” Drupal 8 ha portato con se
- Il Configuration Management System
- I Moduli espongono le proprie configurazioni nativamente su file di testo
- Come cambiano le nostre Feature
- Il nostro modulo non conterrà più le configurazioni dei moduli
- Le feature organizzeranno le configurazioni
- Mediante i bundle potremo pubblicare un set di funzionalità replicabili
- Organizzazione degli ambienti e replicazione della configurazione
La “rivoluzione” Drupal 8
Il Configuration Management System
Esportazione / Importazione configurazione
Esportazione / Importazione singoli componenti
Gestione degli override della configurazione
CMS - File di configurazione
uuid: 2f915dc3-f384-4e14-a700-d06c3f8e47d7
langcode: en
status: true
dependencies: { }
id: authenticated
label: 'Authenticated user'
weight: 1
is_admin: false
permissions:
- 'access content'
- 'use text format basic_html'
- 'access comments'
- 'post comments'
- 'skip comment approval'
- 'access site-wide contact form'
- 'access shortcuts'
- 'search content'
user.role.authenticated.yml
Con gli esempi si fa prima
Modulo: Drupal Day 2015
Content type: Drupal Day Article
Title
Body
Image
Category - Taxonomy Vocabulary Drupal Day Taxonomy
Con gli esempi si fa prima / 2
Modulo: Drupal Day 2015
View
Last Entries
Content Type: Drupal Day Article
Menu Item
Last Entries
Premesse
● Replicazione delle funzionalità su vari ambienti
● Facilità di pubblicazione
Gestione della configurazione
Drupal 7
Configurazione nel Database
Nessuna gestione della configurazione per poterla esportare / importare /
replicare
Ripetizione delle azioni di configurazione del core e dei moduli in stage /
produzione per poter replicare le funzionalità
Modulo Features
Drupal 7
Esportazione dei valori di configurazione dei componenti del core
Esportazione dei valori di configurazione dei componenti dei moduli contrib o
custom che espongono la propria configurazione
Organizzazione delle configurazioni esportate all’interno di moduli custom
Abilitazione del modulo contenente le feature = replicazione delle feature
Gestione della configurazione
Drupal 8
● Gestisce la configurazione di una installazione Drupal
○ Proprietà dei componenti
○ Variabili
○ Override dei valori
● Esportazione / Importazione configurazione
● Sincronizzazione della configurazione
● Gli sviluppatori non devono far altro che dichiarare le configurazioni di un modulo
(obbligatorio comunque per falo funzionare)
Gestione della configurazione
Drupal 8
Gestisce la configurazione di una installazione Drupal
DEFAULT SU DATABASE
Gestione della configurazione
Drupal 8
sites/default/services.yml
services:
config.storage:
class: DrupalCoreConfigCachedStorage
arguments: ['@config.storage.active', '@cache.config']
config.storage.active:
class: DrupalCoreConfigFileStorage
factory: DrupalCoreConfigFileStorageFactory::getActive
Gestione della configurazione
Drupal 8
sites/default/settings.php
$config_directories = array(
CONFIG_ACTIVE_DIRECTORY => './../config/active/',
CONFIG_SYNC_DIRECTORY => './../config/sync/',
);
$settings['bootstrap_config_storage'] = array(
'DrupalCoreConfigBootstrapConfigStorageFactory',
'getFileStorage'
);
Gestione della configurazione
Drupal 8
Gestisce la configurazione di una installazione Drupal
Variabili
# Drupal 7
variable_set('var', 'Value');
variable_get('var', 'Default value');
variable_del('var');
Gestione della configurazione
Drupal 8
Gestisce la configurazione di una installazione Drupal
Overrides / 1
# settings.php
# $config[NOME_FILE][VARIABILE]
$config['system.maintenance']['message'] = 'Sorry, our site is down
now.';
Gestione della configurazione
Drupal 8
Gestisce la configurazione di una installazione Drupal
Overrides / 2
// Remember original language before this operation.
$original_language = Drupal::configFactory()->getLanguage();
$language = language_load($account->getPreferredLangcode());
Drupal::configFactory()->setLanguage($language);
$mail_config = Drupal::config('user.mail');
// Now send email based on $mail_config which is in the proper language.
// Set back the language to the prior value.
Drupal::configFactory()->setLanguage($original_language);
Gestione della configurazione
Drupal 8
Gestisce la configurazione di una installazione Drupal
Overrides / 3
# Valori originali della configurazione
$site_name = Drupal::config('system.site')->getOriginal('name', FALSE);
Gestione della configurazione
Drupal 8
Gestisce la configurazione di una installazione Drupal
Overrides / 4
# Overrides permanenti
public function loadOverrides($names) {
$overrides = array();
if (in_array('system.site', $names)) {
$overrides['system.site'] = ['name' => 'Overridden site name!'];
}
return $overrides;
}
Gestione della configurazione
Drupal 8
Gestisce la configurazione di una installazione Drupal
Overrides / 5
# Documentazione
https://www.drupal.org/node/1928898
Gestione della configurazione
Drupal 8
Esportazione / Importazione della configurazione
# Drush - http://www.drushcommands.com/drush-7x/config/
/bin/drush config-export
/bin/drush config-import
# Drupal Console - http://drupalconsole.com/
/bin/console config:export
/bin/console config:import
Gestione della configurazione
Drupal 8
Esportazione / Importazione della configurazione /
# Interfaccia
/admin/config/development/configuration/full/export
/admin/config/development/configuration/full/import
Gestione della configurazione
Drupal 8
Sincronizzazione della configurazione
# Interfaccia
/admin/config/development/configuration
Differenze tra la configurazione active e quella presente nella directory sync
Modulo Features
Drupal 8
(Dato che) Drupal 8 si occupa del lavoro di replicazione delle funzionalità
Il modulo Features si occupa dell’organizzazione delle funzionalità per poterle
gestire attraverso i moduli
Creazione e gestione di bundle per replicare le funzionalità utilizzando un set di
configurazioni
Con gli esempi si fa prima / 3
Modulo: Drupal Day 2015
Creazione - Esportazione Content Type Drupal Day Article
Creazione - Esportazione Tassonomia Drupal Day Taxonomy
Creazione - Esportazione Vista “Last Entries”
Creazione - Esportazione Menu Item “Last Entries”
Con gli esempi si fa prima / 4
Content Type Drupal Day Article
node.type.drupal_day_article.yml
uuid: 3005e153-6382-4173-920c-1232ba898c9d
langcode: en
status: true
dependencies: ....
name: 'Drupal Day Article'
type: drupal_day_article
description: ''
help: ''
new_revision: false
preview_mode: 1
display_submitted: true
Con gli esempi si fa prima / 5
Tassonomia Drupal Day Taxonomy
taxonomy.vocabulary.drupal_day_2015_taxonomy.yml
uuid: 09f00b65-1880-47d1-b001-1e42cadf8c43
langcode: en
status: true
dependencies: { }
name: 'Drupal Day 2015 Taxonomy'
vid: drupal_day_2015_taxonomy
description: 'Drupal Day 2015 Taxonomy'
hierarchy: 0
weight: 0
Con gli esempi si fa prima / 6
Vista “Last Entries”
views.view.last_entries_drupal_day_2015.yml
uuid: eefbb1b8-9b34-4590-a000-de4247c4c335
langcode: en
status: true
dependencies:
config:
-
core.entity_view_mode.node.teaser
- node.type.drupal_day_article
- system.menu.main
module:
- node
- user
id: last_entries_drupal_day_2015
label: 'Last Entries Drupal Day 2015'
module: views
base_table: node_field_data
base_field: nid
display:
default:
display_plugin: default
id: default
display_title: Master
access:
type: perm
options:
perm: 'access content'
[....]
items_per_page: 10
Con gli esempi si fa prima / 7
Menu Item “Last Entries”
views.view.last_entries_drupal_day_2015.yml
page_1:
display_plugin: page
id: page_1
display_title: Page
position: 1
path: last-entries-drupal-day-2015
menu:
type: normal
title: 'Last Entries Drupal Day 2015'
menu_name: main
Con gli esempi si fa prima / 8
Replicazione delle funzionalità
Features
1. Creazione Bundle
2. Creazione Feature
3. Esportazione
https://www.drupal.org/node/2404427
Con gli esempi si fa prima / 8
Features - Creazione Bundle
/admin/config/development/configuration/features/bundle
Con gli esempi si fa prima / 8
Features - Creazione Feature
/admin/config/development/configuration/features
Drush support
features-add features-
components
features-diff features-
export features-import
features-list-packages
features-status
https://www.drupal.org/no
de/2624004
Con gli esempi si fa prima / 9
Features - Creazione Feature 2
/admin/modules
Con gli esempi si fa prima / 9
Features - Esportazione Feature
/modules/custom/drupal_day_2015_drupal_day_article
modules/custom/drupal_day_2015_drupal_day_article
▶ tree
├── config
│ ├── install
│ │ ├── core.entity_form_display.node.drupal_day_article.default.yml
│ │ ├── core.entity_view_display.node.drupal_day_article.default.yml
│ │ ├── core.entity_view_display.node.drupal_day_article.teaser.yml
│ │ ├── field.field.node.drupal_day_article.body.yml
│ │ ├── field.field.node.drupal_day_article.field_category.yml
│ │ ├── field.field.node.drupal_day_article.field_image_dd.yml
│ │ └── node.type.drupal_day_article.yml
│ └── optional
│ └── views.view.last_entries_drupal_day_2015.yml
└── drupal_day_2015_drupal_day_article.info.yml
3 directories, 9 files
Con gli esempi si fa prima / 9
Features - Contenuto Feature
/modules/custom/drupal_day_2015_drupal_day_article/config/install
modules/custom/drupal_day_2015_drupal_day_article/config/install
▶ cat node.type.drupal_day_article.yml
langcode: en
status: true
dependencies:
module:
- menu_ui
third_party_settings:
menu_ui:
available_menus:
- main
parent: 'main:'
name: 'Drupal Day Article'
type: drupal_day_article
description: ''
help: ''
new_revision: false
preview_mode: 1
display_submitted: true
… replichiamo per N volte ...
Organizzazione dell’ambiente
Assunzioni
● Team con ambienti eterogenei
● Differenti dipendenze applicative a seconda degli ambienti
(versione PHP/Mysql - Apache/NGINX, ecc)
Risolvere questo tipo di problemi non è il mio lavoro
Organizzazione con Docker
Docker
https://www.docker.com
Organizzazione dell’ambiente con Docker
Docker-compose
https://docs.docker.com/compose/
data:
image: sparkfabrik/docker-drupal-data
hostname: data
volumes:
- /data
- /var/lib/mysql
mysql:
image: sparkfabrik/docker-mysql
hostname: mysql
environment:
- MYSQL_ROOT_PASSWORD=root
Utilizzo di immagini “preconfezionate”
https://github.com/sparkfabrik
https://hub.docker.com/
Organizzazione dell’ambiente con Docker
Docker-compose / 2
cat docker-compose.yml
data:
extends:
file: docker-common-services.yml
service: data
mysql:
extends:
file: docker-common-services.yml
service: mysql
ports:
- "13306:3306"
volumes_from:
- data
Differenti immagini =
● Differenti versioni dei software
● “Switch” tra le versioni in tempo 0
● Coesistenza di differenti versioni dello stesso
applicativo
Sistema di build
Phing
https://www.phing.info/
PHing Is Not GNU make; it's a PHP project build system or build tool
Sistema di build
Phing
<target name="generate-ci-settings" if="env">
<loadfile property="settings.${env}" file="base_files/${env}.settings.php.dist"/>
<echo msg="${settings.${env}}" file="web/sites/${settings.directory.destination}/settings.php"
append="true" />
<copy file="web/sites/${settings.directory.destination}/settings.php"
tofile="web/sites/${settings.directory.destination}/settings.php.temp" />
<exec command="rm web/sites/${settings.directory.destination}/settings.php" />
<copy file="web/sites/${settings.directory.destination}/settings.php.temp"
tofile="web/sites/${settings.directory.destination}/settings.php">
<filterchain>
<replacetokens begintoken="%%" endtoken="%%">
<token key="SETTINGS_INSTALL_PROFILE" value="${site.profile}" />
<token key="DB_NAME" value="${db.name}" />
</replacetokens>
</filterchain>
</copy>
<exec command="rm web/sites/${settings.directory.destination}/settings.php.temp" passthru="true"/>
</target>
Sistema di pubblicazione
Capistrano
http://capistranorb.com/
A remote server automation and deployment tool written in Ruby.
Sistema di pubblicazione
Capistrano
namespace :build do
desc "Install app"
task :do do
on roles(:app) do
invoke 'deploy'
invoke 'drushistrano:composer:install'
invoke 'drushistrano:phing:build'
end
end
end
# cap stage build:do
Perchè automatizzare
Maggiore è l’intervento manuale, maggiori sono le possibilità di errore
I rilasci possono essere eseguiti da tutti (con le dovute accortezze)
I rilasci possono essere automatizzati
Commit branch feature
Merge request branch feature verso develop
Build automatica
Test
Test OK
Progetto Drupal 8 base
https://github.com/vincenzodibiaggio/drupal8_base
● Servono tester
● Chiunque può contribuire
Se ti piace l’idea ma pensi di non “essere in grado”
contattami!
Grazie
Vincenzo Di Biaggio
@vincenzodb
Software Developer @SparkFabrik - Milano
Drupal Social Club https://www.facebook.com/sparkfabrik/
Drupal Day 2015 -  Drupal 8  dal download del core alla pubblicazione in produzione

More Related Content

What's hot

Come sfruttare tutte le potenzialità di Symfony in Drupal 8
Come sfruttare tutte le potenzialità di Symfony in Drupal 8Come sfruttare tutte le potenzialità di Symfony in Drupal 8
Come sfruttare tutte le potenzialità di Symfony in Drupal 8Eugenio Minardi
 
Come sfruttare tutte le potenzialità di Symfony in Drupal 8
Come sfruttare tutte le potenzialità di Symfony in Drupal 8Come sfruttare tutte le potenzialità di Symfony in Drupal 8
Come sfruttare tutte le potenzialità di Symfony in Drupal 8Wellnet srl
 
Drupal Day 2012 - DRUPAL 8: I CAMBIAMENTI CHE CI ASPETTANO
Drupal Day 2012 - DRUPAL 8:  I CAMBIAMENTI CHE CI ASPETTANODrupal Day 2012 - DRUPAL 8:  I CAMBIAMENTI CHE CI ASPETTANO
Drupal Day 2012 - DRUPAL 8: I CAMBIAMENTI CHE CI ASPETTANODrupalDay
 
Introduzione a Drupal e componenti del core - SIDCamp 2015
Introduzione a Drupal e componenti del core - SIDCamp 2015Introduzione a Drupal e componenti del core - SIDCamp 2015
Introduzione a Drupal e componenti del core - SIDCamp 2015Kelyon Srl
 

What's hot (8)

Laravel Framework PHP
Laravel Framework PHPLaravel Framework PHP
Laravel Framework PHP
 
Java lezione 17
Java lezione 17Java lezione 17
Java lezione 17
 
Java lezione 18
Java lezione 18Java lezione 18
Java lezione 18
 
Come sfruttare tutte le potenzialità di Symfony in Drupal 8
Come sfruttare tutte le potenzialità di Symfony in Drupal 8Come sfruttare tutte le potenzialità di Symfony in Drupal 8
Come sfruttare tutte le potenzialità di Symfony in Drupal 8
 
Come sfruttare tutte le potenzialità di Symfony in Drupal 8
Come sfruttare tutte le potenzialità di Symfony in Drupal 8Come sfruttare tutte le potenzialità di Symfony in Drupal 8
Come sfruttare tutte le potenzialità di Symfony in Drupal 8
 
Drupal Day 2012 - DRUPAL 8: I CAMBIAMENTI CHE CI ASPETTANO
Drupal Day 2012 - DRUPAL 8:  I CAMBIAMENTI CHE CI ASPETTANODrupal Day 2012 - DRUPAL 8:  I CAMBIAMENTI CHE CI ASPETTANO
Drupal Day 2012 - DRUPAL 8: I CAMBIAMENTI CHE CI ASPETTANO
 
Introduzione a Drupal e componenti del core - SIDCamp 2015
Introduzione a Drupal e componenti del core - SIDCamp 2015Introduzione a Drupal e componenti del core - SIDCamp 2015
Introduzione a Drupal e componenti del core - SIDCamp 2015
 
Introduzione a Ember.js
Introduzione a Ember.jsIntroduzione a Ember.js
Introduzione a Ember.js
 

Viewers also liked

Intelgain web-portfolio-v3.2
Intelgain web-portfolio-v3.2Intelgain web-portfolio-v3.2
Intelgain web-portfolio-v3.2Vinay Halappa
 
Apartament 2 camere metrou Mihai Bravu
Apartament 2 camere metrou Mihai BravuApartament 2 camere metrou Mihai Bravu
Apartament 2 camere metrou Mihai BravuDaniel Dobre
 
About me
About meAbout me
About meZion40
 
The Forcible Protection of Nationals Abroad 8 October 2014
The Forcible Protection of Nationals Abroad 8 October 2014The Forcible Protection of Nationals Abroad 8 October 2014
The Forcible Protection of Nationals Abroad 8 October 2014Jeroen Thys
 
Game Design Presentation
Game Design Presentation Game Design Presentation
Game Design Presentation Zion40
 
Sist nervioso central tercero
Sist nervioso central terceroSist nervioso central tercero
Sist nervioso central terceroGustavoMaluenda
 
Startup myths and realities
Startup myths and realitiesStartup myths and realities
Startup myths and realitiesBenjamin Joffe
 
6 Ways Your Brain Transforms Sound into Emotion
6 Ways Your Brain Transforms Sound into Emotion6 Ways Your Brain Transforms Sound into Emotion
6 Ways Your Brain Transforms Sound into EmotionAdvanced Hearing Center
 
Homework Spain
Homework SpainHomework Spain
Homework SpainFlatio
 
Estimate coefficient of discharge for rectangular and V notches weirs
Estimate coefficient of discharge for rectangular and V notches weirsEstimate coefficient of discharge for rectangular and V notches weirs
Estimate coefficient of discharge for rectangular and V notches weirsNabeel Afzal
 

Viewers also liked (17)

Modulo 4
Modulo 4Modulo 4
Modulo 4
 
Intelgain web-portfolio-v3.2
Intelgain web-portfolio-v3.2Intelgain web-portfolio-v3.2
Intelgain web-portfolio-v3.2
 
Apartament 2 camere metrou Mihai Bravu
Apartament 2 camere metrou Mihai BravuApartament 2 camere metrou Mihai Bravu
Apartament 2 camere metrou Mihai Bravu
 
About me
About meAbout me
About me
 
The Forcible Protection of Nationals Abroad 8 October 2014
The Forcible Protection of Nationals Abroad 8 October 2014The Forcible Protection of Nationals Abroad 8 October 2014
The Forcible Protection of Nationals Abroad 8 October 2014
 
Game Design Presentation
Game Design Presentation Game Design Presentation
Game Design Presentation
 
Sist nervioso central tercero
Sist nervioso central terceroSist nervioso central tercero
Sist nervioso central tercero
 
Startup myths and realities
Startup myths and realitiesStartup myths and realities
Startup myths and realities
 
6 Ways Your Brain Transforms Sound into Emotion
6 Ways Your Brain Transforms Sound into Emotion6 Ways Your Brain Transforms Sound into Emotion
6 Ways Your Brain Transforms Sound into Emotion
 
Homework Spain
Homework SpainHomework Spain
Homework Spain
 
Modulo 5: PROTECCIÓN
Modulo 5: PROTECCIÓNModulo 5: PROTECCIÓN
Modulo 5: PROTECCIÓN
 
CV T.R.Michael 2015
CV T.R.Michael 2015CV T.R.Michael 2015
CV T.R.Michael 2015
 
Dakota plensky
Dakota plenskyDakota plensky
Dakota plensky
 
ES meets CMS
ES meets CMSES meets CMS
ES meets CMS
 
Alianza para el campo economia
Alianza para el campo economiaAlianza para el campo economia
Alianza para el campo economia
 
Estimate coefficient of discharge for rectangular and V notches weirs
Estimate coefficient of discharge for rectangular and V notches weirsEstimate coefficient of discharge for rectangular and V notches weirs
Estimate coefficient of discharge for rectangular and V notches weirs
 
WorkExperience2015
WorkExperience2015WorkExperience2015
WorkExperience2015
 

Similar to Drupal Day 2015 - Drupal 8 dal download del core alla pubblicazione in produzione

Drupal 8: dal download del Core alla pubblicazione in produzione. Cos'è cambi...
Drupal 8: dal download del Core alla pubblicazione in produzione. Cos'è cambi...Drupal 8: dal download del Core alla pubblicazione in produzione. Cos'è cambi...
Drupal 8: dal download del Core alla pubblicazione in produzione. Cos'è cambi...DrupalDay
 
Sviluppo Code-driven e riusabilità del codice: CMI e Features per D8
Sviluppo Code-driven e riusabilità del codice: CMI e Features per D8Sviluppo Code-driven e riusabilità del codice: CMI e Features per D8
Sviluppo Code-driven e riusabilità del codice: CMI e Features per D8bmeme
 
Sviluppo Code-driven e riusabilità del codice: CMI e Features per D8
Sviluppo Code-driven e riusabilità del codice: CMI e Features per D8Sviluppo Code-driven e riusabilità del codice: CMI e Features per D8
Sviluppo Code-driven e riusabilità del codice: CMI e Features per D8DrupalDay
 
Drupal come framework di sviluppo
Drupal come framework di sviluppoDrupal come framework di sviluppo
Drupal come framework di sviluppoGrUSP
 
Creare un tema personalizzato per wordpress
Creare un tema personalizzato per wordpressCreare un tema personalizzato per wordpress
Creare un tema personalizzato per wordpressGGDBologna
 
Drupal diventa un CMF e WordPress che fa? Slide WordCamp Milano 2019
Drupal diventa un CMF e WordPress che fa? Slide WordCamp Milano 2019Drupal diventa un CMF e WordPress che fa? Slide WordCamp Milano 2019
Drupal diventa un CMF e WordPress che fa? Slide WordCamp Milano 2019Matteo Enna
 
Drush make vs composer
Drush make vs composer Drush make vs composer
Drush make vs composer sparkfabrik
 
Sviluppare plugin per WordPress: Best Practice e Silver Bullet
Sviluppare plugin per WordPress: Best Practice e Silver BulletSviluppare plugin per WordPress: Best Practice e Silver Bullet
Sviluppare plugin per WordPress: Best Practice e Silver BulletLuca Bartoli
 
Come Drupal costruisce le tue pagine
Come Drupal costruisce le tue pagineCome Drupal costruisce le tue pagine
Come Drupal costruisce le tue paginesparkfabrik
 
Drupal - per chi vuole iniziare
Drupal - per chi vuole iniziareDrupal - per chi vuole iniziare
Drupal - per chi vuole iniziareSalvatore Paone
 
Livin' with Docker - dallo sviluppo alla produzione
Livin' with Docker - dallo sviluppo alla produzioneLivin' with Docker - dallo sviluppo alla produzione
Livin' with Docker - dallo sviluppo alla produzionegiacomos
 
Giovambattista Fazioli, 10 more things
Giovambattista Fazioli, 10 more thingsGiovambattista Fazioli, 10 more things
Giovambattista Fazioli, 10 more thingsKnowCamp
 
Fare Drupal a linea di Comando
Fare Drupal a linea di ComandoFare Drupal a linea di Comando
Fare Drupal a linea di ComandoDinamicaMente.org
 
Drupal 10: un framework PHP di sviluppo Cloud Native moderno
Drupal 10: un framework PHP di sviluppo Cloud Native modernoDrupal 10: un framework PHP di sviluppo Cloud Native moderno
Drupal 10: un framework PHP di sviluppo Cloud Native modernosparkfabrik
 
Enterprise Applications - Angular Day 2018
Enterprise Applications - Angular Day 2018Enterprise Applications - Angular Day 2018
Enterprise Applications - Angular Day 2018Paolo Galfione
 
High Performance Web Apps con PHP e Symfony 2
High Performance Web Apps con PHP  e Symfony 2High Performance Web Apps con PHP  e Symfony 2
High Performance Web Apps con PHP e Symfony 2Giorgio Cefaro
 
Drupal
DrupalDrupal
DrupalNaLUG
 
DNM19 Sessione1 Orchard Primo Impatto (ita)
DNM19 Sessione1 Orchard Primo Impatto (ita)DNM19 Sessione1 Orchard Primo Impatto (ita)
DNM19 Sessione1 Orchard Primo Impatto (ita)Alessandro Giorgetti
 

Similar to Drupal Day 2015 - Drupal 8 dal download del core alla pubblicazione in produzione (20)

Drupal 8: dal download del Core alla pubblicazione in produzione. Cos'è cambi...
Drupal 8: dal download del Core alla pubblicazione in produzione. Cos'è cambi...Drupal 8: dal download del Core alla pubblicazione in produzione. Cos'è cambi...
Drupal 8: dal download del Core alla pubblicazione in produzione. Cos'è cambi...
 
Sviluppo Code-driven e riusabilità del codice: CMI e Features per D8
Sviluppo Code-driven e riusabilità del codice: CMI e Features per D8Sviluppo Code-driven e riusabilità del codice: CMI e Features per D8
Sviluppo Code-driven e riusabilità del codice: CMI e Features per D8
 
Sviluppo Code-driven e riusabilità del codice: CMI e Features per D8
Sviluppo Code-driven e riusabilità del codice: CMI e Features per D8Sviluppo Code-driven e riusabilità del codice: CMI e Features per D8
Sviluppo Code-driven e riusabilità del codice: CMI e Features per D8
 
Drupal come framework di sviluppo
Drupal come framework di sviluppoDrupal come framework di sviluppo
Drupal come framework di sviluppo
 
Creare un tema personalizzato per wordpress
Creare un tema personalizzato per wordpressCreare un tema personalizzato per wordpress
Creare un tema personalizzato per wordpress
 
Drush make vs composer
 Drush make vs composer Drush make vs composer
Drush make vs composer
 
Drupal diventa un CMF e WordPress che fa? Slide WordCamp Milano 2019
Drupal diventa un CMF e WordPress che fa? Slide WordCamp Milano 2019Drupal diventa un CMF e WordPress che fa? Slide WordCamp Milano 2019
Drupal diventa un CMF e WordPress che fa? Slide WordCamp Milano 2019
 
Drush make vs composer
Drush make vs composer Drush make vs composer
Drush make vs composer
 
Sviluppare plugin per WordPress: Best Practice e Silver Bullet
Sviluppare plugin per WordPress: Best Practice e Silver BulletSviluppare plugin per WordPress: Best Practice e Silver Bullet
Sviluppare plugin per WordPress: Best Practice e Silver Bullet
 
introduzione a symfony 2
introduzione a symfony 2 introduzione a symfony 2
introduzione a symfony 2
 
Come Drupal costruisce le tue pagine
Come Drupal costruisce le tue pagineCome Drupal costruisce le tue pagine
Come Drupal costruisce le tue pagine
 
Drupal - per chi vuole iniziare
Drupal - per chi vuole iniziareDrupal - per chi vuole iniziare
Drupal - per chi vuole iniziare
 
Livin' with Docker - dallo sviluppo alla produzione
Livin' with Docker - dallo sviluppo alla produzioneLivin' with Docker - dallo sviluppo alla produzione
Livin' with Docker - dallo sviluppo alla produzione
 
Giovambattista Fazioli, 10 more things
Giovambattista Fazioli, 10 more thingsGiovambattista Fazioli, 10 more things
Giovambattista Fazioli, 10 more things
 
Fare Drupal a linea di Comando
Fare Drupal a linea di ComandoFare Drupal a linea di Comando
Fare Drupal a linea di Comando
 
Drupal 10: un framework PHP di sviluppo Cloud Native moderno
Drupal 10: un framework PHP di sviluppo Cloud Native modernoDrupal 10: un framework PHP di sviluppo Cloud Native moderno
Drupal 10: un framework PHP di sviluppo Cloud Native moderno
 
Enterprise Applications - Angular Day 2018
Enterprise Applications - Angular Day 2018Enterprise Applications - Angular Day 2018
Enterprise Applications - Angular Day 2018
 
High Performance Web Apps con PHP e Symfony 2
High Performance Web Apps con PHP  e Symfony 2High Performance Web Apps con PHP  e Symfony 2
High Performance Web Apps con PHP e Symfony 2
 
Drupal
DrupalDrupal
Drupal
 
DNM19 Sessione1 Orchard Primo Impatto (ita)
DNM19 Sessione1 Orchard Primo Impatto (ita)DNM19 Sessione1 Orchard Primo Impatto (ita)
DNM19 Sessione1 Orchard Primo Impatto (ita)
 

Drupal Day 2015 - Drupal 8 dal download del core alla pubblicazione in produzione

  • 1.
  • 2. Drupal 8: dal download del core alla pubblicazione in produzione Cos’è cambiato rispetto a Drupal 7
  • 3. Chi sono Vincenzo Di Biaggio @vincenzodb Software Developer @SparkFabrik - Milano Drupal Social Club https://www.facebook.com/sparkfabrik/ Software: https://github.com/vincenzodibiaggio Videogiochi: http://steamcommunity.com/id/vincenzodb/ Foto: https://500px.com/vincenzodb Musica: http://www.last.fm/it/user/vincenzodb
  • 4. Scaletta - La “rivoluzione” Drupal 8 ha portato con se - La gestione del Core di Drupal come dipendenza - Il Configuration Management System - I Moduli espongono le proprie configurazioni nativamente su file di testo
  • 5. Configurazione? “A configuration is neither cache or content, but everything that is left” @alexpott
  • 6. Scaletta - La “rivoluzione” Drupal 8 ha portato con se - Il Configuration Management System - I Moduli espongono le proprie configurazioni nativamente su file di testo - Come cambiano le nostre Feature - Il nostro modulo non conterrà più le configurazioni dei moduli - Le feature organizzeranno le configurazioni - Mediante i bundle potremo pubblicare un set di funzionalità replicabili
  • 7. Scaletta - La “rivoluzione” Drupal 8 ha portato con se - Il Configuration Management System - I Moduli espongono le proprie configurazioni nativamente su file di testo - Come cambiano le nostre Feature - Il nostro modulo non conterrà più le configurazioni dei moduli - Le feature organizzeranno le configurazioni - Mediante i bundle potremo pubblicare un set di funzionalità replicabili - Organizzazione degli ambienti e replicazione della configurazione
  • 8. La “rivoluzione” Drupal 8 Il Configuration Management System Esportazione / Importazione configurazione Esportazione / Importazione singoli componenti Gestione degli override della configurazione
  • 9. CMS - File di configurazione uuid: 2f915dc3-f384-4e14-a700-d06c3f8e47d7 langcode: en status: true dependencies: { } id: authenticated label: 'Authenticated user' weight: 1 is_admin: false permissions: - 'access content' - 'use text format basic_html' - 'access comments' - 'post comments' - 'skip comment approval' - 'access site-wide contact form' - 'access shortcuts' - 'search content' user.role.authenticated.yml
  • 10. Con gli esempi si fa prima Modulo: Drupal Day 2015 Content type: Drupal Day Article Title Body Image Category - Taxonomy Vocabulary Drupal Day Taxonomy
  • 11. Con gli esempi si fa prima / 2 Modulo: Drupal Day 2015 View Last Entries Content Type: Drupal Day Article Menu Item Last Entries
  • 12. Premesse ● Replicazione delle funzionalità su vari ambienti ● Facilità di pubblicazione
  • 13. Gestione della configurazione Drupal 7 Configurazione nel Database Nessuna gestione della configurazione per poterla esportare / importare / replicare Ripetizione delle azioni di configurazione del core e dei moduli in stage / produzione per poter replicare le funzionalità
  • 14. Modulo Features Drupal 7 Esportazione dei valori di configurazione dei componenti del core Esportazione dei valori di configurazione dei componenti dei moduli contrib o custom che espongono la propria configurazione Organizzazione delle configurazioni esportate all’interno di moduli custom Abilitazione del modulo contenente le feature = replicazione delle feature
  • 15.
  • 16. Gestione della configurazione Drupal 8 ● Gestisce la configurazione di una installazione Drupal ○ Proprietà dei componenti ○ Variabili ○ Override dei valori ● Esportazione / Importazione configurazione ● Sincronizzazione della configurazione ● Gli sviluppatori non devono far altro che dichiarare le configurazioni di un modulo (obbligatorio comunque per falo funzionare)
  • 17. Gestione della configurazione Drupal 8 Gestisce la configurazione di una installazione Drupal DEFAULT SU DATABASE
  • 18. Gestione della configurazione Drupal 8 sites/default/services.yml services: config.storage: class: DrupalCoreConfigCachedStorage arguments: ['@config.storage.active', '@cache.config'] config.storage.active: class: DrupalCoreConfigFileStorage factory: DrupalCoreConfigFileStorageFactory::getActive
  • 19. Gestione della configurazione Drupal 8 sites/default/settings.php $config_directories = array( CONFIG_ACTIVE_DIRECTORY => './../config/active/', CONFIG_SYNC_DIRECTORY => './../config/sync/', ); $settings['bootstrap_config_storage'] = array( 'DrupalCoreConfigBootstrapConfigStorageFactory', 'getFileStorage' );
  • 20. Gestione della configurazione Drupal 8 Gestisce la configurazione di una installazione Drupal Variabili # Drupal 7 variable_set('var', 'Value'); variable_get('var', 'Default value'); variable_del('var');
  • 21. Gestione della configurazione Drupal 8 Gestisce la configurazione di una installazione Drupal Overrides / 1 # settings.php # $config[NOME_FILE][VARIABILE] $config['system.maintenance']['message'] = 'Sorry, our site is down now.';
  • 22. Gestione della configurazione Drupal 8 Gestisce la configurazione di una installazione Drupal Overrides / 2 // Remember original language before this operation. $original_language = Drupal::configFactory()->getLanguage(); $language = language_load($account->getPreferredLangcode()); Drupal::configFactory()->setLanguage($language); $mail_config = Drupal::config('user.mail'); // Now send email based on $mail_config which is in the proper language. // Set back the language to the prior value. Drupal::configFactory()->setLanguage($original_language);
  • 23. Gestione della configurazione Drupal 8 Gestisce la configurazione di una installazione Drupal Overrides / 3 # Valori originali della configurazione $site_name = Drupal::config('system.site')->getOriginal('name', FALSE);
  • 24. Gestione della configurazione Drupal 8 Gestisce la configurazione di una installazione Drupal Overrides / 4 # Overrides permanenti public function loadOverrides($names) { $overrides = array(); if (in_array('system.site', $names)) { $overrides['system.site'] = ['name' => 'Overridden site name!']; } return $overrides; }
  • 25. Gestione della configurazione Drupal 8 Gestisce la configurazione di una installazione Drupal Overrides / 5 # Documentazione https://www.drupal.org/node/1928898
  • 26. Gestione della configurazione Drupal 8 Esportazione / Importazione della configurazione # Drush - http://www.drushcommands.com/drush-7x/config/ /bin/drush config-export /bin/drush config-import # Drupal Console - http://drupalconsole.com/ /bin/console config:export /bin/console config:import
  • 27. Gestione della configurazione Drupal 8 Esportazione / Importazione della configurazione / # Interfaccia /admin/config/development/configuration/full/export /admin/config/development/configuration/full/import
  • 28. Gestione della configurazione Drupal 8 Sincronizzazione della configurazione # Interfaccia /admin/config/development/configuration Differenze tra la configurazione active e quella presente nella directory sync
  • 29. Modulo Features Drupal 8 (Dato che) Drupal 8 si occupa del lavoro di replicazione delle funzionalità Il modulo Features si occupa dell’organizzazione delle funzionalità per poterle gestire attraverso i moduli Creazione e gestione di bundle per replicare le funzionalità utilizzando un set di configurazioni
  • 30. Con gli esempi si fa prima / 3 Modulo: Drupal Day 2015 Creazione - Esportazione Content Type Drupal Day Article Creazione - Esportazione Tassonomia Drupal Day Taxonomy Creazione - Esportazione Vista “Last Entries” Creazione - Esportazione Menu Item “Last Entries”
  • 31. Con gli esempi si fa prima / 4 Content Type Drupal Day Article node.type.drupal_day_article.yml uuid: 3005e153-6382-4173-920c-1232ba898c9d langcode: en status: true dependencies: .... name: 'Drupal Day Article' type: drupal_day_article description: '' help: '' new_revision: false preview_mode: 1 display_submitted: true
  • 32. Con gli esempi si fa prima / 5 Tassonomia Drupal Day Taxonomy taxonomy.vocabulary.drupal_day_2015_taxonomy.yml uuid: 09f00b65-1880-47d1-b001-1e42cadf8c43 langcode: en status: true dependencies: { } name: 'Drupal Day 2015 Taxonomy' vid: drupal_day_2015_taxonomy description: 'Drupal Day 2015 Taxonomy' hierarchy: 0 weight: 0
  • 33. Con gli esempi si fa prima / 6 Vista “Last Entries” views.view.last_entries_drupal_day_2015.yml uuid: eefbb1b8-9b34-4590-a000-de4247c4c335 langcode: en status: true dependencies: config: - core.entity_view_mode.node.teaser - node.type.drupal_day_article - system.menu.main module: - node - user id: last_entries_drupal_day_2015 label: 'Last Entries Drupal Day 2015' module: views base_table: node_field_data base_field: nid display: default: display_plugin: default id: default display_title: Master access: type: perm options: perm: 'access content' [....] items_per_page: 10
  • 34. Con gli esempi si fa prima / 7 Menu Item “Last Entries” views.view.last_entries_drupal_day_2015.yml page_1: display_plugin: page id: page_1 display_title: Page position: 1 path: last-entries-drupal-day-2015 menu: type: normal title: 'Last Entries Drupal Day 2015' menu_name: main
  • 35. Con gli esempi si fa prima / 8 Replicazione delle funzionalità Features 1. Creazione Bundle 2. Creazione Feature 3. Esportazione https://www.drupal.org/node/2404427
  • 36. Con gli esempi si fa prima / 8 Features - Creazione Bundle /admin/config/development/configuration/features/bundle
  • 37. Con gli esempi si fa prima / 8 Features - Creazione Feature /admin/config/development/configuration/features Drush support features-add features- components features-diff features- export features-import features-list-packages features-status https://www.drupal.org/no de/2624004
  • 38. Con gli esempi si fa prima / 9 Features - Creazione Feature 2 /admin/modules
  • 39. Con gli esempi si fa prima / 9 Features - Esportazione Feature /modules/custom/drupal_day_2015_drupal_day_article modules/custom/drupal_day_2015_drupal_day_article ▶ tree ├── config │ ├── install │ │ ├── core.entity_form_display.node.drupal_day_article.default.yml │ │ ├── core.entity_view_display.node.drupal_day_article.default.yml │ │ ├── core.entity_view_display.node.drupal_day_article.teaser.yml │ │ ├── field.field.node.drupal_day_article.body.yml │ │ ├── field.field.node.drupal_day_article.field_category.yml │ │ ├── field.field.node.drupal_day_article.field_image_dd.yml │ │ └── node.type.drupal_day_article.yml │ └── optional │ └── views.view.last_entries_drupal_day_2015.yml └── drupal_day_2015_drupal_day_article.info.yml 3 directories, 9 files
  • 40. Con gli esempi si fa prima / 9 Features - Contenuto Feature /modules/custom/drupal_day_2015_drupal_day_article/config/install modules/custom/drupal_day_2015_drupal_day_article/config/install ▶ cat node.type.drupal_day_article.yml langcode: en status: true dependencies: module: - menu_ui third_party_settings: menu_ui: available_menus: - main parent: 'main:' name: 'Drupal Day Article' type: drupal_day_article description: '' help: '' new_revision: false preview_mode: 1 display_submitted: true
  • 41. … replichiamo per N volte ...
  • 42. Organizzazione dell’ambiente Assunzioni ● Team con ambienti eterogenei ● Differenti dipendenze applicative a seconda degli ambienti (versione PHP/Mysql - Apache/NGINX, ecc) Risolvere questo tipo di problemi non è il mio lavoro
  • 44. Organizzazione dell’ambiente con Docker Docker-compose https://docs.docker.com/compose/ data: image: sparkfabrik/docker-drupal-data hostname: data volumes: - /data - /var/lib/mysql mysql: image: sparkfabrik/docker-mysql hostname: mysql environment: - MYSQL_ROOT_PASSWORD=root Utilizzo di immagini “preconfezionate” https://github.com/sparkfabrik https://hub.docker.com/
  • 45. Organizzazione dell’ambiente con Docker Docker-compose / 2 cat docker-compose.yml data: extends: file: docker-common-services.yml service: data mysql: extends: file: docker-common-services.yml service: mysql ports: - "13306:3306" volumes_from: - data Differenti immagini = ● Differenti versioni dei software ● “Switch” tra le versioni in tempo 0 ● Coesistenza di differenti versioni dello stesso applicativo
  • 46. Sistema di build Phing https://www.phing.info/ PHing Is Not GNU make; it's a PHP project build system or build tool
  • 47. Sistema di build Phing <target name="generate-ci-settings" if="env"> <loadfile property="settings.${env}" file="base_files/${env}.settings.php.dist"/> <echo msg="${settings.${env}}" file="web/sites/${settings.directory.destination}/settings.php" append="true" /> <copy file="web/sites/${settings.directory.destination}/settings.php" tofile="web/sites/${settings.directory.destination}/settings.php.temp" /> <exec command="rm web/sites/${settings.directory.destination}/settings.php" /> <copy file="web/sites/${settings.directory.destination}/settings.php.temp" tofile="web/sites/${settings.directory.destination}/settings.php"> <filterchain> <replacetokens begintoken="%%" endtoken="%%"> <token key="SETTINGS_INSTALL_PROFILE" value="${site.profile}" /> <token key="DB_NAME" value="${db.name}" /> </replacetokens> </filterchain> </copy> <exec command="rm web/sites/${settings.directory.destination}/settings.php.temp" passthru="true"/> </target>
  • 48. Sistema di pubblicazione Capistrano http://capistranorb.com/ A remote server automation and deployment tool written in Ruby.
  • 49. Sistema di pubblicazione Capistrano namespace :build do desc "Install app" task :do do on roles(:app) do invoke 'deploy' invoke 'drushistrano:composer:install' invoke 'drushistrano:phing:build' end end end # cap stage build:do
  • 50. Perchè automatizzare Maggiore è l’intervento manuale, maggiori sono le possibilità di errore I rilasci possono essere eseguiti da tutti (con le dovute accortezze) I rilasci possono essere automatizzati Commit branch feature Merge request branch feature verso develop Build automatica Test Test OK
  • 51. Progetto Drupal 8 base https://github.com/vincenzodibiaggio/drupal8_base ● Servono tester ● Chiunque può contribuire Se ti piace l’idea ma pensi di non “essere in grado” contattami!
  • 52. Grazie Vincenzo Di Biaggio @vincenzodb Software Developer @SparkFabrik - Milano Drupal Social Club https://www.facebook.com/sparkfabrik/