Я прошу помощи с тем, что я считаю нетривиальным вопросом, который я пытаюсь решить уже несколько недель.
Недавно я обновил свой проект до Symfony 5.4. Однако после развертывания проекта в кластере Kubernetes php-fpm перестал работать в подах. Подробнее об этом процессе я писала здесь. Меня сразу отправили смотреть логи, конфиги и прочее, но я убедился, что с этим проблем нет. И вот почему:
Дело в том, что для воспроизведения проблемы ВСЕГДА(!) нужны два условия:
Во всех остальных случаях проблема НЕ(!) воспроизводится.
Это значит, что если я, находясь в кластере Kubernetes, откатываю пакеты до версии 4.4 и все работает нормально. С другой стороны, на моей локальной машине, где нет кластера Kubernetes, после обновления проекта до версии 5.4 php-fpm тоже работает нормально. Оба конфига одинаковые, версии php-fpm одинаковые. Все буквально идентично. Отсюда делаю вывод, что удаленные конфиги настроены правильно и принципиальной несовместимости пакетов Symfony с установленным fpm нет.
Я думал, что может не хватить ресурсов для запуска/обновления системы, но:
Итак, в чем может быть проблема?
УПД:
Я могу смотреть журналы модуля и видеть, как выполняется мой файл entrypoint, следующим образом:
После выполнения всех миграций в файле журнала отображается запись [OK] Already at the latest version ("App\Migrations\Version20230427064413"). Из этого я делаю вывод, что миграции сработали успешно и не сломали мое приложение.
Прогрев кеша прошел успешно, о чем свидетельствует строчка в логах [OK] Cache for the "prod" environment (debug=false) was successfully warmed.
В точке входа, указанной здесь, я действительно не использую команду $ php-fpm --test, однако могу заверить вас, что я запускал команду с флагом -t и флагом --debug раньше, и ошибок не было. Журналы показывают NOTICE: configuration file /usr/local/etc/php-fpm.conf test is successful.
Это моя проблема, да.
Мой проект Symfony 4.4 работает на том же базовом образе php:8.0-fpm-alpine3.16 в точно такой же конфигурации пода Kubernetes, из чего я делаю вывод, что OPcache совместим с PHP версии 8.0. Однако для большей уверенности я закомментировал строчки ;opcache.preload=/var/www/app/var/cache/prod/srcCimple_KernelProdContainer.preload.php ;opcache.preload_user=www-data в своем php.ini и проблема не исчезла
УПД 2
Я попытался распечатать код, который возвращает команда php-fpm -F. Результатом является 0, что указывает на успешное выполнение команды без ошибок.
Что я и пытался сделать, я сначала отдельно обновляю рецепты, готовлю код и слежу за тем, чтобы на каждом шагу проект запускался. Проблема в том, что проект работает локально даже с полностью обновленным Symfony. Проблема с php-fpm возникает, как только я обновляю composer update "symfony/*" с 4.4 до 5.1 или выше. Или я должен попытаться обновить пакеты один за другим? Является ли это возможным ?
Я оставил только одну строку в index.php - require dirname(__DIR__).'/vendor/autoload.php; и проблема осталась.
Мне удалось узнать больше информации об этой ошибке: в файле entrypoint есть строки
php-fpm -F &
nginx -g 'daemon off;' &
Итак, я закомментировал строку с nginx и обнаружил, что php-fpm в данном случае работает корректно. Следовательно, никаких проблем с PHP FPM как таковым нет, проблема в том, что команда nginx -g 'daemon off;' & каким-то образом блокирует мой fpm. Может ли это быть связано с новыми правилами для конфигурации nginx в Symfony 5.4?
Я создал новый вопрос.






Вы запускаете app:migrations:migrate, что может привести к сбою скрипта (это должно быть сделано в initContainer).
Вы запускаете cache:warmup, что может привести к сбою скрипта.
Вы не запускаете $ php-fpm --test, чтобы убедиться, что ваша конфигурация действительно действительна.
Вы обновляете symfony, который может содержать ошибки, проявляющиеся только на облачном оборудовании.
Вы используете JIT (OPcache), и он просто не работает (проблема 8.0, 8.1). Вы можете попробовать отключить расширение opcache.
Попробуйте подключиться к модулю и запустить проект через встроенный сервер php, а не через php-fpm, если он все еще не запускается, то попробуйте изменить версию php.
1. Попробуйте вывести код выхода из php-fpm -F
2. Попробуйте обновить symfony постепенно
3. Попробуйте другую среду выполнения. Модуль Nginx или Roadrunner
4. убедитесь, что ваш каталог «vendor» не кэшируется из предыдущих сборок
5. Попробуйте оставить в index.php только одну строчку, которая включает в себя vendor/autoload.php и подтвердите, что проблема осталась.
Спасибо за помощь, пожалуйста, смотрите раздел UPD 2.
Проблема заключалась в том, что OPcache был настроен неправильно.
Однако при проверке следует быть осторожным. Когда мне сказали отключить JIT (OPcache), я просто закомментировал настройки в php.ini:
;opcache.preload=/var/www/app/var/cache/prod/srcCimple_KernelProdContainer.preload.php
;opcache.preload_user=www-data
Но этого недостаточно. Мне тоже пришлось переделывать проект.
Большое спасибо за Ваш ответ. Пожалуйста, смотрите раздел UPD в моем вопросе.