Installation Drupal 8 en local grâce à Docker

Par Le Barman - Mercredi 12 septembre 2018
Tags
docker
docker-compose
MySQL
Tutoriel
Vignette

Chacun utilise docker comme il le souhaite, cette méthode n'est certainement pas la plus élégante mais elle permet parfaitement d’accéder aux données en base et de manipuler tous les fichiers de Drupal avec votre IDE préféré!

Présentation de l'arbo et des Fichiers

  • /docker-images
    • /Apache
      • Dockerfile
      • /conf
        • 000-default.conf
  • /drupal
  • docker-compose.yml

On utilisera une image Docker custom afin d'importer notre propre fichier défaut de conf Apache (000-default.conf). Cette manip facilitera grandement l'installation de distribution telle que Lightning. Nous nous contenterons dans un premier temps d'installation de Drupal 8 standard.
Voici donc le fichier de conf utilisé (000-default.conf):

<VirtualHost *:80>

	ServerAdmin webmaster@localhost
	#Drupal standard:
	DocumentRoot /var/www/html/

	#Drupal Lightning
	#DocumentRoot /var/www/html/docroot

	ErrorLog ${APACHE_LOG_DIR}/error.log
	CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>

Ensuite notre image Docker (fichier Dockerfile). L'essentiel de cette image provient de l'image officielle Drupal 8 on ajoute simplement notre fichier de conf et XDebug.

# from https://www.drupal.org/docs/8/system-requirements/drupal-8-php-requirements
FROM php:7.2-apache

COPY conf/000-default.conf /etc/apache2/sites-available/

# install the PHP extensions we need
RUN set -ex; \
	\
	if command -v a2enmod; then \
		a2enmod rewrite; \
	fi; \
	\
	savedAptMark="$(apt-mark showmanual)"; \
	\
	apt-get update; \
	apt-get install -y --no-install-recommends \
		libjpeg-dev \
		libpng-dev \
		libpq-dev \
	; \
	\
	docker-php-ext-configure gd --with-png-dir=/usr --with-jpeg-dir=/usr; \
	docker-php-ext-install -j "$(nproc)" \
		gd \
		opcache \
		mbstring \
		zip \
		bcmath \
		mysqli \
		pdo_mysql \
		pdo_pgsql \
		zip \
	; \
	\
# reset apt-mark's "manual" list so that "purge --auto-remove" will remove all build dependencies
	apt-mark auto '.*' > /dev/null; \
	apt-mark manual $savedAptMark; \
	ldd "$(php -r 'echo ini_get("extension_dir");')"/*.so \
		| awk '/=>/ { print $3 }' \
		| sort -u \
		| xargs -r dpkg-query -S \
		| cut -d: -f1 \
		| sort -u \
		| xargs -rt apt-mark manual; \
	\
	apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false; \
	rm -rf /var/lib/apt/lists/*

# set recommended PHP.ini settings
# see https://secure.php.net/manual/en/opcache.installation.php
RUN { \
		echo 'opcache.memory_consumption=128'; \
		echo 'opcache.interned_strings_buffer=8'; \
		echo 'opcache.max_accelerated_files=4000'; \
		echo 'opcache.revalidate_freq=1'; \
		echo 'opcache.fast_shutdown=1'; \
		echo 'opcache.enable_cli=1'; \
	} > /usr/local/etc/php/conf.d/opcache-recommended.ini

# Install Xdebug, la conf sera située dans: /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
RUN pecl install xdebug
RUN docker-php-ext-enable xdebug
RUN service apache2 restart

WORKDIR /var/www/html

# vim:set ft=dockerfile:

Puis on ajoute le fichier docker-compose.yml:

version: '3.1'

services:
  drupal:
    build: docker-images/Apache
    # Le port de l'hôte sera mappé sur le port 80 du conteneur Drupal.
    ports:
      - 8000:80
    volumes:
    # Les sources de Drupal doivent être placées dans le répertoire "drupal" au même niveau que le docker-compose.yml.
      - ./drupal:/var/www/html
    links:
      - mysql
  mysql: 
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: '1234'
      MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'

  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    environment:
      PMA_ARBITRARY: 1
    ports:
      - 8001:80
    links:
      - mysql

Dans le dossier drupal on place l’intégralité de la distrib fraîchement dézippée récupérée sur drupal.org.
Une fois fait il faut préparer les fichiers pour l’installateur Drupal.

Pour les utilisateur Linux/Mac il est nécessaire de créer certains dossiers et fichiers et d'en modifier les droits.
Tout d'abord il faut créer le dossier files dans /sites/default. puis ajouter la permission d'écriture à ce dossier à tous les utilisateurs:

 mkdir sites/default/files
 chmod a+w sites/default/files

Il faut ensuite créer le fichier de configuration et de paramétrages qui n'existe pour l'instant que sous forme de template. Ce fichier est /sites/default/default.settings.php.

cp sites/default/default.settings.php sites/default/settings.php
chmod a+w sites/default/settings.php

Fin des manips pour les utilisateurs Linux/MAC.

lancement de l’environnement avec docker-compose

Maintenant que tout est prêt, on se place à la racine de notre arborescence et on exécute la commande suivante:

docker-compose up

Si tout va bien on peut se connecter à l'installer Drupal via http://localhost:8000 et à PhpMyAdmin via http://localhost:8001.
Il faut donc à présent créer la base de données qui accueillera Drupal.
Pour connaître l'ip du conteneur MySQL il suffit de faire docker-inspect [le-nom-de-votre-conteneur-mysql] puis de noter la valeur de l'adresse IP (IPAddress). Dans mon exemple il s'agit de 172.22.0.2.
 

Panneau de connexion à phpmyadmin avec adresse ip de contenur MySQL
Connexion à PhpMyAdmin avec l'ip du conteneur MySQL.
Utilisateur: root
Mot de passe: 1234

L'utilisateur est root et le mot de passe 1234.
Une fois connecté on peut alors ajouter une nouvelle base de données, nommez la comme bon vous semble et utilisez l'interclassement utf8mb4_general_ci.

Vous pouvez ensuite aller sur localhost:8000 pour poursuivre l'install de Drupal avec le profil de votre choix! Pourquoi ne pas tester Umami? :)

PAnnel de connexion à la base MySQL.
username: root
mdp: 1234
host: mysql

Et voila!
Une install Drupal avec laquelle vous pourrez aisément brancher votre IDE pour inspecter le code et scruter les bases avec PHPMyAdmin ou tout autre client MySQL.

Pour les utilisateurs Linux/Mac il est conseillé de rétablir les droits sur le fichier de conf comme suit:

 chmod go-w sites/default/settings.php

Après si c'est juste pour du local on s'en fout un peu...

Note du barman: si vous souhaitez tester la distrib Lightning pensez à dé-commenter la ligne correspondante dans le fichier 000-default.conf. Le reste des manips restera similaire à ceci près qu'il faudra prévoir une arbo supplémentaire au niveau du dossier drupal. Ainsi nous n'auron plus /drupal/sites/default/setttings.php mais /drupal/docroot/sites/default/settings.php.

Enjoy!

Commentaires

J'ai pu découvrir Lightning simplement grâce à cet article ! :)
Pas toujours simple de trouver des tutos simples en qui fonctionnent en français !

Soumis par Le Défourailleur (non vérifié) le mer 06/02/2019 - 15:54

Merci, tout marche à merveille. Juste une petite coquille : docker inspect <container name> et non pas docker-inspect
Si vous avez l'erreur suivante:
subprocess.CalledProcessError: Command '['C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker-credential-desktop.EXE', 'get']' returned non-zero exit status 1.
Elle se résolve en se connectant au docker hub : https://hub.docker.com/signup

Soumis par vi (non vérifié) le jeu 12/03/2020 - 11:31

Bonjour,
Je travaille actuellement sur un projet Drupal associé à Docker (que je ne connais pas encore) mais dont la procédure ne me paraît pas cohérente avec les pratiques Drupal.
Vore procédure a attiré mon attention et je la trouve bien rédigée (même si je ne l'ai pas mise en oeuvre). Docker y génère l'installation de PHP et MYSQL, ainsi que la copie d'un projet vide Drupal.
Ma première question est: que devient la base de données lorsque l'on ferme Docker ?
Ne serait-il pas aussi intéressant d'y intégrer également les outils d'industrialisation tels que GIT et Composer afin d'installer un projet en cours ?
La proposition qui suit nécessite de créer préalablement un projet Drupal en local et de le commiter à GIT.
Image: répertoire contenant
dump de la base de données du projet créé en local.
fichiers settings.php et services nécessaires.
Dans le fichier DockerFile:
- installation de composer (commandes apt ...)
- installation de Git.
- récupération du projet par 'git clone', ce qui permet de récupérer le fichier composer.lock
- dans le répertoire du projet, on recharge les éléments Drupal par 'composer install' (contient notamment drush/drush)
- création d'une base de données MySQL portant le nom stocké dans le fichier settings.php
- import du dump situé dans le répertoire de l'image vers la base de données créée
- copie du fichier de configuration dans le répertoire sites/default du projet
- import des configurations par la commande 'drush cim'

Nous pouvons alors poursuivre le développement du site, commiter les réalisations vers Git, et fermer Docker.

Qu'en pensez-vous ?

Soumis par DrupalFab (non vérifié) le sam 18/07/2020 - 17:48

Bonjour,
Merci pour ce tuto qui est clair et aui m'a permis de comprendre un peu mieux Docker.
Un petit problème survient lors du docler-compose, au moment de monter le service drupal (je suis sous linux) :
checking for libzip... not found
configure: error: Please reinstall the libzip distribution
ERROR: Service 'drupal' failed to build: The command '/bin/sh -c set -ex; i
Comme je travail essenciellement avec Slackware 14.2, je ne suis pas trop à l'aise avec apt-get, mais il semblerait que la lib. libzip ne soit pas trouvée dans le repo de UBUNTU.
Avez vous une suggestion ?
En tout cas je vous remercie vraiment pour le travail fourni car il est de qualité et très bien détaillé.

Avec mes meilleurs messages

Soumis par ProteusVI (non vérifié) le lun 20/07/2020 - 11:56

Ajouter un commentaire

L'e-mail est obligatoire mais restera privé.