DG devGiants tech notes

15 février 2018

Présentation des stacks Docker

Cet article présente la stack que j’ai créée pour mon travail quotidien autour de Symfony et Wordpress.

Mes objectifs

Docker était l’une de ces choses dans lesquelles je voulais me lancer depuis un moment, sans forcément avoir le temps de m’y plonger. J’ai finalement pris le train en marche et, même si je reste plus proche du padawan que du guru, j’ai pu construire 2 stacks que je présente ci-dessous : une pour Symfony, et une autre pour Wordpress.

Les deux sont de nouveaux boilerplates utilisés pour tous les nouveaux projets, qu’ils soient @LCH ou personnels.

Stack Symfony

Symfony stack

Elle permet d’installer un environnement de travail complet pour Symfony 2.X ou 3.X. Symfony Flex (utilisable à partir de 3.4+) n’est pas inclus ici, nous avons créé une branche spécifique pour la 4.X. Vous y trouvez 4 containers :

  • mysql
  • php
  • apache
  • phpmyadmin

Voici les spécificités importantes.

Variables d’environnement

Toutes les variables nécessaires au docker-compose.yml sont stockées dans un fichier .env (documentation Docker ici). Ce fichier .env est aussi défini à l’intérieur des containers pour exposer les variables d’environnement nécessaires. Pour cela, il suffit de passer le fichier .env via l’option env_file (documentation ici).

Cela donne la possibilité intéressante de les utiliser dans les fichiers ajoutés au container (comme le app.conf qui définit le vhost de l’application en utilisant $FPM_HOST). Vous pouvez faire la même chose directement dans le Dockerfile.

Note importante : pour cela, il faut simplement les déclarer explicitement avec le mot-clé ARG (exemple).

Volumes

J’y crée 3 volumes :

Restez à l’écoute pour un article dédié aux volumes.

Start bash

Pour faciliter le démarrage, j’ai créé un fichier bash qui exécute les actions suivantes :

  1. Création des dossiers des volumes (s’ils n’existent pas déjà)
  2. Téléchargement et installation du Symfony installer (si la commande symfony n’est pas encore enregistrée)
  3. Installation de Symfony en utilisant le numéro de version spécifié dans le fichier .env
  4. Copie du fichier .env pour permettre à l’application Symfony d’accéder à ses variables (décrit ici et ici)
  5. Copie du fichier parameters.yml.dist et substitution des paramètres avec la commande envsubst. Note : j’ai choisi de ne pas utiliser le DotEnv component afin de garantir une rétro-compatibilité totale avec 2.X et 3.4-.
  6. Installation de docker-compose s’il n’est pas déjà présent et enregistré sous le nom docker-compose
  7. Mise en route des containers (avec build)
  8. Suppression du fichier parameters.yml pour forcer sa régénération (j’ai rencontré ce cas lors de mes tests, où un composer update ne rafraîchit pas le fichier parameters.yml)
  9. composer update

Stack Wordpress

Wordpress stack

La stack Wordpress fait la même chose qu’au-dessus, avec en plus WP-CLI. Je l’ai mise en place en utilisant le fichier de configuration YAML pour exécuter les commandes à vide, sans arguments (puisqu’ils sont spécifiés dans le fichier).

Les actions intéressantes du script bash : téléchargement de la dernière version du core, installation, configuration, création du premier utilisateur, suppression de Hello Dolly (RIP) et des pages/articles de test, configuration des permaliens en %postname%.

Enfin, le script installe et configure un thème Sage prêt à l’emploi (version 8.5.3, avec gulp/bower/npm).

Et ensuite ?

Ce n’est qu’un début. Plusieurs fonctionnalités notables seront ajoutées par la suite.

Pour les deux

  • Elastic stack integration
  • Test addition

Pour la stack Symfony

  • Continue Symfony 4 branch
  • Add Webpack Encore for assets management
  • Add Angular for front boilerplate

Pour la stack Wordpress

  • ACF Pro setup