Développement
Démarrage avec Directus 7 et Docker (Nginx, PHP & MySQL)
Modifié 28 mars 2020 : Avec la sortie de Directus 8, il y a eu beaucoup de progrès au niveau de l'expérience Dev. Vous pouvez maintenant utiliser l'image Docker officielle avec docker-compose pour démarrer en quelques secondes 💪.
—
J'ai récemment voulu essayer le très prometteur Directus 7, un CMS Headless (Content Management System, headless signifiant qu'il crée une API pour travailler avec des applications à page unique) sur PHP, sans doute mieux expliqué sur la dans la documentation.
Pour commencer, j'ai jeté un coup d'œil à la documentation, soit dit en pensant très bien écrite, qui indique que la meilleure façon est d'effectuer un git clone et de configurer un serveur Web Apache et une base de données MySQL en local pour l'essayer. 🤔
Ne pas vouloir l'installer localement (parce que... eh bien, qui fait encore cela? Les environnements locaux sont les choses les moins reproductibles, tout le monde n'a pas le même OS, la même version d'OS, les mêmes paquets installés, etc.), je me suis tourné vers mon meilleur ami en matière de développement : Docker ! 🐳 et j'ai finalement décidé d'écrire cet article pour venir en aide à mes amies développeuses et développeurs dans cette démarche.
Notre objectif :
- Effectuer la configuration d'un conteneur docker PHP capable d'exécuter la dernière version de Directus
- Configurer un conteneur docker hébergeant une base de données MySQL à utiliser avec Directus.
- Les faire fonctionner ensemble et nous laisser l'essayer
Conditions requises pour atteindre cet objectif :
- Docker: https://www.docker.com/get-started
- Git : https://git-scm.com/
TL; PR : Pour trouver le résultat de cet article. Obtenez-le et exécutez les instructions de Start stuff pour essayer Directus 7 dans Docker 🙂 ...
Configurer un conteneur docker PHP capable de faire tourner la dernière version de Directus.
Je dois dire que mon stack préféré n'inclut pas Apache, je préfère de loin Nginx avec FPM, c'est donc ce que cet exemple va présenter.
Tout d'abord, créons un dossier pour notre expérience : mkdir directus-test/
A l'intérieur de ce dossier (cd directus-test/
), créons un Dockerfile
et commençons par une image qui nous sera bien utile :
FROM wyveo/nginx-php-fpm:latest
Ensuite, installons une configuration NGINX très simple nous permettant de servir le code Directus :
COPY default_nginx_conf /etc/nginx/conf.d/default.conf
La configuration de default_nginx_conf
est la suivante :
server {
listen 80; root /app/public/;
index index.php index.html index.htm;
server_name _;
location / {
try_files $uri $uri/ /index.php;
}
# pass the PHP scripts to FastCGI server
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/run/php/php7.3-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
Ainsi, une configuration NGINX très simple cherche unindex.php
dans le dossier /app/public
de notre conteneur, et transmet les requêtes vers un fichier *.php à PHP-FPM via un socket (/run/php/php7.3-fpm.sock
) qui est déjà installé dans le conteneur.
Il nous manque juste le code Directus!
Comme il est conseillé dans la documentation, allons le chercher sur Github :
Git clone https://github.com/directus/directus.git
Construisons notre conteneur!
docker build -t directus_img .
Configurer un conteneur docker hébergeant une base de données MySQL à utiliser avec Directus
Vous savez quoi? Je me sens paresseux et je préférerais passer mon temps à essayer cette foutue chose, alors récupérons simplement une image depuis le hub de Docker!
Par exemple, l'image MySQL par défaut n'est pas mal du tout !
Les faire fonctionner ensemble pour qu’on puisse l'essayer!
Lançons les deux conteneurs et assurons-nous qu'ils peuvent interagir entre eux grâce à un réseau Docker:
docker network create directus_test_network
Ensuite, exécutons (run) notre conteneur PHP et donnons-lui accès au code directus :
docker run -dit --name directus_php --network directus_test_network -p 8000:80 -v "$(pwd)/directus/":/app/ --rm directus_img
Au cas où vous ne seriez pas familier avec docker, les options nous permettent de :
directus_img
est l'image que nous avons construite juste avant, incluant tout ce dont nous avons besoin.-d
détache le processus de la ligne de commande, c'est-à-dire que votre bash n'est pas «coincé» dans le processus.-i
maintient le shell interactif même s'il est détaché, ce qui signifie que vous pouvez toujours interagir avec le conteneur.-t
alloue un pseudo-TTY--name
nomme le conteneur afin que nous puissions le trouver facilement avec docker ps plus tard, ou pour interagir avec lui--network
spécifie que le conteneur doit être disponible dans le réseau créé juste avant.-p
nous permet de lier les ports du conteneur (80
: le port web par défaut) à un port de l'hôte (votre machine), ici le8000
, ce qui vous permet d'aller surlocalhost:8000
et de voir ce que le conteneur sert sur son port80
-v
montage d'un volume (ici :$(pwd)/directus/
,$(pwd)
étant le dossier courant) comme un dossier dans le conteneur (/app/
)--rm
supprime automatiquement le conteneur lorsqu'il sort.
Le fait que directus_img
soit à la toute fin de la commande n'est PAS dû au fait qu'il est lié à --rm
, mais simplement parce qu'il est nécessaire de passer toutes les options à docker run
avant de spécifier l'image à exécuter.
Ensuite, exécutons notre conteneur MySQL :
docker run -d --name directus_mysql --network directus_test_network -p 3306:3306 -e MYSQL_DATABASE=directus -e MYSQL_ROOT_PASSWORD=root -v data:"$(pwd)/data" --rm mysql:5.7
La seule nouveauté ici est l'option -e
, qui vous permet de passer une variable d'environnement au conteneur.
Vous pouvez voir ici que nous avons également lié le port 3306
sur l'hôte... Pourquoi? Cela vous permet de vous connecter à votre outil SQL Manager préféré à la BD sur localhost:3306
et de parcourir vos données si nécessaire.
Nous pouvons voir que nos conteneurs fonctionnent grâce à docker ps
, ce qui devrait vous donner quelque chose comme ceci :
Vous pouvez maintenant configurer directus
La première étape consiste à choisir votre nom d'utilisateur et votre mot de passe :
Ensuite, il faut spécifier les informations d'identification et les paramètres de la base de données
Les seuls paramètres à modifier ici sont
- L’
hôte
, qui seradirectus_mysql
- L’
utilisateur
et lemot de passe
:root
etroot
C'est là que nous voyons l'influence d'avoir les deux conteneurs dans le même réseau. En effet, les avoir dans le même réseau les rend « conscients » les uns des autres, donnant l’accès au conteneur MySQL au conteneur PHP sur le « nom d'hôte » directus_php
et donnant au conteneur PHP accès à celui de MySQL sur directus_mysql
.
Le réseau docker avec le pilote par défaut inclut en fait un résolveur DNS de sorte que le nslookup effectué pour résoudre l'IP à partir des noms d'hôtes (par exemple, directus_mysql
) trouve l'autre conteneur dans le même sous-ensemble basé sur le même nom de conteneur.
Soumettez le formulaire de connexion avec les informations d'identification et BOOM! Vous êtes en ligne!
Vous pouvez maintenant accéder aux paramètres d'administration
en bas à gauche de l'écran et commencer à créer vos collections, etc. 🚀
Je dois dire qu'après cela, Directus procure un sentiment formidable, tout est relativement fluide avec seulement quelques accrocs, comme certains boutons qui ne fonctionnent pas, mais vous l'avez compris, c'est constamment en évolution :).
Pour accéder à tout ce code et plus jetez un coup d'oeil : directusdockergetting_started
Si vous avez des questions ou commentaires quelconques n'hésitez pas à nous joindre!
Cet article vous a donné des idées ? Nous serions ravis de travailler avec vous ! Contactez-nous et découvrons ce que nous pouvons faire ensemble.