Aller au contenu principal
- 26 août 2024

Développer avec DDEV

DDEV logo

Lorsque l'on développe un site web, il est conseillé de travailler en local sur son poste, afin de ne pas partager d'environnement distant avec d'autres. Il est donc nécessaire d'avoir un environnement complet sur sa machine. Bien souvent cela est chronophage car chaque projet a possiblement des pré-requis bien particulier, et on ne peut pas avoir un environnement unique pour tous les types de projets.

La solution la plus populaire aujourd'hui est sans aucun doute Docker, qui permet de créer un environnement à partir d'images fonctionnelles : serveur web, base de données, système de gestion de cache, moteur de recherche, système d'authentification... L'inconvénient est que Docker n'est pas simple à configurer pour obtenir un environnement fonctionnel et performant.

C'est là que DDEV simplifie grandement les choses. Il est capable de gérer les différents containers et images pour nous et de créer ainsi un environnement de travail rapidement sans avoir à entrer dans le détail du paramétrage. De plus DDEV est très simple à installer (https://ddev.readthedocs.io/en/stable/users/install/ddev-installation/), bien documenté (https://ddev.readthedocs.io/en/stable/) et open-source.

Comment ça marche ?

La tendance dans le développement web est d'utiliser des frameworks, que ce soit pour le back-end ou le front-end. Cela permet de gagner du temps en utilisant des briques logicielles existantes sans avoir à réinventer la roue systématiquement. C'est là que DDEV intervient.

Pour créer un environnement web, il suffit de se placer à la racine d'un projet et de lancer la commande ddev config.

DDEV détecte alors où se trouve le dossier du site dans l'arborescence et quel type de projet est utilisé. Notons que DDEV est orienté vers les projets PHP, NodeJS et Python (presque !), mais cela couvre un très large spectre d'applications/sites web, comme Laravel, Symfony, WordPress, Drupal, React... Une fois la configuration faite, tout l'environnement est décrit dans un dossier caché (.ddev) au niveau où la commande à été exécutée. Voilà :)

Tous les fichiers de configuration (YAML, ini, Dockerfile...) sont automatiquement générés. Pour avoir un aperçu des différents services disponibles on dispose de la commande ddev describe. Tous ces services sont personnalisables très facilement en ligne de commande ou bien en éditant directement les différents fichiers. Par exemple, pour utiliser la version 8.3 de PHP, il suffit de lancer la commande ddev config --php-version=8.3. Si l'on souhaite modifier la configuration du PHP, il suffit d'ajouter un fichier .ini dans le dossier .ddev/php.

L'environnement peut être versionné avec les autres fichiers du projets. On dispose d'un fichier .gitignore adapté dans le dossier .ddev. On peut ainsi s'assurer que chaque intervenant sur le projet travaille dans les mêmes conditions.

Quels avantages ?

Système de plugins

DDEV propose un système de plugins permettant d'ajouter tout type de services à l'environnement. Cela peut-être PHPmyadmin, Adminer, Redis, Varnish, etc... La commande ddev get --list permet de lister les plugins supportés officiellement. Il est possible de trouver d'autres plugins, comme par exemple Keycloak (https://github.com/b13/ddev-keycloak), ou bien de créer ses propres services. La vidéo https://www.youtube.com/watch?v=fPVGpKGr0f4 (anglais) explique comment créer son propre plugin.

Synchronisation avec Mutagen

DDEV permet d'utiliser Mutagen pour la synchronisation des fichiers entre les containers et le système de fichiers local. Cela garantit d'excellentes performances, même si la synchronisation n'est pas instantanée. Cela ne pose aucun problème en pratique, bien au contraire. Il est toute fois possible de définir quel type de synchronisation on souhaite utiliser, Mutagen n'est pas non plus obligatoire. Notons que Mutagen a été acquis par Docker Inc.

Intégration aux IDEs

La plupart des IDEs, à l'instar de PHPStorm et VScode, propose des extensions permettant d'intégrer DDEV dans l'interface. Cela permet, entre autre, de lancer des commandes spécifiques ou bien de visualiser les tables d'une base de données (PHPStorm uniquement pour le moment). La connexion aux différents services est automatiquement détectée.

Certificats SSL

Afin de travailler dans un environnement le plus proche possible de celui de production, DDEV génère par défaut un certificat. On a ainsi une adresse locale en HTTPS et un domaine de la forme https://mon-projet.ddev.site. Cela est bien pratique.

Accès aux containers

Avec Docker, il est nécessaire d'exécuter les commandes dans les containers correspondants. Cela est le cas si l'on veut sauvegarder une base de données ou lancer une commande shell. DDEV propose des commandes permettant de ne pas avoir à exécuter docker exec. Cela est pratique, par exemple, avec Composer : en lançant ddev composer install, la commande composer install est exécutée dans le container web automatiquement. De la même façon, on peut lancer des commandes drush (Drupal Shell) directement avec ddev drush.

Gestion des bases de données

DDEV permet une gestion des bases de données très simple : Import, export et snapshot directement accessibles sans avoir à se soucier des containers. On est donc indépendant du moteur de base utilisé. Tous les snapshots sont stockés dans le dossier .ddev (sous forme de binaires) tandis que les exports/imports se font à partir de fichier texte.

Intégration de Xdebug et xhprof

DDEV embarque par défaut les outils Xdebug et xhprof ! Il suffit de les activer en ligne de commande, et tout fonctionne. La documentation est disponible pour le paramétrage des IDEs sur https://ddev.readthedocs.io/en/stable/users/debugging-profiling/step-debugging/ et https://ddev.readthedocs.io/en/stable/users/debugging-profiling/xhprof-profiling/. De nouveau, il est nullement besoin de passer du temps à tout configurer, DDEV s'en occupe pour nous :)

Cloud Ready

DDEV peut aussi s'intégrer aux fournisseurs de cloud type Platform.sh, Pantheon, Lagoon... Cela permet, entre autre, de déployer un site rapidement et directement en ligne de commande depuis une machine local, ou bien de télécharger la base de données et/ou les fichiers statiques. Par exemple avec platform.sh, il est possible de récupérer la base de données de production et de l'importer automatiquement dans le container DDEV local (ddev pull platform --skip-files). 

Système de hooks

DDEV propose un système de hooks permettant ainsi d'intervenir à l'exécution de certaines commandes, par exemple au démarrage ou à l'arrêt d'un projet (ddev start et ddev stop). On pourrait ainsi faire un export automatique de la base de données avant l'arrêt d'un projet. La documentation correspondante est disponible sur https://ddev.readthedocs.io/en/stable/users/configuration/hooks/.

Personnalisation des images

Les images utilisées par DDEV sont particulières et il est déconseillé d'utiliser ses propres images. Si l'on a besoin de packages additionnels pour certaines de ces images, on peut quand même le faire via le fichier de configuration principal (.ddev/config.yaml). La documentation correspondante est disponible sur https://ddev.readthedocs.io/en/stable/users/extend/customizing-images/.

Et ensuite ?

DDEV est une solution de développement local puissante, flexible et performante qui permet de faire abstraction de Docker (tout au moins en grande partie !). On gagne ainsi grandement en efficacité. Donc pourquoi ne pas l'utiliser en production ? Ce n'est pas le but initial, mais cela pourrait être une évolution intéressante : je travaille en local avec le même environnement qu'en production (mêmes images Docker, mêmes ressources...).  On pourrait également imaginer d'avoir une infrastructure type Kubernetes en production, utilisant strictement le même environnement que le local. Techniquement on s'assure que tous les environnements sont ISO, et on bénéficie d'une mise à l'échelle en fonction du trafic grâce à K8. De toutes les manières, DDEV devient indispensable, et son adoption le démontre chaque jour davantage.

Pour suivre le blog dédié à DDEV, c'est sur https://ddev.com/blog/.
 


Tags: Développement web, PHP
Partager :