Novembre 2016
  • Drupal 8

La gestione di un progetto Drupal 8 con Composer, Drush e GIT

Un guida sulle Best Practice per l'installazione di Drupal 8, il Versionamento del Codice e l'implementazione dell'Integrazione Continua

Le più recenti e migliori pratiche su Drupal 8 indicano l'utilizzo combinato di Composer e di Drush per l'implementazione del flusso di lavoro migliore nell'amministrazione dell'applicazione, sia nelal sua fase di installazone che di gestione, e successivo sviluppo in termini di "Contnous Integration".

Questo Tutorial descrive una procedura applicativa delle suddette linee guida, consolidata dalle mie migliori pratiche operative e basata sugli autorevoli contributi web di altri esperti Drupal e della documentazione ufficiale.

Si assume la disponibilità sui propri ambienti di sviluppo dei seguenti strumenti:

- Composer (PHP dependency manager): https://getcomposer.org/download/

- Drush (Drupal Shell): https://www.drupal.org/node/2603018

- Git (Code Versioning): https://git-scm.com/downloads

 

Installazione del Pacchetto applicativo e della Code Base di Drupal 8.

Con riferimento al Composer template for Drupal projects

per creare un nuovo progetto Drupal 8 usando Composer, digitare i seguenti comandi da terminale: 

$ cd /sites

$ sudo composer create-project drupal-composer/drupal-project:~8.0 my-drupal-site --stability dev --no-interaction

Drupal 8 Application Package Structure with Composer

dove:

~8.0 indica la versione di Drupal da installare (secondo le Convenzioni sulle Versioni di Composer)

/sites/my-drupal-site è la cartella in cui installare il pacchetto applicativo.

 

A conclusione del processo di installazione, si otterrà una struttura del progetto contenente un file composer.json a livello di root, contenente tutte le informazioni relative alla guida ed alla gestione della struttura dell'applicazione Drupal.

La stessa struttura dell'applicazione conterrà delle cartelle accessorie a livello di root (drush, scripts, vendor, ecc.) ed in particolare la cartella "web" contentente tutto il codice del progetto Drupal 8 vero e proprio.

 

Installazione del Database MySql di Drupal 8.

Dopo aver creato un database vuoto ad hoc, è possibile installare Drupal usando la versione opportuna di Drush che è stata scaricata nella code base (oppure la versione di Drush eventualmente installata sul proprio sistema a livello globale):

$ cd my-drupal-site/web

$ ../vendor/bin/drush site-install --db-url=mysql://{username}:{password}@localhost/{database}

A conclusione del processo, un messaggio di conferma stamperà la username e la password per il my-drupal-site administrator

---------------------

NOTA: Per fare il reset della password di admin in questa fase

seguire le seguenti istruzioni (rif: http://enzolutions.com/articles/2014/12/07/resetting-the-administrator-password-with-sql-query-in-drupal-8/)

$ php core/scripts/password-hash.sh 'admin'

password: admin    hash: $S$E8DpyG1FEHFhGx1FaWdT3a3jx41oqoVsCAtn9HBOSd6spOr6ouHP

A questo punto è necesssario aggiornare la password dell'utente, oppure nel nostro caso è necessario aggiornare la password dell'Administrator.

Anche anche in questa versione Drupal 8 ha UID pari ad 1, cossichè dal proprio mysql è possibile inputare il seguente comando SQL:

UPDATE users_field_data SET pass='$S$E8DpyG1FEHFhGx1FaWdT3a3jx41oqoVsCAtn9HBOSd6spOr6ouHP' WHERE uid = 1;

DELETE FROM cache_entity WHERE cid = 'values:user:1';

------------------

Installare e gestire i Moduli di Terze Parti (Contrib)

L'aggiunta dei moduli contrib in questo progetto Drupal 8 (con Composer) è fatta in modo differente rispetto all'uso del precedente comando (magico) "dursh dl",

in quanto verranno scaricati da Composer dalla fonte indicata nell'indice "repository" del composer.json file.

Finchè l'official Package Repository from Drupal.org non sarà del tutto operativo e funzionale, 

sarà possibile (e consigliabile) scaricare i moduli di terze parti da Drupal Packagist

imputando gli opportuni comand Composer dalla root del progetto (un livello su rispetto alla root di Drupal rappresentata dalla "web" folder). 

Ad esempio:  

$ composer require drupal/migrate_upgrade 8.1.*@dev
$ composer require drupal/migrate_plus 8.1.*@dev

Nota: Per capire i simboli sulle versoni fare riferimento alle Convenzioni sulle Versioni di Composer

 

Committare i file della Code Base sul GIT Repo

I files scaricati tramite composer non hanno bisogno di essere messi sotto versionamento, infatti è possibile verificare come il file .gitignore generato li elenca a questo scopo.

Solo i file composer.json, .gitignore, nonchè il codice in /web/modules/custom ed i contenuto delle sudirectory di /web/sites (esclusi quelli della cartella "files") verranno memmorizzati e versionati nel GIT repo.

 

Impostazione del Versionamento nella Gestione delle Configurazioni (Configuration Managmentcon) con GIT

Di suo ("out of the box") la prima installazione di Drupal imposta (nel file settings.php) la cartella "sync" dei files delle configurazioni yaml in una cartella denonimata con una radica hash all'interno della cartella “web/sites/default/files”, che di suo non ricadrebbe quindi sotto versionamento (in quanto contemplata in .gitignore).

E' piuttosto una "best practice" mettere i files di configurazione della cartella "sync" sotto versionamento, per versionare le modifiche funzionali e di configurazione dell'applicazione e quindi implemetare la Continous Integration di Drupal in modo opportuno.

Quindi è opportuno re-impostare la cartella (sync) delle configurazioni di Drupal al livello root del pacchetto applicativo, e fuori della cartella web di Drupal, con la seguente operazione.

Nel file settings.php aggiungere le seguenti righe di codice (commentando/cancellando le corrispondenti esistenti):

# Changing The Storage Location of the Sync Directory
$config_directories[CONFIG_SYNC_DIRECTORY] = '../config';

Questo imposterà la cartella "project_root_folder/config" come cartella di destinazione di ogni operazione di esportazione in formato file yaml delle configurazioni dell'applicazione dal db, ed origine delle importazione dagli stessi files yaml nel db della applicazione Drupal di destinazione.

Da adesso in poi sarà possibile versionare le modifiche dei file yaml di configurazione via GIT, usando il seguente comando Drush per l'esportazione delle stesse dal db:

$ drush config-export (oppure la scorciatoia: $ drush cex) 

(consultare https://drushcommands.com/drush-8x/config/config-export per una lista completa delle opzioni per questo comando).

Allo stesso modo, i corrispondenti file yaml di configurazione, pushati nei GIT repo di deploy, potranno essere importati nell'applicazione Drupal di destinazione attraverso il seguente e complementare comando Drush: 

$ drush config-import (oppure la scorciatoia: $ drush cim)

 

  • Drupal 8
  • Composer
  • GIT
  • Drush
  • Continous Integration