Configurar Xdebug con Devilbox (Docker) y PhpStorm

Xdebug es quizás la herramienta de debug para PHP más conocida y completa, pero su configuración según el entorno y editor/IDE que usemos puede variar y por supuesto la versión de Xdebug que usemos.

Yo personalmente, utilizo mucho Devilbox para levantar un servidor local y poder trabajar ya que es sencillo, utiliza Docker y es muy personalizable. Pero la integración con Xdebug no es tan directa, ya que los puertos de cada servicio cambian a veces por ejemplo, por usar Docker hay que configurar ciertos parámetros que si no lo usamos no harían falta, etc.

Aún así en la propia documentación nos explican los pasos, que junto con alguna búsqueda de algún detalle que quedaba suelto pude integrarlo perfectamente (documentación de Devilbox al respecto)

Esta entrada la usaré a modo de chuleta personal mía para cuando tenga que configurarme esto de nuevo y lo pongo aquí por si a alguien le puede servir.

Configuración de Devilbox

Lo primero es tener Devilbox ejecutándose con los contenedores php, httpd y bind

Hay que copiar cfg/php-ini-[PHP-version]/devilbox-php.ini-xdebug a cfg/php-ini-[PHP-version]/xdebug.ini

  • Sustituye [PHP-version] por la versión de PHP que estés ejecutando
  • Debe contener las líneas (algunas líneas son específicas de Xdebug V2 y no se usan para la V3 pero no son incompatibles)
[PHP]
xdebug.default_enable   = On
xdebug.profiler_enable  = On
xdebug.remote_enable    = On
xdebug.remote_autostart = On
xdebug.remote_handler   = dbgp
xdebug.remote_port      = 9000
xdebug.idekey           = PHPSTORM
xdebug.remote_log       = /var/log/php/xdebug.log
xdebug.mode="debug" ;v3 only
xdebug.client_host=172.16.238.1 ;v3 only
xdebug.client_port=9000 ;v3 only
xdebug.log="/var/log/php/xdebug.log" ;v3 only
xdebug.start_with_request=yes
xdebug.remote_connect_back=1 ;v3 only

Configuración PhpStorm

Iremos revisando paso a paso las opciones de PhpStorm que debemos revisar y configurar

  • Settings > PHP > Servers
    • host: localhost, port: 80, Debugger: Xdebug
    • setear el “absolute path on the server” al htdocs dentro del contenedor de PHP (debemos mapear nuestro directorio de proyecto con el mismo directorio de proyecto con la ruta dentro del contenedor)
  • Settings > PHP. Debemos tener valores en
    • Language Level (selecciona versión de PHP en uso)
    • CLI Interpreter (selecciona entre las opciones que reconoce PhpStorm dentro de devilbox)
      • Si no te sale ninguna, pulsa los tres puntos al final del campo para configurarlo
      • Añades un nuevo intérprete con el «+» y eliges «From Docker, Vagrant, VM…»
      • En las opciones deja marcado «Docker» y en «Image name» seleccionas la imagen de Devilbox para PHP con la versión que estás usando
  • Settings > PHP > Debug
    • Debug port: dejamos solo 9000
  • Settings > PHP > Debug > DBGp proxy
    • IDE key: PHPSTORM
    • Host: 0.0.0.0
    • Port: 9000

Ahora probaremos si conecta. Vamos a Run > Web server validation

  • Local web server or Shared folder: pondremos la ruta que hemos establecido en el paso anterior en Settings > PHP > Servers en el “absolute path on the server”
  • Url to validate script: el dominio local que estemos usando
  • Pulsar botón de validar

Si hemos hecho todo correctamente, nos validará la conexión y ya lo tenemos configurado. Nos avisará (es un warning no un error) que no encuentra ciertos .ini «no php.ini file was found» pero no tiene importancia. El resto de validaciones deben estar en verde.

Con esto hecho ya podemos activar la conexión con Run > Start listening for PHP debug connections.