
Outils que nous utilisons au travail - partie 2 - Docker
Dans le premier article sur les outils que nous utilisons, nous avons décrit nos outils de gestion de projet et de communication. Aujourd'hui, nous vous montrerons comment nous gérons les environnements de développement.
Copie locale
Chez Droptica, chaque programmeur travaille sur une copie locale du site web. Chaque tâche est complétée et engagée dans une branche Git séparée et poussée vers un dépôt distant.
Notre système de bureau standard est Ubuntu, donc pendant longtemps nous nous sommes contentés d'installer Apache, Mysql et PHP localement. La plupart du temps, cela suffit pour configurer et travailler efficacement sur un projet. Cependant, avec le temps, les projets sur lesquels nous travaillons deviennent de plus en plus complexes et nécessitent des logiciels et services supplémentaires pour fonctionner (par exemple, Apache Solr, Elasticsearch, Memcache, Redis, ffmpeg convertis, etc.). PHP7 est sorti et avec lui la nécessité d'exécuter certains projets sur PHP7 tandis que d'autres sont encore sur PHP5. Tout ceci a rendu plus difficile le travail sur plusieurs projets en même temps.
Docker
Docker nous a aidés à résoudre ce problème. En un mot, Docker vous permet d'exécuter des services et des applications dans des conteneurs isolés. Par exemple, vous pouvez faire fonctionner simultanément Apache avec PHP7 et PHP5 dans deux conteneurs pour le même projet ou avoir deux versions différentes de Mysql. Chaque projet a son propre environnement encapsulé dans des conteneurs et un développeur peut avoir plusieurs projets en cours localement sans interférence.
Aussi génial que soit Docker, il n'est cependant pas très convivial. Il est opéré depuis la ligne de commande et vous oblige à taper de longues commandes, difficiles à structurer, pour configurer des environnements plus complexes. Pour pallier cela, nous utilisons docker-compose qui vous permet de déclarer les conteneurs et leur configuration dans un fichier YML.
C'était déjà excellent, mais nous avons toujours rencontré des inconvénients. C'est formidable de configurer Apache, Mysql et PHP dans des conteneurs liés, mais comment y accéder et travailler avec ? Il n'y a pas de drush, il peut y avoir d'autres outils que vous pourriez vouloir utiliser comme fabric, compass, gulp et autres, qui ne devraient pas vraiment être installés dans vos images de production. Pour gérer cela, nous avons créé Docker-Drupal - une application écrite en Python qui nous aide dans le développement. Après l'installation, vous avez accès à une commande docker-drupal. Cette commande utilise notre image docker de 'développement' qui s'attache à l'environnement et peut exécuter des commandes pour vous. Cette image a par défaut drush installé et quelques autres éléments. Selon le projet, nous ajoutons souvent des éléments supplémentaires. L'application docker-drupal est facilement extensible. Vous pouvez ajouter vos propres commandes et actions. Par exemple, vous pourriez écrire une fonction qui importera deux bases de données, exécutera un script de migration, activera quelques modules et reconstruira les index de l'API de recherche.
Depuis l'introduction de docker-drupal, commencer un nouveau projet chez Droptica nécessite généralement de cloner le dépôt et d'exécuter "drocker-drupal up && drocker-drupal build" et après quelques minutes, un nouveau site web pleinement fonctionnel est disponible pour le développeur dans un environnement identique à celui de la production avec tous les services dans les mêmes versions. Docker-drupal a été écrit par nos membres de l'équipe Tomasz Wodzikowski et Damian Sikora. La démonstration sous forme de vidéo est disponible sur YouTube.
Résumé
Docker et certains de ses plugins sont parmi nos outils les plus basiques. Lorsqu'il s'agit de développement Drupal, nous n'avons pas besoin d'utiliser d'autres moyens pour préparer l'environnement serveur. À mon avis, c'est une solution excellente et flexible. Annuellement, cela nous fait économiser de nombreuses heures de travail.