Классический способ публикации PHP проектов: имеем текущую версию кода в некоей директории директории /app/version1 и символическую ссылку /app/current -> /app/version1.
Настройки nginx таковы, что код запускается из /app/current (т.е. по символической ссылке).
Пришло время вложить новую версию: заливаем на сервер в директорию /app/version2 и после этого переключаем символическую ссылку /app/current -> /app/version2.
Атомарно? Не факт!
Есть несколько дополнительных факторов, которые нужно учитывать при деплое:
- OPCache
- realpath_cache
- А начиная с PHP 7.4 ещё и preload
И сразу возникают вопросы:
- Нужно ли делать сброс OPCache при такой схеме деплоя с двумя директориями и символической ссылкой? А если нужно, как это сделать правильно: php-fpm restart vs php-fpm reload vs gordalina/cachetool?
- Нужно ли сбрасывать realpath_cache или достаточно использовать $realpath_root в настройках nginx?
- Приводит ли php-fpm reload к сбросу realpath_cache?
- А если используем preload (PHP 7.