Maison >développement back-end >tutoriel php >Obtenez XDebug en travaillant avec Docker et PHP 8,4 en une minute
xdebug a une histoire d'avoir une courbe d'apprentissage de configuration abrupte. Je suis ici pour vous montrer que la configuration de Xdebug n'a pas à être douloureuse. En fait, je suis convaincu que vous pouvez commencer à utiliser xdebug avec docker dans environ une minute.
ok, peut-être que cela prendra certains d'entre vous quelques minutes :)
Nous allons démontrer la configuration avec Laravel, PHP 8.4 et Xdebug V3.4.0, les dernières versions stables au moment de la rédaction.
L'essentiel de ce dont nous avons besoin pour faire configurer XDebug avec une image Docker comprend:
compose.yaml
pour démarrer le conteneur Dans cet article, nous allons utiliser Apache pour simplifier la configuration du serveur; Cependant, le code DockerFile est identique à la configuration de XDebug dans une image PHP-FPM.
Nous commencerons par configurer un projet de démonstration si vous souhaitez suivre:
<!-- Syntax highlighted by torchlight.dev -->laravel new xdebug-demo --git --no-interaction cd xdebug-demo mkdir -p build/php/conf.d build/apache touch compose.yaml \ build/Dockerfile \ build/php/conf.d/xdebug.ini \ build/apache/vhost.conf
Nous avons créé des dossiers et des fichiers pour notre configuration via la ligne de commande, mais n'hésitez pas à les fabriquer comme vous le souhaitez. En plus des fichiers docker typiques, nous avons créé un fichier vhost.conf
pour configurer le chemin de la racine Web vers notre application.
Ensuite, ajoutez ce qui suit à votre fichier build/Dockerfile
:
<!-- Syntax highlighted by torchlight.dev -->FROM php:8.4-apache as base LABEL maintainer="Paul Redmond" RUN docker-php-ext-install pdo_mysql opcache && \ a2enmod rewrite negotiation COPY build/apache/vhost.conf /etc/apache2/sites-available/000-default.conf FROM base as development RUN cp $PHP_INI_DIR/php.ini-development $PHP_INI_DIR/php.ini COPY build/php/conf.d/xdebug.ini $PHP_INI_DIR/conf.d/xdebug.ini RUN pecl channel-update pecl.php.net && \ pecl install xdebug-3.4.0 && \ docker-php-ext-enable xdebug FROM base as app RUN cp $PHP_INI_DIR/php.ini-production $PHP_INI_DIR/php.ini COPY . /srv/app
Le dockerfile a pas mal de lignes, alors passons en revue le code le plus important pour vous aider à comprendre comment configurer XDebug. Tout d'abord, nous utilisons des versions multi-étages afin que nous puissions configurer XDebug dans les environnements de développement. Avant l'étape development
est l'étape base
, qui a la configuration de la fondation dont nos besoins en image tels que les extensions PHP que nous voulons dans n'importe quel environnement et configurer Apache.
Ensuite, le stade development
copie la version de développement du fichier php.ini, copie la configuration xdebug.ini
qui conservera nos personnalisations que nous effectuons à xdebug. Nous utilisons v3.4.0
qui prend en charge pour PHP 8.4 et est la dernière stable au moment de la rédaction.
Enfin, nous avons une étape app
, c'est ce que notre image d'application utiliserait dans les builds de production. L'utilisation de la cible app
omet la configuration de XDebug et utilise la version de production du fichier php.ini.
Nous ne sommes pas ici pour apprendre à configurer Apache, nous voulons simplement l'utiliser pour démontrer rapidement à quel point il est facile de configurer XDebug dans Docker. Ajoutez simplement le code suivant au fichier build/apache/vhost.conf
, qui est copié dans l'image docker pour pointer vers le code d'application:
<!-- Syntax highlighted by torchlight.dev --><VirtualHost *:80> ServerAdmin webmaster@localhost DocumentRoot /srv/app/public <Directory "/srv/app/public"> AllowOverride all Require all granted </Directory> ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost>
Ensuite, nous devons configurer XDebug via le fichier xdebug.ini
que nous avons créé. Ajoutez ce qui suit à ce fichier si vous suivez:
<!-- Syntax highlighted by torchlight.dev -->laravel new xdebug-demo --git --no-interaction cd xdebug-demo mkdir -p build/php/conf.d build/apache touch compose.yaml \ build/Dockerfile \ build/php/conf.d/xdebug.ini \ build/apache/vhost.conf
Nos personnalisations sont nécessaires pour définir l'hôte client. Puisque nous utilisons un réseau Docker, XDebug doit savoir comment communiquer avec notre machine hôte. Si vous utilisez Docker Desktop, Docker a un host.docker.internal
hôte qui pointe vers votre ordinateur hôte.
Sinon, vous devrez trouver la propriété intellectuelle du réseau local de votre ordinateur et l'utiliser. Nous pourrions alimenter cette valeur avec une variable d'environnement, mais je vais économiser cela pour un futur message.
Enfin, nous utilisons xdebug.start_with_request = yes
pour toujours démarrer XDebug à chaque demande. Nous pouvons désactiver XDebug en utilisant l'interface utilisateur de notre éditeur lorsque nous ne voulons pas utiliser xdebug, mais il tentera toujours d'établir une connexion.
Avant de vérifier une connexion xdebug, nous devons configurer notre conteneur d'application. Nous utiliserons Docker Compose pour exécuter notre application avec Docker en ajoutant ce qui suit à compose.yaml
:
<!-- Syntax highlighted by torchlight.dev -->FROM php:8.4-apache as base LABEL maintainer="Paul Redmond" RUN docker-php-ext-install pdo_mysql opcache && \ a2enmod rewrite negotiation COPY build/apache/vhost.conf /etc/apache2/sites-available/000-default.conf FROM base as development RUN cp $PHP_INI_DIR/php.ini-development $PHP_INI_DIR/php.ini COPY build/php/conf.d/xdebug.ini $PHP_INI_DIR/conf.d/xdebug.ini RUN pecl channel-update pecl.php.net && \ pecl install xdebug-3.4.0 && \ docker-php-ext-enable xdebug FROM base as app RUN cp $PHP_INI_DIR/php.ini-production $PHP_INI_DIR/php.ini COPY . /srv/app
Notre service app
cible la stade development
de notre construction, monte un volume afin que nous puissions modifier notre code sans reconstruire l'image et utilise le port 8080
pour servir l'application localement.
Nous pouvons maintenant construire et démarrer notre image à l'aide de Docker Compose:
<!-- Syntax highlighted by torchlight.dev --><VirtualHost *:80> ServerAdmin webmaster@localhost DocumentRoot /srv/app/public <Directory "/srv/app/public"> AllowOverride all Require all granted </Directory> ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost>
La commande précédente créera l'image, démarrera le conteneur et l'exécutera en arrière-plan. À ce stade, XDebug est prêt à recevoir des connexions, cependant, nous devons modifier une chose dans notre IDE pour le faire fonctionner.
Nous utiliserons PHPSTorm, mais vous pouvez utiliser n'importe quel éditeur que vous souhaitez qui prend en charge XDebug. Puisque nous utilisons Docker, nous devons configurer un serveur dans PHPSTorm qui mappe notre volume Docker vers notre code de projet local. Vous pouvez le faire en ouvrant les paramètres & gt; Php & gt; Serveurs et configuration d'un serveur localhost avec un mappage de /srv/app
:
Si vous n'avez pas de serveur localhost, vous pouvez en ajouter un à partir de cette page de paramètres à l'aide du port 8080
et de la sélection du débogueur Xdebug
. Le mappage du serveur permet à notre IDE de comprendre comment cartographier la trace de la pile du serveur aux fichiers du projet.
Ensuite, nous sommes prêts à activer XDebug en utilisant l'icône de bogue près du menu supérieur droit qui dit "Commencez à écouter les connexions de débogage PHP" lorsque vous en survolez:
Lorsque vous cliquez dessus, vous devriez voir l'icône devenir verte.
La dernière chose que nous devons faire est de définir un point d'arrêt. Ouvrez le fichier routes/web.php
et définissez un point d'arrêt sur la seule ligne de l'itinéraire de la page d'accueil:
Si vous ouvrez votre projet dans un navigateur Web (LocalHost: 8080), PHPStorm doit vous inviter à connecter la première fois. Après cela, il s'arrêtera automatiquement sur tous les points d'arrêt que vous définissez. Une fois le débogage terminé, vous pouvez cliquer sur l'icône de bogue pour désactiver les connexions xdebug.
Continuez dans la partie 2 de ce tutoriel: images Docker flexibles avec des variables d'environnement PHP II.
Vous devriez maintenant pouvoir utiliser XDebug avec votre projet! Je vous ai également montré un sujet de bonus - en utilisant des images en plusieurs étapes pour configurer des outils de développement et une étape distincte pour les paramètres de production. L'utilisation de versions multiples peut amener vos images à un autre niveau de flexibilité.
Si vous êtes coincé sur la partie éditeur de la configuration de XDebug, PHPStorm propose une documentation approfondie sur la façon de configurer XDebug. La documentation de Xdebug est une autre excellente référence, y compris les documents sur la configuration, les outils, les options de configuration, etc.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!