Docker et phpstorm

Par MacFly, il y a 10 ans


Outils Linux

Salut,

J'ai un environnement de developpement php basé sur docker.

Je suis en train de me mettre a travailler avec les ide Jetbrain et donc PhpStorm.

Voici la liste des conteneurs:

Je suis sous linux, Fedora 23 pour etre plus précis.
Le soucis est que je ne sais absolument pas comment faire fonctionner xdebug par exemple dans ce cas de figure.
Xdebug est pourtant installé dans le conteneur php-fpm.

Merci d'avance à tous ceux qui seront en mesure de m'eclairer.

Bien cordialement,

Cavalor

8 réponses

tleb, il y a 10 ans

Salut,

Tu pourrais nous dire exactement quels containers tu utilisent ? En particulier celui php-fpm ?

MacFly, il y a 10 ans

Yep voila mes containers:
php-fpm

FROM debian:jessie MAINTAINER cavalor <max.cavalor@gmail.com> RUN groupmod -g 1000 www-data && \ usermod -u 1000 www-data RUN apt-get update -y && \ apt-get install -y \ php5-fpm \ php5-curl \ php5-gd \ php5-geoip \ php5-imagick \ php5-imap \ php5-json \ php5-ldap \ php5-mcrypt \ php5-memcache \ php5-memcached \ php5-mongo \ php5-mysqlnd \ php5-pgsql \ php5-redis \ php5-sqlite \ php5-xdebug \ php5-xcache # Configure PHP-FPM RUN sed -i "s/;date.timezone =.*/date.timezone = GMT/" /etc/php5/fpm/php.ini && \ sed -i "s/;cgi.fix_pathinfo=1/cgi.fix_pathinfo=0/" /etc/php5/fpm/php.ini && \ sed -i "s/display_errors = Off/display_errors = stderr/" /etc/php5/fpm/php.ini && \ sed -i "s/upload_max_filesize = 2M/upload_max_filesize = 128M/" /etc/php5/fpm/php.ini && \ sed -i "s/;opcache.enable=0/opcache.enable=1/" /etc/php5/fpm/php.ini && \ sed -i -e "s/;daemonize\s*=\s*yes/daemonize = no/g" /etc/php5/fpm/php-fpm.conf && \ sed -i '/^listen = /clisten = 9000' /etc/php5/fpm/pool.d/www.conf && \ sed -i '/^listen.allowed_clients/c;listen.allowed_clients =' /etc/php5/fpm/pool.d/www.conf && \ sed -i '/^;catch_workers_output/ccatch_workers_output = yes' /etc/php5/fpm/pool.d/www.conf && \ sed -i '/^;env\[TEMP\] = .*/aenv[MYSQL_PORT_3306_TCP_ADDR] = $MYSQL_PORT_3306_TCP_ADDR' /etc/php5/fpm/pool.d/www.conf # Add configuration files ADD php.ini /etc/php5/fpm/conf.d/40-custom.ini EXPOSE 9000 ENTRYPOINT ["/usr/sbin/php5-fpm", "-F"]

avec son fichier de conf

; Enable XDebug zend_extension = xdebug.so ; XDebug configuration xdebug.remote_enable=1 xdebug.profiler_enable=0 xdebug.max_nesting_level = 1000 xdebug.profiler_enable_trigger = 1 xdebug.profiler_output_dir = "/var/log"

artisan

FROM debian:jessie MAINTAINER cavalor <max.cavalor@gmail.com> WORKDIR /tmp RUN groupmod -g 1000 www-data && \ usermod -u 1000 www-data RUN apt-get update -y && \ apt-get install -y \ php5-cli \ php5-mcrypt \ php5-mongo \ php5-mssql \ php5-mysqlnd \ php5-pgsql \ php5-redis \ php5-sqlite \ php5-gd WORKDIR /var/www/row.sh ENTRYPOINT ["php", "artisan"] CMD ["--help"]

composer

FROM debian:jessie MAINTAINER cavalor <max.cavalor@gmail.com> WORKDIR /tmp RUN groupmod -g 1000 www-data && \ usermod -u 1000 www-data RUN apt-get update -y && \ apt-get install -y \ curl \ wget \ php5-cli \ php5-mcrypt \ php5-fpm \ php5-curl RUN curl -sS https://getcomposer.org/installer | php && \ mv composer.phar /usr/local/bin/composer && \ composer self-update RUN mkdir /var/www && \ chgrp www-data /var/www WORKDIR /var/www/row.sh USER www-data ENTRYPOINT ["composer"] CMD ["--help"]

Et pour info j'utilise docker-compose pour orchestrer tout ca

tleb, il y a 10 ans

En théorie, il suffit "d'ouvrir" le port (rediriger le port x interne vers le port x externe, plus précisément) qu'utilise xdebug sur le container et se connecter avec ton client là dessus.

MacFly, il y a 10 ans

Bonjour

@tleb, oui je suis d'accord avec cette idée, cela me semble juste, il faut que j'arrive a mettre ça en place dans la configuration de PhpStorm.

Je rajoute le docker-compose afin de vous aider a compredndre la chose. Merci en tous cas pour le coup de main

### # xxx build ### # app data containers data_app: image: busybox volumes: - /home/max/Sites/app_dir:/var/www/app_dir # mysql data container data_mysql: image: busybox volumes: - /home/max/Docker/dev/data_mysql:/var/lib/mysql # mysql server mysql: image: mysql ports: - 3306:3306 environment: - MYSQL_ROOT_PASSWORD=xxx - MYSQL_DATABASE=xxx - MYSQL_USER=xxx - MYSQL_PASSWORD=xxx volumes_from: - data_mysql # memcached memcached: image: memcached ports: - 11211:11211 # php-fpm worker php: build: docker/php-fpm ports: - 9000:9000 links: - mysql:mysql - memcached:memcached volumes_from: - data_app # nginx web server nginx: build: docker/nginx ports: - 80:80 - 443:443 links: - php:php volumes_from: - data_app # laravel artisan artisan: build: docker/artisan links: - mysql:mysql - memcached:memcached volumes_from: - data_app # composer composer: build: docker/composer volumes_from: - data_app

Bien cordialement,

Cavalor

tleb, il y a 10 ans

Il suffit d'ajouter un port dans le container php-fpm, celui de xdebug, comme celui déjà présent (normalement, je ne voit pas jusqu'à là, le visionneur de code n'étant pas adapté au mobile).

MacFly, il y a 10 ans

J'ai réglé le problème, en fait je faisait le mapping entre le port 9000 de mon conteneur php-fpm et celui de ma machine hote.
Il a suffit que je retire ce mapping et xdebug demare comme souhaité.
Merci tout de même pour ton temps et ta contribution @tleb

tleb, il y a 10 ans

il faut que j'arrive a mettre ça en place dans la configuration de PhpStorm

On peut rien faire pour t'aider là. Il suffit que tu récupères l'IP que docker te donne et tu la rentres dans la config de PhpStorm, dans la section xdebug.

Oublie pas d'EXPOSE le port de xdebug dans ton container php-fpm et d'ajouter le port dans le docker-compose.

MacFly, il y a 10 ans

Justement c’était parce que le port était mappé dans mon docker-composer que cela ne fonctionnait pas ;)
Il suffit de configurer PhpStorm en lui donnant le point d'entrée du serveur, cad le frontal nginx.