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:

  • data container
  • frontal nginx (expose 80, 443)
  • worker php-fpm (expose 9000)
  • db mysql (expose 3306)
  • memcached
  • artisan
  • composer

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
Réponse acceptée

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
Auteur
Réponse acceptée

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

Salut,

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

MacFly
Auteur

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

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
Auteur

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

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
Auteur

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.