Bienvenu sur mon site
Dans ce site vous trouverez mes sites réalisés sur Drupal, un blog dans lequel je mets quelques snippets et pleins d'autres petites choses.
Qui suis je ?
Ines WALLON
32 ans
Développeuse Drupal à temps plein
Autodidacte, Ines a créée sa première page web en 1999 avec un <body bgcolor="red">. Après un bref passages sur quelques CMS (Wordpress, Joomla), elle découvre Drupal 7 en 2014 à l'université de LIlle1. Aujourd'hui elle travaille sur différents projets au sein de Smile.
Blog
Supprimer les configurations d'un module à l'aide d'un hook_uninstall
Placer le hook_unistall dans le fichier .install de votre module
Ajouter des alias à la commande git
Pour ajouter des alias à votre commande git, modifier le fichier .gitconfig qui se trouve à la racine de votre HOMEDIR
et rajouter la section alias. Exemple :
Mise en place d'une architecture Docker + Drupal 8
Sa y est, j'ai enfin franchi le cap. j'ai migré tout mon site sur une architecture full Docker en dev, test et prod.
Je vais vous expliquer dans cet article, comment j'ai réussi à mettre tout ça en place
Mon environement de dev
Depuis que j'ai réinstallé mon poste (sous Fedora), j'ai décidé de travailler exclusivement avec Docker pour des questions de performance, de simplicité et de RAM (même si j'ai 16Go de ram sur mon environnement de dev).
Tout les sites que je développe sont basé sur une version de drupal-composer/drupal-project. dont voici l'exemple d'une hiérarchie

Dans cette hiérarchie, nous allons trouver un fichier docker-composer.yml qui va contenir tous les containers de notre projet :
version: "3.3"
services:
web:
image: libert/drupal_php_apache_dev:php-7.0
labels:
- "traefik.enable=true"
- "traefik.frontend.rule=Host:${DRUPAL_TRAEFIK_FRONTEND_RULE_HOSTNAME:-www.famillewallon.localhost}"
depends_on:
- mysql
- redis
- mail
volumes:
- .:/project
- ./config/php/php.ini:/usr/local/etc/php/php.ini
- ./config/httpd/extra/httpd-vhosts.conf:/etc/apache2/sites-enabled/httpd-vhosts.conf
mysql:
image: mysql:5.7
environment:
MYSQL_USER: drupal
MYSQL_PASSWORD: drupal
MYSQL_DATABASE: drupal
MYSQL_ROOT_PASSWORD: drupal
volumes:
- ./config/mysql:/etc/mysql/conf.d
- ./data/db:/var/lib/mysql
redis:
image: redis:4.0-alpine
volumes:
- ./config/redis/redis.conf:/usr/local/etc/redis/redis.conf
entrypoint:
- docker-entrypoint.sh
- /usr/local/etc/redis/redis.conf
mail:
image: djfarrelly/maildev
labels:
- "traefik.enable=true"
- "traefik.frontend.rule=Host:${DRUPAL_TRAEFIK_MAIL_RULE_HOSTNAME:-mail.famillewallon.localhost}"
- "traefik.port=80"
Ici, nous allons retrouver 4 images
- libert/drupal_php_apache_dev:php-7.0 : Une image apache + PHP 7.0 en mod_php sous debian avec drush, Drupal console et une conf pour reverse proxy Traefik
- mysql:5.7 : Notre serveur MySQL
- redis:4.0-alpine : Un serveur de cache Redis
- djfarrelly/maildev : Un container qui simule une boite mail
Chose assez basique, pour celles et ceux qui travaillent sur Docker
L'environnement de Test et de Prod
L'historique
Historiquement, j'avais 2 containers Lxc, le souci que l'on rencontre généralement dans ce cas là (valable également pour les VMs) :
- Problème de version de PHP entre les différents environnement
- Conf différentes
- Distributions différentes
- Lourdeur des containers Lxc ou VMs
C'est pour toutes ces raisons que je suis partie sur docker dans mes environnements de test et de prod.
Mon Architecture

Pour mes environnements de test et de prod, je me suis basé sur un hyperviseur Proxmox.
Dans le schéma ci dessus, les requêtes web arrive sur un Reverse proxy Nginx "Central" pour renvoyer toutes les requêtes du site de prod et de test sur un reverse proxy Traefik
Le Reverse Proxy Traefik
Le Reverse Proxy Traefik va pouvoir éviter de renseigner un port pour les différentes machines web docker, ainsi on peut démarrer autant de container que l'on veut en même temps
Dans mon cas, il sera externe à mes docker-compose de test et de prod
root@vsrv2:/var/lib/vz/docker/traefik# cat docker-compose.yml
version: '2'
services:
traefik:
image: traefik:1.6-alpine
ports:
- 80:80
network_mode: host
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./traefik.toml:/etc/traefik/traefik.toml
root@vsrv2:/var/lib/vz/docker/traefik# cat traefik.toml
logLevel = "WARNING"
[entryPoints]
[entryPoints.http]
address = ":80"
[docker]
Exemple avec l'environement de Prod
root@vsrv2:/var/lib/vz/docker/site_famillewallon# cat docker-compose.yml
version: "3.3"
services:
web:
image: libert/drupal_php_apache_dev:php-7.0
labels:
- "traefik.enable=true"
- "traefik.frontend.rule=Host:${DRUPAL_TRAEFIK_FRONTEND_RULE_HOSTNAME:-www.famillewallon.com}"
depends_on:
- redis
volumes:
- .:/project
- ./config/php/php.ini:/usr/local/etc/php/php.ini
- ./config/ssmtp/ssmtp.conf:/etc/ssmtp/ssmtp.conf
- ./config/httpd/extra/httpd-vhosts.conf:/etc/apache2/sites-enabled/httpd-vhosts.conf
redis:
image: redis:4.0-alpine
restart: always
volumes:
- ./config/redis/redis.conf:/usr/local/etc/redis/redis.conf
entrypoint:
- docker-entrypoint.sh
- /usr/local/etc/redis/redis.conf
webhook:
image: libert/docker-gitlab-webhook:latest
ports:
- 8081:80
volumes:
- .:/app
- /var/run/docker.sock:/var/run/docker.sock:ro
- /root/.ssh:/root/.ssh
environment:
REPOSITORY: drupal-composer
TOKEN: my_token
BRANCH: master
COMPOSE_PROJECT_NAME: site_famillewallon
POST_SCRIPT: docker-compose exec -T web /project/scripts/update.sh
Ici, nous allons retrouver 3 images
- libert/drupal_php_apache_dev:php-7.0 : Une image apache + PHP7 en mod_php sous debian avec drush, Drupal console et une conf pour reverse proxy Traefik
- redis:4.0-alpine : Un serveur de cache Redis
- libert/docker-gitlab-webhook:latest : Un container qui intègre un webhook gitlab en python pour gérer automatiquement les pulls git et ensuite lancer la commande update.sh (composer install, drush updatedb...) dans mon container web
Pour des raisons de manque de Ram sur mon serveur, Mysql est externalisé sur une VM mutualisé
Et une UI pour gerer les containers ?
Pour gérer mes containers de manière graphique (visualisation des logs , utilisation de la RAM par container...), j'utilise Portainer.io


Et enfin comment démarrer tout ce petit monde au boot du serveur physique
Pour faire démarrer tout ce petit monde au boot, je me suis créée un petit script systemd
[Unit]
Description=%i service with docker compose
Requires=docker.service
After=docker.service
[Service]
Restart=always
WorkingDirectory=/var/lib/vz/docker/%i
# Remove old containers, images and volumes
ExecStartPre=/usr/bin/docker-compose down -v
ExecStartPre=/usr/bin/docker-compose rm -fv
# Compose up
ExecStart=/usr/bin/docker-compose up
# Compose down, remove containers and volumes
ExecStop=/usr/bin/docker-compose down -v
[Install]
WantedBy=multi-user.target
Enfin il me restait plus qu'à démarrer les services et à les activer au boot
Récupérer une liste d'entité custom dans une select box
Comment récupérer une liste d'entité custom dans une select box :
Ici je vais récupérer les informations via la méthode getentity
Supprimer le theme hook suggestion sur certains champs
Quand on fait de l'intégration de thème sur Drupal 8, il est indispensable d'activer de debug Twig, le souci, c'est que parfois, on voudrait désactiver les suggestions pour par exemple, tester une condition.
exemple:
Comment afficher des champs si une checkbox est coché ?
Il peut être intéressant d'afficher des champs supplémentaires si une checkbox est coché dans un formulaire.
Pour ce faire nous allons créer un type checkbox, un type container et en exemple un type url ainsi qu'un textfield :
Automatiser la création d'un site Drupal sur sa machine de dev à l'aide d'Ansible
Il peut être intéréssant de pouvoir créer à la voler des sites Drupal sur sa machine de dev.
Cet article n'a pas pour vocation de vous faire un cours sur Ansible mais de vous montrer un example de ce que j'ai fait pour me faciliter la vie.
https://gitlab.famillewallon.com/ansible-playbook/drupal-site-install
Tout d'abord voici l'arborescence de mon playbook
Entity Staging ou comment importer des contenus sur différents environements
Ce module est encore en développement, mais je lui promet un avenir prométeur
Customisation d'une installation de Drupal 8 via composer (partie 1)
Relancer un hook_update_N sur Drupal 7
Il peut être parfois intéréssant de relancer un hook, surtout quand on à ce genre d'erreur
Base table or view not found: 1146 Table '.image_dimensions' doesn't exist
Via drush, il suffit de télécharger la commande drush-update-rerun et de la placer dans le dossier ~/.drush