Installer Drupal depuis la configuration

Depuis Drupal 8.6.0 il est possible d'installer un site depuis un ensemble de fichiers de configuration, voyons comment cela fonctionne.

Depuis la sortie de Drupal 8 et de son système de gestion de la configuration, la communauté n'a cessé de demander à ce qu'il soit possible de procéder à une installation complète à partir d'un jeu de fichiers de configuration existant. Il aura fallu plus de deux ans et des efforts considérables de dizaines de contributeurs et contributrices pour rendre cela possible.

Utilité

Cette nouvelle fonctionnalité, jusqu'à présent accessible avec un peu de bricolage grâce au profil d'installation Configuration Installer, ouvre de nombreuses possibilités. Tout d'abord, il y a les agences qui souhaiteraient avoir un socle pour démarrer rapidement leurs projets (c'est notre cas), mais aussi les développeurs et développeuses qui veulent pouvoir expérimenter des choses tout en étant capables de reconstruire rapidement leur environnement si besoin ou de monter des environnements de test à la volée. Côté fonctionnel cela rend également plus simple le clonage de site sans avoir à nettoyer les contenus et cela permet également, dans certains cas comme pour un système d'usine à sites, de disposer d'un socle minimal de configuration disponible lors de la création d'un nouveau site.

Préparation

Comme vous vous en doutez, la première étape est d'avoir un jeu de fichiers de configuration disponible. Si ce n'est pas votre cas, faîtes une installation classique avec le profil d'installation minimal, activez quelques modules, changez quelques options dans l'administration du site, puis exportez la configuration via le backoffice (chemin : admin/config/development/configuration/full/export) ou via Drush (drush config:export).

Placez vos fichiers de configuration dans un répertoire prévisible, hors de votre DocumentRoot si possible. Par exemple, si vous suivez l'organisation proposée par le drupal-project, cela se fera dans un répertoire config/sync à la racine du projet. Puis, indiquez l'emplacement de cette configuration dans votre fichier settings.php (ou settings.local.php si vous en avez un) de façon relative à la racine de Drupal, c'est à dire à l'emplacement du fichier index.php. Par exemple :

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

Note : il est aussi possible de stocker cette configuration dans le répertoire config/sync de votre profil d'installation sans avoir besoin de modifier le fichier de settings. Cela peut être très utile dans le cadre d'une distribution (interne ou contribuée) mais, dans la plupart des cas, un répertoire indépendant sera préférable car il permettra de maintenir la configuration à jour plus simplement au fil du projet.

Utilisation

Une fois votre référentiel de configuration et vos fichiers prêts, vous n'avez plus qu'à installer votre site.

C'est possible de réaliser cette opération depuis l'interface graphique fournie par Drupal, comme illustré ci-dessous.

Écran d'installation de Drupal faisant apparaître l'option "Use existing configuration" qui permet d'installer le site en se basant sur la configuration existante.

Cela est également possible via Drush 9.4 ou supérieur grâce à l'option --existing-config de la commande drush site:install.

Limitations et dépannage

Attention ! À l'heure actuelle, cette fonctionnalité ne fonctionne pas avec les profils d'installation qui implémentent un hook_install. C'est pour cette raison que je vous ai conseillé de tester en utilisant le profil minimal. Cela sera sans doute amené à changer dans le futur puisque la communauté travaille actuellement sur cette problématique.

De plus, si vous décidez de créer votre propre profil d'installation (ce que je recommande chaleureusement, j'en parlerai dans un futur billet), faîtes bien attention à l'export du fichier core.extension.yml. En effet, celui-ci contient la liste de tous les modules activés, y compris votre profil qui est considéré comme un module, ainsi qu'une référence directe au profil avec lequel le site a été installé. Si vous avez procédé à une installation via le profil minimal, il faudra remplacer ce dernier dans le fichier par le nom machine de votre propre profil sous les clefs "module" et "profile". Si vous ne faîtes pas cette modification, l'installation échouera.

Extrait d'un différentiel de code illustrant le changement de profil dans le fichier core.extension.yml.

Et voilà ! Vous savez tout. Si vous tombez sur des cas étranges, n'hésitez pas à nous laisser un petit commentaire !

 

Crédit photo de couverture : Sally Wilson

Commentaires

jabberwooki Vendredi 5 avril 2019 - 16:27

Dans l'état actuel des choses, on n'a donc pas vraiment accès à cette fonctionnalité bien pratique d'installation d'un site à partir d'un jeu de configuration existant. Ça

serait pourtant fort utile pour mettre en place les instances de recette et de production d'un environnement de développement collaboratif.

Et partir du profil "minimal" demande ensuite à activer toute une série de modules, ce qui est long et fastidieux.

Après quelques essais, je viens de trouver une petite astuce pour ceux qui, comme moi, n'ont pas encore créé leur propre profil d'install ou ceux aussi qui n'ont pas

envie d'en créer un.

 

- Après avoir téléchargé Drupal avec Composer (j'ai pas testé avec la méthode classique, mais ça devrait être la même chose) et créé le vhost qui va bien, j'ai lancé

une installation à partir du profil  "standard" depuis l'interface graphique. En fin d'installation, tous les modules prévus par ce profil sont donc activés. Parfait !

L'informaticien est un individu paresseux, ne l'oublions pas.

- Pour tester au delà du périmètre du profil "standard", j'ai activé quelques modules supplémentaires, comme je le fais en démarrant un nouveau projet : admin_toolbar,

admin_toolbar_tools, devel, devel_php (et ouais, c'est un module à part maintenant), config_filter, config_split.

- Ensuite, j'ai créé le répertoire config/sync à la racine du projet et j'ai modifié le fichiers settings.php en indiquant bien :

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

- J'ai exporté cette configuration avec "drush cex -y".

- Puis, l'astuce se situe là, j'ai édité le fichier core.extensions.yml dans lequel il est fait 2 fois mention au profil "standard". J'ai remplacé le mot standard par le mot

minimal :

standard: 1000 devient donc minimal: 1000
et
profile: standard devient profile: minimal

- Ensuite, après avoir initialisé git à la racine du projet, j'ai ajouté, commité et poussé tout ça sur un projet test sur Github.

- Pour simuler mon insance de recette, j'ai cloné ce projet dans un autre répertoire sur mon poste de travail et j'ai lancé composer install.

- Pour finir, j'ai créé un vhost pour ce second projet et lancé l'install via l'interface graphique.


Résultat :

Au moment du choix du profil, j'ai bien minimal, standard et le maintenant classique Umami Food Magazine mais aussi la 4ème possibilité Use existing

configuration.

Après avoir choisi cette dernière et une fois la procédure d'installation terminée, je peux vérifier que tous les modules du profil standard ainsi que les quelques modules

que j'ai ajoutés sont tous bien activés. Allez hop ! Une bonne bière.

 

Votre commentaire

Le contenu de ce champ sera maintenu privé et ne sera pas affiché publiquement.
Votre adresse servira à afficher un Gravatar et à vous notifier des réponses. Votre commentaire sera anonymisé si ce billet est dépublié pendant plus de 3 mois.
Pour lutter contre le spam notre système enregistre votre adresse IP et votre adresse e-mail si vous la partagez.
Nous vous invitons à consulter notre politique de confidentialité pour comprendre les traitements faits de ces données et comment les rectifier.

À propos de Edouard

Expert technique

Après un premier contact douloureux avec Drupal en 2009 en autodidacte, j'ai suivi une formation qui m'a convaincu de mon choix technologique et m'a vraiment mis en selle. Durant plusieurs années suite à cela j'ai accompagné des entreprises locales dans le développement de leurs projets de toutes sortes, de la simple vitrine à l'intranet social en passant par le projet e-commerce.