Недавно довелось обновлять старый сайт на CMS Bitrix, который не обслуживали более 5 лет. Сайт за это время успел пострадать от взлома, но благо была резервная копия проекта, с которой и началась эта история про обновление старого Bitrix сайта с php 5.6 до последней версии Bitrix, php 8.3 и mysql 8.
Работать с bitrix мне доводится раз лет в 10, опыт редкий, поэтому пишу эту заметку чтобы не забыть, а может и кому-то помочь. Информации в интернете полно, но я постарался собрать в одном месте то, что по ходу восстановления и обновления собирал из разных статей и публикаций на форумах. Возможно я что-то проглядел и где-то, кем-то уже написана такая же инструкция.
Заметка была написана по горячим следам, но к сожалению я поздно сообразил документировать процесс. В результате чего не делал скриншотов.
Перед обновлением
Главным условием для проведения обновления является актуальная лицензия на CMS Битрикс с возможностью установки актуальных обновлений. Прежде чем приступать стоит продлить лицензию и дождаться актуализации подписки.
Так же, перед обновлением рекомендую сделать резервную копию сайта и базы данных. Сделать это можно вручную скопировав файлы проекта и сделав дамп базы mysql, так и с помощью встроенных средств bitrix в разделе «Настройки \ Инструменты \ Резервное копирование».
На момент проведения работу у меня был на руках сайт на обычном шаред хостинге от nic.ru с Битрикс 18 версии, php 5.6 и mysql 5-й версии. Обновление пришлось проводить поэтапно с устранением выявленных недостатков.
Обновление Bitrix с php 5.6 до php 7.4
После того как лицензия обновлена и сайту стали доступны онлайн обновления идем в Marketplace \ Обновление платформы и устанавливаем доступные обновления. В моём случае это был только сам модуль обновления. Сразу после этого он выдал ошибку совместимости php и ошибку не установленной опции default_charset в настройках php. При том, что в настройках php была указана эта опция её необходимо было задать явно для сайта. На хостинге это можно сделать с использованием файла .htaccess
<IfModule mod_php5.c>
php_flag allow_call_time_pass_reference 1
php_flag session.use_trans_sid off
php_value default_charset UTF-8
#php_value display_errors 1
#php_value mbstring.internal_encoding UTF-8
</IfModule>
## Либо вне модуля
php_value default_charset UTF-8
Обратите внимание, что если указать переменную в условии ifmodule, то после обновления версии php необходимо будет переписать файл .htaccess отредактировав на текущую версию php, удобнее указать переменную вне условия модуля.
После этого идем в «Настройки \ Инструменты \ Проверка системы». Выполняем проверку и устраняем выявленные недочеты. Как минимум необходимо исправить те, что Битрикс предлагает исправить сам кликнув на ссылку «исправить». Так же не лишним будет пройти «Настройки \ Инструменты \ Диагностика \ Проверка БД» и там же «Оптимизация БД». Убедится, что всё хорошо. После этого возвращаемся к менеджеру обновлений и устанавливаем все предлагаемые обновления.
Переход Битрикс на PHP 7.4
После того как процесс обновления завершится (менеджер обновлений больше не предлагает новых пакетов) можно сменить в настройках хостинга версию php на 7.4. После этого сайт перестанет работать, поскольку с версии php 7 поменялась используемая библиотека для доступа к СУБД MySQL. Необходимо исправить это в двух файлах конфигурации Bitrix.
В файле bitrix/.settings изменить имя класса для подключения к субд с MysqlConnection на MysqliConnection.
'connections' =>
array (
'value' =>
array (
'default' =>
array (
'className' => '\\Bitrix\\Main\\DB\\MysqliConnection',
'host' => 'localhost',
'database' => 'bitrixdb',
'login' => 'bitrixdblogin',
'password' => 'bitrixdbpassword',
'options' => 2,
),
В файле bitrix/php_interface/dbconn.php добавить параметр:
define("BX_USE_MYSQLI", true);
Убедитесь, что в .htaccess или настройках php вашего сервера настроена верная опция:
php_value default_charset UTF-8
Если всё сделали верно то сайт откроется. Проводим проверку и устранение неисправностей «Настройки \ Инструменты \ Проверка системы» и «Настройки \ Инструменты \ Диагностика \ Проверка БД» и там же «Оптимизация БД».
Так же менеджер обновлений на этом этапе попросил отключить функцию php:
mbstring.func_overload = 0
Когда все ошибки устранены переходим в менеджер обновлений и устанавливаем все доступные обновления.
Переход Bitrix на php 8.3
После установки всех обновлений на предыдущем шаге версия Битрикс уже должна быть выше 22.+. Меняем в настройках хостинга версию php на 8 (последний на момент написания статьи был 8.3) и далее по уже понятной схеме проверка сайта, исправление ошибок, установка обновлений.
На этом шаге у меня выскочила ошибка в типах таблиц на сервере СУБД. Некоторые таблицы были на движке MyISAM с неверным типом. CMS сама предложила исправить но смогла исправить не все. В логе проверки указаны таблицы, которые она не смогла исправить. Можно просто зайти в phpmyadmin и исправить типа движка согласно рекомендациям для каждой таблицы.
После этого тест проходит и предлагает обновить структуру данных. На этом этапе возникла проблема при попытке исправления появлялась ошибка: «Ошибочный ответ сервера. Не удалось завершить тестирование».
Возможное решение данной проблемы описанное в интернет мне не помогло. Решение: В файле /bitrix/modules/main/install/mysql/install.sql замените строку
INDEX ix_module_to_module(FROM_MODULE_ID, MESSAGE_ID, TO_MODULE_ID, TO_CLASS, TO_METHOD)
# на
INDEX ix_module_to_module(FROM_MODULE_ID(20), MESSAGE_ID(20), TO_MODULE_ID(20), TO_CLASS(20), TO_METHOD(20))
В комментариях к решению был совет, который мне помог. Цитата:
INDEX ix_module_to_module в файле install.sql уже был прописан правильно.
Открыл консоль, и выяснил, что при нажатии на «Исправить» в ответе от site_checker.php возвращались ворнинги PHP. Из-за них ответ не распознавался и выводилась ошибка «Ошибочный ответ сервера. Не удалось завершить тестирование».
Нужно смотреть по логам php какие возникают ошибки и исправлять. Вероятнее всего есть какие-то некорректные объявления в файле dbconn.php.
После этого всего были установлены последние доступные обновления Битрикс и сделана резервная копия всего проекта. Последним штрихом стала смена версии СУБД MySQL на 8 версию — единственную, которую предлагал хостинг nic.ru на тот момент. После смены не плохо опять пройтись по пунктам проверки сайта, субд и прочим встроенным оптимизациям.
Повышение безопасности сайта на Bitrix
После процедуры тотального обновления в консоли администрирования сайта был немедленно обнаружен и задействован механизм повышения безопасности сайта. Находится он в меню «Настройки \ Проактивная защита». Здесь необходимо включить монитор проактивной защиты, затем запустить сканер безопасности и закрыть все выявленные им уязвимости. Каждый выявленный пункт сопровождается инструкцией «Что делать?».
На этом моя техническая часть по обновлению сайта завершилась. Остались нерешенные моменты по контенту сайта, а так же по совместимости некоторых модулей сайта с текущей версией php, но это уже другая история.
Внимание! Нажимая кнопку "Отправить комментарий" вы соглашаетесь с политикой конфиденциальности сайта.