Tikslas: savo kompiuteryje noriu turėti Dockerizuotą webserverį su PHP bei galimybe debuginti kodą.
Kodėl man tai patinka:
- Nesuku galvos dėl PHP ir įvairių bibliotekų versijų skirtumų tarp mano kompiuterio ir Dockerizuotos aplinkos
- Šią aplinką galės atkurti bet kuris kitas žmogus, o ir aš pats vėliau ar tiesiog kitame kompiuteryje
- Jei reikia, galima gana tiksliai atkurti programinės įrangos kombinaciją net ir pačiame LIVE serveryje. Tarkim dėl „priežasčių” yra tebenaudojama sena biblioteka ir t.t. ir pan.
Pradėkime nuo recepto, kaip atrodys mūsų Docker image:
Dockerfile
FROM php:7-apache
COPY provision/http-site.conf /etc/apache2/sites-available/000-default.conf
COPY provision/https-site.conf /etc/apache2/sites-available/default-ssl.conf
RUN apt-get update \
&& DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends ssl-cert \
&& pecl channel-update pecl.php.net \
&& pecl install xdebug-3.0.2 \
&& docker-php-ext-enable xdebug \
&& echo "xdebug.mode=debug" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini \
&& echo "xdebug.discover_client_host=1" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini \
&& a2ensite 000-default default-ssl \
&& a2enmod rewrite ssl \
&& apt-get clean -y && apt-get autoremove -y \
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
Įkopijuotuose 000-default.cnf bei default-ssl.conf failuose nuo default varianto pakeista tik ši dalis:
ErrorLog /dev/stderr
CustomLog /dev/stdout combined
Tam, kad Dockerio konteinerių generuojami pranešimai ir klaidos būtų patogiai matomi konsolėje ir nereikėtų landžioti po Apache LOG failus.
xdebug.ini
XDebug pereinant iš versijos 2 į 3 įvyko šiokie tokie pokyčiai ir nuo šiol pakanka dviejų eilučių konfiguraciniame faile:
xdebug.mode=debug
xdebug.discover_client_host=1
Kaip įjungti/išjungti?
Naršyklių plėtiniai, kurie padės valdyti debuginimo režimą:
Galimos kliūtys
Ugniasienė. Jei pastaroji įjungta, IDE gali nematyti XDebug’o. Rekomenduoju patikrinti ar praleidžiamas 9003 (XDebug’o) port’as.