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 :
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
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' => '', );
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
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 :
- Ouvrez le fichier
docker-compose.yml
dans votre projet Docker4Drupal. - Recherchez la section correspondant à mariadb puis commenter ou supprimer la.
- Recherchez la section correspondant à
postgres
. Cette section est généralement commentée par défaut. - Décommentez cette section en supprimant le symbole
#
au début de chaque ligne, - Personnalisez le chemin au niveau du volume afin de persister notre base de données.
- 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 fichiersweb/sites/default/settings.php
- 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
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.
Architecte logiciel, Développeur d'application diplomé 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...