Можно ли настроить PHP-FPM с другими параметрами пула (xdebug enabled / xdebug отключен)
У меня есть среда LEMP, и мне нужна опция, позволяющая отделить все поддомены разработки от промежуточного этапа (разработка без промежуточного этапа xdebug).
- dev.projectX.mydomain.tld
- staging.projectX.mydomain.tld
Поэтому я настроил два пула php-dev и php-stage, но кажется, что я могу включить расширения только в php.ini!?
Вот мой pool.conf (dev)
[php-dev]
listen = 127.0.0.1:9101
listen = /var/run/php-fpm/a1-php-dev.socket
listen.backlog = -1
listen.allowed_clients = 127.0.0.1
user = nginx
group = nginx
request_slowlog_timeout = 3s
slowlog = /var/log/php-fpm/slowlog-php-dev.log
pm = dynamic
pm.max_children = 20
pm.start_servers = 10
pm.min_spare_servers = 4
pm.max_spare_servers = 16
pm.max_requests = 500
pm.status_path = /status
request_terminate_timeout = 120s
rlimit_files = 131072
rlimit_core = unlimited
catch_workers_output = yes
env[HOSTNAME] = $HOSTNAME
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp
php_admin_value[zend_extension] = "/usr/lib64/php/modules/xdebug.so"
php_admin_value[xdebug.default_enable] = 0
php_admin_value[xdebug.remote_enable] = 0
php_admin_value[xdebug.remote_autostart] = 0
php_admin_value[xdebug.remote_host] = localhost
php_admin_value[xdebug.profiler_enable_trigger] = 0
php_admin_value[xdebug.remote_port] = 9001
php_admin_value[xdebug.collect_params] = 2
php_admin_value[xdebug.collect_vars] = 1
php_admin_value[xdebug.trace_format] = 2
К сожалению, xdebug не будет загружен.
Есть ли другой способ загрузить xdebug только на домены dev.*?
4 ответа
К сожалению, вы не можете загружать разные модули или версии модулей для каждого пула FPM. До сих пор я создал несколько совершенно разных экземпляров PHP-FPM в похожих ситуациях.
Да, но дополнительный пул также должен работать под отдельной службой. Этот сервис может использовать те же двоичные файлы, но ему нужны свои собственные файлы конфигурации и (некоторые) каталоги. Как этого добиться, зависит от вашей системы и ее менеджера по обслуживанию. I used this answer as a basis because I have systemd.
Проще всего создать сервис в /etc/init/php-xdebug
start on runlevel [2345]
stop on runlevel [016]
# you can uncomment this with recent upstart
# reload signal USR2
pre-start script
mkdir -p /run/php
chmod 0755 /run/php
chown www-data:www-data /run/php
end script
respawn
exec /usr/sbin/php-fpm7.0 --nodaemonize --fpm-config /etc/php/7.0/fpm/php-xdebug.conf
У XDebug в сочетании с PHP-FPM есть один подводный камень — опция xdebug.mode может быть установлена только в php.ini. Но если у вас есть один рабочий и один промежуточный сайт, использующий один и тот же php.ini, и вы хотите, чтобы xdebug был включен для промежуточной обработки, но отключен для рабочей среды (из-за производительности), у вас возникла проблема. Вы можете решить эту проблему, создав еще одну службу php-fpm (https://www.digitalocean.com/community/tutorials/understanding-systemd-units-and-unit-files) и в конфигурации устройства вы можете установить файл php.ini, который будет новый ini-файл с включенным xdebug. Затем вам просто нужно убедиться, что ваши запросы отладки указывают на этот новый php-fpm (что вы можете сделать, установив хост и порт прослушивания пула fpm).
Надеюсь, я оставил некоторые подсказки для тех, кто борется с xdebug, php-fpm и php.ini...