Xdebug: off by default on CLI, auto-triggered on web only
Loading xdebug.mode=debug at all times made every drush/composer command noticeably slower, since Xdebug hooks every function call as soon as the mode is active regardless of whether a debugger connects. Split the config per-SAPI instead: CLI defaults to xdebug.mode=off (opt in with the new xdebugon/xdebugoff aliases or XDEBUG_MODE=debug XDEBUG_TRIGGER=1), while php-fpm keeps xdebug.mode=debug + start_with_request=yes so browser requests still auto-connect with no trigger needed. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
+13
-1
@@ -41,6 +41,13 @@ COPY ./rsyslog-drupal.conf /etc/rsyslog.d/drupal.conf
|
|||||||
# ENTRYPOINT ["sh", "-c", "service rsyslog start ; tail -f /dev/null"]
|
# ENTRYPOINT ["sh", "-c", "service rsyslog start ; tail -f /dev/null"]
|
||||||
|
|
||||||
COPY ./php-custom.ini /usr/local/etc/php/conf.d/php-custom.ini
|
COPY ./php-custom.ini /usr/local/etc/php/conf.d/php-custom.ini
|
||||||
|
# Xdebug: off by default on CLI (drush, composer) — mode=debug alone still hooks every
|
||||||
|
# function call and is what makes CLI commands slow, even with start_with_request=trigger.
|
||||||
|
# Use `XDEBUG_MODE=debug XDEBUG_TRIGGER=1 drush ...` (see xdebugon/xdebugoff aliases) to debug a CLI run.
|
||||||
|
# FPM loads an extra ini dir that restores mode=debug + start_with_request=yes for web requests.
|
||||||
|
RUN printf "xdebug.mode=off\nxdebug.start_with_request=trigger\n" > /usr/local/etc/php/conf.d/zz-xdebug-cli.ini && \
|
||||||
|
mkdir -p /usr/local/etc/php/fpm-conf.d && \
|
||||||
|
printf "xdebug.mode=debug\nxdebug.start_with_request=yes\n" > /usr/local/etc/php/fpm-conf.d/zz-xdebug-fpm.ini
|
||||||
# COPY ./php-fpm-custom.conf /usr/local/etc/php-fpm.d/php-fpm-custom.conf
|
# COPY ./php-fpm-custom.conf /usr/local/etc/php-fpm.d/php-fpm-custom.conf
|
||||||
|
|
||||||
|
|
||||||
@@ -64,6 +71,11 @@ RUN if getent group ${USER_GNAME} ; then groupdel ${USER_GNAME}; fi &&\
|
|||||||
COPY ./bashrc /home/${USER_UNAME}/.bashrc
|
COPY ./bashrc /home/${USER_UNAME}/.bashrc
|
||||||
COPY ./inputrc /home/${USER_UNAME}/.inputrc
|
COPY ./inputrc /home/${USER_UNAME}/.inputrc
|
||||||
|
|
||||||
|
# /home/${USER_UNAME} is a persistent named volume, so files COPYed there only apply on
|
||||||
|
# first volume creation. Put the xdebug aliases in /etc/bash.bashrc instead, which is part
|
||||||
|
# of the image and always sourced by interactive shells (docker exec, ssh).
|
||||||
|
RUN printf "\n# Xdebug is off by default on CLI for speed (see zz-xdebug-cli.ini).\nalias xdebugon='export XDEBUG_MODE=debug XDEBUG_TRIGGER=1'\nalias xdebugoff='unset XDEBUG_MODE XDEBUG_TRIGGER'\n" >> /etc/bash.bashrc
|
||||||
|
|
||||||
# https://github.com/ProgDroid/composer_update_autocomplete
|
# https://github.com/ProgDroid/composer_update_autocomplete
|
||||||
RUN mkdir /home/${USER_UNAME}/.bin
|
RUN mkdir /home/${USER_UNAME}/.bin
|
||||||
COPY ./composer_update_autocomplete /home/${USER_UNAME}/.bin/composer_update_autocomplete
|
COPY ./composer_update_autocomplete /home/${USER_UNAME}/.bin/composer_update_autocomplete
|
||||||
@@ -82,7 +94,7 @@ EXPOSE 22
|
|||||||
|
|
||||||
# https://stackoverflow.com/questions/36964652/ssh-in-docker-container-causes-http-404
|
# https://stackoverflow.com/questions/36964652/ssh-in-docker-container-causes-http-404
|
||||||
# use \n to make the content into multiple lines
|
# use \n to make the content into multiple lines
|
||||||
RUN printf "whoami\nphp-fpm -D\n/usr/sbin/sshd -D" >> /start.sh
|
RUN printf "whoami\nPHP_INI_SCAN_DIR=/usr/local/etc/php/conf.d:/usr/local/etc/php/fpm-conf.d php-fpm -D\n/usr/sbin/sshd -D" >> /start.sh
|
||||||
RUN chmod +x /start.sh
|
RUN chmod +x /start.sh
|
||||||
CMD ["/start.sh"]
|
CMD ["/start.sh"]
|
||||||
|
|
||||||
|
|||||||
@@ -90,6 +90,30 @@ sudo docker exec -it materiod8_php_1 bash
|
|||||||
```
|
```
|
||||||
once inside the php container in /var/www/html you can use drush as usual
|
once inside the php container in /var/www/html you can use drush as usual
|
||||||
|
|
||||||
|
### Xdebug
|
||||||
|
|
||||||
|
Xdebug is installed in the php container, listening for your IDE on `host.docker.internal:9001` (see `ressources/xdebug.ini`, `.vscode/launch.json` in `public_html`).
|
||||||
|
|
||||||
|
Web and CLI behave differently on purpose, because leaving `xdebug.mode=debug` on all the time makes every `drush`/`composer` command noticeably slower (Xdebug hooks every function call as soon as the mode is active, whether or not a debugger actually connects):
|
||||||
|
|
||||||
|
- **Browser requests (php-fpm)**: Xdebug is always on (`xdebug.mode=debug`, `xdebug.start_with_request=yes`). Just start listening in your IDE and load the page, no trigger needed.
|
||||||
|
- **CLI (`drush`, `composer`, ...)**: Xdebug is **off by default** (`xdebug.mode=off`) so commands stay fast. To debug a specific command, turn it on for the current shell first:
|
||||||
|
```
|
||||||
|
xdebugon
|
||||||
|
drush some:command
|
||||||
|
xdebugoff
|
||||||
|
```
|
||||||
|
`xdebugon`/`xdebugoff` are shell aliases defined in `/etc/bash.bashrc` inside the php container (they set/unset `XDEBUG_MODE=debug` and `XDEBUG_TRIGGER=1`). You can also do it inline for a single command:
|
||||||
|
```
|
||||||
|
XDEBUG_MODE=debug XDEBUG_TRIGGER=1 drush some:command
|
||||||
|
```
|
||||||
|
|
||||||
|
This split is implemented as two extra ini files loaded per-SAPI, see `Docker/php/Dockerfile`:
|
||||||
|
- `/usr/local/etc/php/conf.d/zz-xdebug-cli.ini` → loaded by both CLI and php-fpm (default conf.d), sets `xdebug.mode=off`.
|
||||||
|
- `/usr/local/etc/php/fpm-conf.d/zz-xdebug-fpm.ini` → only loaded by php-fpm (via `PHP_INI_SCAN_DIR` in `/start.sh`), overrides back to `xdebug.mode=debug` for web requests.
|
||||||
|
|
||||||
|
If you change any of these files, rebuild the php image (`make buildphp`) and recreate the container (`make up`) — do not use raw `docker-compose up`, it won't pick up `USER_UID`/`USER_GID` and the container will run as root (see Makefile section below).
|
||||||
|
|
||||||
### gulp
|
### gulp
|
||||||
Dev process needs gulp to run in:
|
Dev process needs gulp to run in:
|
||||||
- public_html/sites/all/modules/custom/materio/
|
- public_html/sites/all/modules/custom/materio/
|
||||||
|
|||||||
Reference in New Issue
Block a user