écrit le  31-10-2017 - mis à jour le 10 juillet 2018

Composer

Si comme moi, tu refusais de quitter l’îlot de tes habitudes de drupalien version 7 (drush, git), sache que ça ne va plus être possible. Tel le pouvoir madrilène qui dicte ses lois à la Catalogne, drupal version 8 t’impose COMPOSER !

En un mot comme en cent, "composer" est un gestionnaire de dépendances. Que cela veut-il dire ?

Principalement que dorénavant :

  • quand tu installeras un module en local, tu n’exécutera plus un vulgaire drush dl devel (par exemple) mais un magnifique

    composer require drupal/devel
    (drush en devel sera pour autant toujours utile),

     

  • quand tu mettras à jour un module drupal, tu n'utiliseras plus drush up monmodule mais

    composer update drupal/nom_du_module
  • quand tu mettras à jour ta prod, tu n’exécuteras plus un ordinaire drush updb après un git pull mais un élégant composer drush cim (pour config import). Ce dernier se basera sur les fichiers composer.json et composer.lock pour savoir quels sont les modules dont il a besoin.

 

Installer composer

C’est facile :

 

Exporter et importer la config

Vous pouvez constater qu’après avoir installé drupal 8.5 (ou supérieur), votre fichier settings.php contient la ligne

$config_directories['sync'] = '../config/sync';

Cela indique que les variables de configuration (comme le nom de votre site ou encore les modules activés, enfin tout ce qui fait de votre site drupal, un site web spécifique) seront exportées dans un répertoire hors d’atteinte d’une requête http (répertoire web), dans le répertoire config/sync.

Logiquement, il vous suffira d’exporter la config de votre serveur de test pour l’importer ensuite sur vos serveurs de préprod puis de prod.

  • Exporter la config : drush cex
  • Importer la config : drush cim

1 Installer un site drupal la première fois depuis une configuration existante

Pour que votre futur site de prod ou de preprod puisse être directement installé en prenant compte votre configuration, il va falloir utiliser le module « configuration installer ».

Pour cela, en local, exécuter :

composer require drupal/config_installer
drush cex
git add ../config
git commit -m "config exported."
git push

Sur le serveur du site à installer d’après votre configuration locale :

git pull
composer install

Puis  :

  • vérifier que le répertoire web/profiles/contrib/config_installer est bien présent,
  • vérifier que le fichier .htaccess est présent et que le mode rewrite d'apache est activé,
  • lancer l’installation de votre site dans le navigateur et dès la deuxième étape, choisissez le profil d’installation « Configuration installer »,
    déroulez l’installation et vous verrez qu’à la 5ième étape, le champ « Synchronisation directory » aura comme valeur par défaut « ../config/sync ». Toutes les variables de configuration sont bien prises en compte. Si l'installation plante, c'est sans doute un problème de timeout. N'hésitez pas à relancer l'install en lançant un simple rechargement de la page (F5).
    ou lancer l'install depuis drush mais je n'y suis pas encore arrivé (j'ai testé  :
    drush site-install --verbose --locale=fr config_installer config_installer_sync_configure_form.sync_directory=../config/sync --yes  (en admettant que l'on se trouve dans le fichier racine de drupal soit par défaut web) ... mais ça ne fonctionne pas ... il faut creuser. Si vous avez la solution, merci de me l'envoyer à contact@coopernet.fr

2 Mettre à jour les modifications de configuration exportées tout au long de la vie de votre site web

Lorsque vous apportez des modifications de configuration en local, il vous faudra les exporter, les "commiter" puis les importer sur vos serveurs de pré-prod et de production.

Notez au passage qu'il faut exporter composer.json et composer.lock.

Dans composer.json, on va trouver des informations du type : "drupal/entity_browser": "^2.0.0" 
ce qui veut dire que vous voulez installer le module entity_browser à partir de sa version 2.0

Dans composer.lock, on va trouver des informations du type : 

     "name": "drupal/entity_browser",
      "version": "2.0.0-alpha3",
Ce qui veut dire que c'est exactement la version 2.0.0-alpha3 qui sera installé

On a donc besoin de "commiter" ces deux fichiers pour installer exactement les mêmes versions des modules de drupal en en local et en prod.

Pour exporter :

drush cex

Pour le versioning, utilisez git de façon classique :

git add xxx

git ci - m "Votre message de commit"

git push

Pour importer

git pull

composer install

drush cim

drush cr

3 Drush

Pour pouvoir travailler correctement avec drupal 8.4 et supérieur, il faut installer au minimum la version 8.1.15 :

composer global require drush/drush:8.1.15

Attention également à utiliser dans le répertoire web pour la plupart des commandes (ex : drush en devel)

4 Les commandes à connaître pour s'en sortir dans ce nouveau monde :

Mettre à jour un module contrib particulier

composer update drupal/nom_du_module

Mettre à jour le coeur de drupal

composer update drupal/core --with-dependencies
drush updatedb
drush cr

Activer un module, en pour enable (territoire connu)

drush en nom_du_module

Vider tous les caches, équivalent à l'ancien drush cc all

drush cr 

Désinstaller un module contrib

composer remove drupal/nom_du modulecontrib

Activer / désinstaller un module custom (u pour uninstall)

Attention, composer ne s'occupe que des modules contrib. Les modules custom ne le concerne pas. Ainsi pour un activer et désinstaller un module custom, il faudra utiliser les commandes drush usuelles :

drush en nom_du module_custom
drush pmu nom_du module-custom

 

Tags