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

Ajouter un commentaire

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