Debugger avec PhpStorm et Symfony dans une image Docker

Configuration de PHP/Docker

Si vous développez sous Symfony, installé dans un docker compose et que vous n’utilisez pas encore le debugger, alors cet article est fait pour vous. Nous allons vous montrer comment préparer votre environnement pour ne plus avoir à faire de dd() ni de var_dump. Une fois que vous aurez goûté aux joies du debugger vous ne pourrez plus vous en passer tellement vous allez gagner en confort.

Pour cet article vous devez avoir une app Symfony propulsée avec apache/php (ou bien nginx et fpm, peu importe) avec un fichier docker-compose.yml

La première étape consiste à installer xdebug et configurer votre environnement PHP. Si ce n’est pas déjà fait, voici les éléments que vous devrez avoir installés dans votre Dockerfile.

RUN pecl install xdebug-3.1.6 && docker-php-ext-enable  xdebug;

A noter que si vous utilisez PHP 8.1 vous devrez installer la version 3.2.0

RUN pecl install xdebug-3.2.0 && docker-php-ext-enable  xdebug;

Personnellement je configure mon php.ini directement en copiant le fichier depuis le build du Dockerfile.

COPY php.ini /usr/local/etc/php/conf.d/app.ini

Voici son contenu, libre à vous de l’installer comme vous le désirez.

; conf/php.ini
date.timezone = Europe/Paris

opcache.enable = 1
opcache.enable_cli = 1
opcache.memory_consumption = 256
opcache.max_accelerated_files=20000
opcache.revalidate_freq = 0

upload_max_filesize = 16M
post_max_size = 16M

realpath_cache_size = 4096k
realpath_cache_ttl=600

display_errors = Off
display_startup_errors = Off
max_execution_time=5000
memory_limit = -1

xdebug.mode=debug,develop,trace
xdebug.idekey=docker
xdebug.start_with_request=yes
xdebug.log=/dev/stdout
xdebug.log_level=0
xdebug.client_port=9003
xdebug.client_host=host.docker.internal

Notez toute la partie xdebug du fichier. C’est important pour le bon fonctionnement de la suite de cet article. Le mode nous permet de dire à xdebug les options dont nous avons besoin.

develop : Vous permettra d’obtenir un var_dump amélioré dans votre application mais aussi un complément d’informations concernant les warning, notices. Plus d’info ici : https://xdebug.org/docs/develop

debug : Vous permettra d’utiliser le step debug, mettre des points d’arrêts et d’aller de ligne en ligne.

trace : Enregistre l’ensemble des appels de fonctions, les assignations de variables…tout ! C’est gourmand mais peu importe.

idekey : Est la cléf qui est envoyée par xdebug pour dire à PhpStorm ‘hey, je suis en debug de cette application, utilise moi !

client_port : Le port sur lequel est envoyé la socket de connection de notre session de debug.

client_host : C’est l’ip sur laquelle envoyer notre connection pour l’initialisation de notre session de debug. Nous utilisons Docker donc nous allons spécifier comment sortir de notre environnement docker pour attaquer le host sur notre machine Linux.

Une fois que votre docker est ok vous devriez avoir ceci dans votre environnement PHP :

image-36
image-37

Voici un exemple de docker-compose :

version: "3.8"
services:
  php-7.3:
    image: 'devpartitech/php:7.3-apache'
    ports:
      - "80:80"
    volumes:
      - "./:/var/www/"
    extra_hosts:
      - host.docker.internal:host-gateway

Ne passez pas à la suite tant que cette étape n’est pas validée.

Configuration de PhpStorm

Bien ! Nous avons notre environnement Docker d’installé avec une page Symfony. Nous allons configurer PhpStorm pour qu’il puisse recevoir la session de debug.

Ouvrez les settings de PhpStorm.

image-38

Si se n’est pas encore fait, installez le plugin Symfony.

Sous le menu PHP vous avez les menus Debug.

image-39

Dans le premier menu spécifiez à votre IDE qu’il doit écouter le port 9003. Vous pouvez changer le port si vous le désirez mais il faudra qu’il soit spécifié également dans le php.ini.

image-40

Sous le menu Templates mettez le lien vers le répertoire var/cache de Symfony. Ne mettez pas le path qu’il y a dans votre conteneur. Il s’agit ici du path sur votre disque à vous (votre machine, pour ma part ubuntu). Sans cela l’IDE ne sera pas capable d’utiliser des points d’arrêts dans vos templates TWIG.

Sous le menu DBGp Proxi :

image-43

Rappelez vous, l’ide key, et le port de tout à l’heure.

Sous le menu Servers, créez un nouveau serveur en cliquant sur le « + »

image-44
image-45

Une foi votre serveur web spécifié nous pouvons enfin tester le debugger de PhpStorm !

Pour tester vous pouvez aller dans n’importe quel Controller et template et y mettre des points d’arrêts. Pour cela cliquez dans la marge (là ou vous avez les numéros de ligne).

image-46

Cliquez sur le petit « bug » en haut de votre IDE

image-47

Il devrait passer en mode « écoute »

image-48

Rafraîchissez votre page web et vous devriez avoir accès aux options de debug 🙂

image-49
image-51

Et voilà !