Drupal 10 : Comment installer Drupal dans un conteneur docker

Introduction

L’installation de Drupal 10 dans un conteneur Docker offre une approche flexible et portable pour déployer rapidement et efficacement ce système de gestion de contenu (CMS) puissant. Docker, en tant que plateforme de virtualisation légère, permet d’encapsuler Drupal et ses dépendances dans un environnement isolé, garantissant ainsi une cohérence et une reproductibilité de l’installation. Cette méthode offre également la possibilité de travailler dans un environnement de développement ou de test uniforme, indépendamment des spécificités du système hôte. Dans cette article, nous allons étudier les étapes nécessaires pour configurer et déployer Drupal 10 dans un conteneur Docker, offrant ainsi une solution pratique et efficace pour le développement et la gestion de sites web modernes.

Prérequis

Afin d’installer Drupal, le prérequis suivants doivent être installés sur votre ordinateur :

Étape 1 : Créer un projet Drupal

Nous avons choisi d’utiliser le projet recommandé Drupal (drupal/recommended-project) pour installer Drupal dans Docker4Drupal, principalement en raison de sa structure de projet bien définie et de ses bonnes pratiques de développement. Ce projet crée un site Drupal avec une “racine de document délocalisée”, plaçant les fichiers “index.php”, le répertoire “core” et autres à l’intérieur d’un sous-répertoire nommé “web”, plutôt que directement à la racine du projet. Cette disposition est recommandée car elle permet de configurer le serveur web pour ne fournir un accès qu’aux fichiers situés à l’intérieur du répertoire “web”, améliorant ainsi la sécurité. De plus, cette structure garantit que le répertoire “vendor”, contenant les dépendances PHP gérées par Composer, reste en dehors de la racine du document du serveur web, ce qui renforce la sécurité.

composer create-project drupal/recommended-project d10/

Ajoutons quelques modules complémentaires

cd d10
composer require drupal/pathauto
composer require --dev drupal/devel
composer require drush/drush
composer require drupal/admin_toolbar
composer require drupal/views_serialization_pager
composer require drupal/node_view_permissions

Étape 2 : Configuration du projet Drupal

Ajoutons un fichier .gitignore à la racine du projet

cp web/example.gitignore .gitignore

Adaptons le fichier .gitignore en ignorant les data de notre base de données docker/postgres/data/* et en remplaçant le chemin sites/ par web/sites. (sur Linux exécuter la commande : sed -i'.bak' -z 's|\nsites|\nweb/sites|g' .gitignore)

/vendor/

# Ignore configuration files that may contain sensitive information.
web/sites/*/settings*.php
web/sites/*/services*.yml

# Ignore paths that contain user-generated content.
web/sites/*/files
web/sites/*/private

# Ignore multi-site test environment.
web/sites/simpletest
docker/postgres/data/*

Ajoutons le dossiers files et le fichier de configuration settings.php dans web/sites/default puis ajoutons a ces derniers des droits en écriture afin de faciliter l’installation de Drupal :

mkdir web/sites/default/files
cp web/sites/default/default.settings.php web/sites/default/settings.php
chmod -R 777 web/sites/default/files web/sites/default/settings.php

Modifions le fichier web/sites/default/settings.php comme suit afin de récupérer les informations depuis le fichier .env

 $databases['default']['default'] = array (
    'database' => getenv('DB_NAME'),
    'username' => getenv('DB_USER'),
    'password' => getenv('DB_PASSWORD'),
    'host' => getenv('DB_HOST'), 
    'driver' => getenv('DB_DRIVER'),
    'port' => getenv('DB_PORT'),
    'prefix' => '',
 );

Étape 3 : Installation de Docker4Drupal

Nous optons pour l’utilisation de Docker4Drupal en raison de sa simplicité d’utilisation et de sa configuration complète pour le déploiement de Drupal dans un environnement Docker. Docker4Drupal est une solution pré-configurée qui intègre les services essentiels tels que Nginx, PHP, MySQL et Redis, nécessaires au bon fonctionnement de Drupal. En utilisant Docker4Drupal, nous évitons la complexité de la configuration manuelle de chaque composant Docker, ce qui nous permet de gagner du temps et d’assurer une mise en place rapide et efficace de notre environnement de développement ou de production. De plus, Docker4Drupal offre une flexibilité suffisante pour personnaliser et étendre l’environnement Docker en fonction des besoins spécifiques de notre projet Drupal, ce qui en fait un choix idéal pour notre déploiement.

Nous allons télécharger la dernière version de Docker4Drupal (docker4drupal.tar.gz) disponible à l’adresse suivante et la décompresser dans le dossier de notre projet. Au moment de la rédaction de ces lignes, la version disponible est la 6.0.10.

cd d10
wget https://github.com/wodby/docker4drupal/releases/download/6.0.10/docker4drupal.tar.gz
tar -xzvf docker4drupal.tar.gz

Étape 4 : Configuration de Docker4Drupal

Suppression de fichiers inutiles

Exécutez les commandes ci-dessous afin de nettoyer quelques fichiers inutiles

rm -rf docker-compose.override.yml docker4drupal.tar.gz
rm -rf .git

Utilisation de PostgreSQL

Nous avons décidé d’utiliser PostgreSQL à la place de MariaDB car PostgreSQL est un système de gestion de base de données relationnelle reconnu pour sa robustesse, sa conformité aux normes SQL, et sa capacité à gérer des charges de travail complexes.

Maintenant, pour mettre en œuvre ce choix dans Docker4Drupal, suivez ces étapes simples :

  1. Ouvrez le fichier docker-compose.yml dans votre projet Docker4Drupal.
  2. Recherchez la section correspondant à mariadb puis commenter ou supprimer la.
  3. Recherchez la section correspondant à postgres. Cette section est généralement commentée par défaut.
  4. Décommentez cette section en supprimant le symbole # au début de chaque ligne,
  5. Personnalisez le chemin au niveau du volume afin de persister notre base de données.
  6. Recherchez la section correspondant à php et décommentez les variables relatives a la base de données, afin de rendre ces derniers disponible au niveau de notre fichiers web/sites/default/settings.php
  7. Recherchez la section correspondant à adminer et décommentez la. Ce service nous offre une interface d’administration de notre base de données PostgreSQL.

Après les modifications votre configuration doit ressembler à ceci :

    php:
    image: wodby/drupal-php:$PHP_TAG
    container_name: "${PROJECT_NAME}_php"
    environment:
      PHP_MAIL_MIXED_LF_AND_CRLF: On
      PHP_SENDMAIL_PATH: '/bin/busybox sendmail -t -i -S mailhog:25'
      DB_HOST: $DB_HOST
      DB_PORT: $DB_PORT
      DB_USER: $DB_USER
      DB_PASSWORD: $DB_PASSWORD
      DB_NAME: $DB_NAME
      DB_DRIVER: $DB_DRIVER
    volumes:
     - ./:/var/www/html:cached
  
  #...
  
  postgres:
    image: wodby/postgres:$POSTGRES_TAG
    container_name: "${PROJECT_NAME}_postgres"
    stop_grace_period: 30s
    environment:
      POSTGRES_PASSWORD: $DB_PASSWORD
      POSTGRES_DB: $DB_NAME
      POSTGRES_USER: $DB_USER
      POSTGRES_DB_EXTENSIONS: pg_trgm
    volumes:
#    - ./postgres-init:/docker-entrypoint-initdb.d # Place init file(s) here.
     
  adminer:
    container_name: "${PROJECT_NAME}_adminer"
    init: true
    image: wodby/adminer:$ADMINER_TAG
    environment:
      # For PostgreSQL:
      ADMINER_DEFAULT_DB_DRIVER: pgsql
      ADMINER_DEFAULT_DB_HOST: $DB_HOST
      ADMINER_DEFAULT_DB_NAME: $DB_NAME
    labels:
      - "traefik.http.routers.${PROJECT_NAME}_adminer.rule=Host(`adminer.${PROJECT_BASE_URL}`)"
      
   traefik:
    image: traefik:v2.0
    container_name: "${PROJECT_NAME}_traefik"
    command: --api.insecure=true --providers.docker
    ports:
      - "${PROJECT_PORT}:80"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

Créons à présent l’arborescence docker/postgres/data qui permet de persister notre base de données.

mkdir docker
mkdir docker/postgres
mkdir docker/postgres/data

Rajouter la ligne ci dessous dans le fichier .gitignore

docker/postgres/data/*

Configuration des variables d’environnements

Ouvrez le fichier .env à la racine du projet, commentons les variables relatifs à mariadb et personnalisons comme ceci :

PROJECT_NAME=d10
PROJECT_BASE_URL=d10.docker.localhost
PROJECT_PORT=8000

DB_NAME=drupal
DB_USER=drupal
DB_PASSWORD=drupal
DB_ROOT_PASSWORD=password
DB_HOST=postgres
DB_PORT=5432
DB_DRIVER=postgres

### --- POSTGRESQL ----
POSTGRES_TAG=16-1.33.0

Étape 5 : Installation de Drupal

Nous allons lancer le projet à l’aide de la commande ci dessous :

docker-compose up

Se rendre au niveau de l’url http://d10.docker.localhost:8000 et suivre les étapes afin d’installer Drupal 10.

Pour accéder à l’interface d’administration de la base de données adminer, se connecter sur l’url http://adminer.d10.docker.localhost:8000

Une fois que vous avez terminé l’installation de Drupal et que vous n’avez plus besoin de modifier le fichier settings.php, vous pouvez enlever les droits en écriture pour des raisons de sécurité. Voici comment vous pouvez le faire en utilisant la commande chmod :

chmod a-w web/sites/default/settings.php web/sites/default

Cette commande enlève les droits en écriture pour tous les utilisateurs sur le fichier settings.php dans le répertoire sites/default, ce qui empêche toute modification ultérieure du fichier.

Conclusion

En conclusion, installer Drupal dans un conteneur Docker en utilisant Docker4Drupal offre une manière pratique et efficace de développer des sites Web Drupal localement. Grâce à Docker, vous pouvez créer un environnement de développement isolé et portable, ce qui facilite la gestion des dépendances et la collaboration avec d’autres développeurs. En utilisant Docker4Drupal, vous bénéficiez d’une configuration prête à l’emploi pour Drupal, ce qui vous permet de démarrer rapidement et de vous concentrer sur le développement de votre site Web.

Mamadou Diagne
Mamadou Diagne
Architecte logiciel & CTO

Diplômé d'ETNA, la filière d'alternance d'Epitech, j'ai acquis une expertise solide dans le développement d'applications, travaillant sur des projets complexes et techniquement diversifiés. Mon expérience englobe l'utilisation de divers frameworks et langages, notamment Symfony, Api Platform, Drupal, Zend, React Native, Angular, Vue.js, Shell, Pro*C...

0 0 votes
Évaluation de l'article
guest
0 Commentaires
Commentaires en ligne
Afficher tous les commentaires

Ingénierie informatique (SSII)

Applize crée des logiciels métiers pour accompagner les entreprises dans la transition vers le zéro papier.


Avez-vous un projet en tête ? Discutons-en.