Обновление окружения и смена версии PHP в BitrixVM
Обновляем веб-окружение до текущей версии и переключаем PHP на другую ветку, не сломав при этом работающие сайты.
Решение
Смотрим, что стоит сейчас:
rpm -qa | grep bitrix-env # версия окруженияphp -v | head -1 # версия PHP в командной строкеphp -i | grep '^Loaded Configuration'Версия окружения и версия продукта живут отдельно друг от друга. Обновление сайта из админки системные пакеты не трогает, а обновление окружения не меняет ни одной строки в файлах самого продукта.
Обновляем окружение:
# обновление тянет пакеты веб-сервера, PHP и базы одной командой/opt/webdir/bin/bx-updateyum clean all && yum update bitrix-env -y # если пункт меню недоступенОбновление переносит конфигурацию само и перезапускает службы по очереди. Свои правки в сгенерированных файлах при этом теряются: окружение собирает эти файлы из шаблонов заново и чужие строки в них не сохраняет.
Переключаем ветку PHP:
/opt/webdir/bin/bx-php-switcher -v 8.2 # ветка задаётся одним параметромsystemctl restart php-fpm nginx httpdphp -v | head -1 # сверяем, что переключилосьВетку меняют штатным переключателем, а не пакетным менеджером системы. Установка PHP мимо окружения ломает связь с настройками пулов, и консольное меню перестаёт видеть установленную версию вовсе.
Перед сменой ветки стоит посмотреть, какая минимальная версия нужна установленным модулям. Продукт держит собственную планку требований, и часть решений маркетплейса на новой ветке просто не запускается.
Задаём разные версии для разных сайтов:
# у каждого сайта свой пул php-fpm, версия задаётся в его настройкахls /etc/php-fpm.d/grep -l 'listen' /etc/php-fpm.d/*.conf | xargs grep -H 'php'Пул привязан к сайту, поэтому один сайт может работать на старой ветке, пока второй переехал на новую. Общая версия командной строки при этом остаётся одна и на сайты не влияет.
Проверяем систему после переключения:
# проверка системы из админки: раздел настроек, пункт проверки требованийphp -m | grep -iE 'mbstring|mysqli|zip|gd|opcache'tail -50 /var/log/php-fpm/error.logРасширения PHP ставятся под конкретную ветку и вместе с ней же удаляются. После переключения часть из них может отсутствовать, и сайт падает на первом же обращении к недостающему расширению.
Порядок действий один и тот же: сначала резервная копия, потом обновление окружения, потом смена ветки PHP. Обратный порядок приводит к тому, что новая ветка настраивается по старым шаблонам, а следующее обновление окружения переписывает настройки заново.
Типичные проблемы
После обновления пропали свои правки конфигов.
Правки лежали в сгенерированных файлах. Окружение собирает их из шаблонов заново при каждом изменении настроек.
Сайт падает сразу после смены ветки PHP.
Под новой веткой не установлены нужные расширения. Набор расширений привязан к ветке, а не к системе целиком.
Меню не видит установленную версию PHP.
PHP поставлен мимо окружения, пакетным менеджером. Переключатель работает только со своими сборками.
Агенты на cron перестали выполняться.
В задании прописан путь к старому исполняемому файлу PHP. После переключения он ведёт на несуществующую или устаревшую ветку.
Один сайт переехал, второй остался на старой версии.
Это штатное поведение: версия задаётся на пул, а пул принадлежит сайту. Общая настройка сразу для всех сайтов отдельно не выставляется.
Частые вопросы
Обновление окружения обновит сам продукт?
Нет, это независимые вещи. Окружение обновляет системные пакеты, продукт обновляется из админки, и версии между собой не связаны.
Можно ли обновиться через несколько версий сразу?
Да, обновление ставит текущую версию окружения независимо от того, какая была. Резервную копию перед этим делают всегда: откат делается только из неё.
Что будет со старыми сайтами на PHP 5?
Они останутся на своей ветке, пока их пул не переключен. Работать они будут, но обновления продукта требуют минимальной версии PHP и до старой ветки не доедут.
Нужно ли перезапускать службы вручную?
Переключатель перезапускает их сам, но при ручной правке настроек перезапуск делают явно. Иначе меняется файл, а работает старая конфигурация из памяти процесса.
Смежное
- BitrixVM и веб-окружение - оглавление подтемы
- Установка и настройка BitrixVM - первый запуск и меню
- Ошибка после обновления PHP - что ломается в коде
- Сервер и поиск - устройство сервера целиком
- Агенты не выполняются: агенты на хитах и запуск по расписанию - почему задания ломаются после смены PHP
- Обновление продукта: подготовка, порядок, откат - порядок между продуктом и веткой PHP
- Переход на новую версию PHP: порядок, проверки, откат - порядок переезда на новую версию языка
- Обновление платформы изнутри: шаги, файлы, откат - обновление самой платформы, а не окружения
- Акселератор PHP: размер кэша, сброс при выкладке - что задать после смены версии PHP