Как обновить 1С-Битрикс без поломок
Обновление Битрикса само по себе ничего не ломает. Ломают его правки, внесённые в обход системы: изменённые файлы в /bitrix/, шаблоны стандартных компонентов без копирования, старые модули, которые не работают с новым ядром. Ниже — порядок, по которому я обновляю сайты клиентов, и что проверить до того, как нажать кнопку.
Почему вообще нужно обновлять
- Безопасность. Уязвимости в модулях Битрикса находят регулярно, и исправления приходят только с обновлениями.
- Совместимость с PHP. Хостинги переходят на PHP 8.x, старое ядро Битрикса на нём не работает.
- Решения партнёров. Свежие версии Аспро и других решений требуют свежего ядра.
- Обмен с 1С. Новые версии конфигураций 1С ожидают актуальный модуль обмена.
Сайт, который не обновлялся три-четыре года, обновлять сложнее и дороже: накапливаются десятки версий модулей и миграций базы.
Шаг 1. Проверьте лицензию
Откройте Рабочий стол — Marketplace — Обновление решений или Настройки — Обновление платформы. Вверху видно редакцию и срок активности лицензии. Если лицензия истекла, обновления недоступны. Сайт при этом продолжает работать, но обновиться можно только после продления.
Продление стоит заметно дешевле новой лицензии, но если перерыв был долгим, цена считается по-другому — уточняйте у партнёра 1С-Битрикс.
Шаг 2. Проверка системы
Настройки — Инструменты — Проверка системы. Запустите полное тестирование. Обратите внимание на:
- версию PHP и требования новой версии ядра;
- кодировку базы и соединения (UTF-8 у современных сайтов, windows-1251 у старых);
- права на запись в /bitrix/ и /upload/;
- лимиты памяти и времени выполнения;
- работу агентов на cron.
Всё красное нужно исправить до обновления.
Шаг 3. Найдите правки в ядре
Самая важная проверка. Если кто-то правил файлы в /bitrix/modules/, /bitrix/components/bitrix/ или шаблоны в /bitrix/templates/.default/components/bitrix/ без копирования, обновление их перезапишет.
Как найти изменения: модуль «Монитор качества» или «Проактивная защита — Контроль целостности» умеют сравнивать файлы ядра с эталоном. На сервере можно сравнить файлы с копией той же версии ядра:
diff -rq /var/www/site/bitrix/modules /tmp/bitrix_clean/bitrix/modules | grep -v "Only in"
Все найденные правки переносите в /local/: свои компоненты — в /local/components/, шаблоны — в /local/templates/, обработчики событий — в /local/php_interface/init.php. После этого обновление перестаёт быть опасным.
Шаг 4. Резервная копия
Две копии лучше одной:
- Средствами Битрикса: Настройки — Инструменты — Резервное копирование. Она восстанавливается через restore.php.
- Отдельно файлы и база силами хостинга или вручную:
mysqldump -u user -p --single-transaction --default-character-set=utf8 dbname > db_before_update.sql
tar czf files_before_update.tgz --exclude=bitrix/cache --exclude=bitrix/managed_cache /var/www/site
Убедитесь, что архив открывается и база в нём не пустая.
Шаг 5. Обновите копию сайта, а не рабочий сайт
Разверните копию на тестовом поддомене: файлы, база, в /bitrix/.settings.php и /bitrix/php_interface/dbconn.php — новые доступы к базе. Закройте копию от индексации и от посторонних, например базовой авторизацией.
Обновляйте копию и проверяйте её. Только когда на копии всё работает, повторяйте на рабочем сайте — уже зная, где будут проблемы.
Шаг 6. Порядок обновления
- Сначала модуль «Главный модуль» (main) и система обновлений. Битрикс сам предложит обновить их первыми.
- Затем остальные модули ядра. Если обновлений много, ставьте партиями, а не все 80 сразу: при ошибке будет понятно, какой модуль виноват.
- Затем решения Marketplace — Аспро и другие. Перед обновлением решения Аспро прочитайте список изменений: иногда меняются шаблоны и настройки, и ваши правки в шаблоне решения надо будет перенести.
- Языковые файлы — в конце.
Если обновление зависло на середине, не перезапускайте его в панике. Обновите страницу — система продолжит с места остановки. Если появилась ошибка, запишите её текст.
Шаг 7. Проверка после обновления
- Главная, каталог, карточка товара, поиск.
- Формы и почтовые события — отправьте тестовую заявку.
- Корзина и оформление заказа, оплата в тестовом режиме.
- Обмен с 1С — запустите выгрузку.
- Агенты: Настройки — Настройки продукта — Агенты, нет ли ошибок.
- Журнал событий на предмет новых ошибок.
- Кэш: очистите его в Настройки — Настройки продукта — Автокеширование.
Если после обновления сайт сломался
Ошибка 500 или белая страница. Включите отладку в /bitrix/.settings.php (exception_handling, debug => true) и посмотрите текст ошибки. Подробно о методике — в статье «Ошибка 500 на сайте». Чаще всего падает старый сторонний модуль или код в init.php, использующий устаревшие функции.
Сломалась вёрстка. Обновился стандартный шаблон компонента, а ваш шаблон опирался на старую структуру данных. Нужно сравнить result_modifier.php и template.php с новыми.
Не работает обмен с 1С. Проверьте, что версия модуля обмена соответствует конфигурации 1С, и посмотрите журнал обмена.
Ничего не помогает. Восстановите сайт из резервной копии и разбирайтесь на тестовой копии, без спешки.
Обновление PHP вместе с Битриксом
Не меняйте одновременно и ядро Битрикса, и версию PHP. Порядок: обновить Битрикс до версии, поддерживающей нужный PHP, проверить, затем переключить PHP на копии, проверить ещё раз, и только потом — на рабочем сайте.
Как часто обновлять
Для большинства сайтов разумно раз в месяц-два, плюс срочно — при выходе обновлений безопасности. Регулярные небольшие обновления проходят почти незаметно. Обновление раз в три года — это всегда отдельный проект.
Когда стоит отдать обновление разработчику
Если на сайте правки в ядре, давно не обновлялись решения Аспро, интернет-магазин с обменом с 1С или вы просто не хотите рисковать продажами — это моя типичная задача в рамках поддержки и доработки Битрикс. Обновляю на копии, переношу правки в /local/, проверяю обмен и только потом трогаю рабочий сайт.
Обновление через SSH и командную строку
На больших сайтах веб-интерфейс обновлений упирается в лимит времени выполнения PHP. Тогда обновления ставят из командной строки — так же через официальную систему обновлений, но без таймаутов браузера. В последних версиях главного модуля есть консольные команды Битрикса; проверить список можно так:
cd /var/www/site
php bitrix/bitrix.php list
Если консольных команд в вашей версии нет, помогает временное увеличение лимитов только на время обновления:
max_execution_time = 600
memory_limit = 512M
После обновления верните прежние значения.
Как вести журнал изменений
Перед обновлением сохраните текущие версии модулей — список есть в Marketplace — Установленные решения и в Настройки — Модули. После обновления сравните. Если через неделю появится странное поведение, вы будете знать, что менялось. Удобно хранить такие списки вместе с резервными копиями.
Типичный сценарий: сайт на Аспро, не обновлявшийся пару лет
Корпоративный сайт на решении Аспро давно не обновлялся, а хостинг объявил об отключении старой версии PHP. Порядок работы:
- Продлить лицензию Битрикса — без этого обновления недоступны.
- Развернуть копию сайта на поддомене с паролем.
- Найти файлы шаблонов, изменённые прямо в папке решения, и перенести правки в /local/templates/.
- Обновить главный модуль, затем модули ядра партиями по 10–15, проверяя сайт после каждой.
- Обновить решение Аспро и сверить настройки в его панели — часть опций в новых версиях переезжает в другие разделы.
- Переключить копию на новую версию PHP, исправить ошибки в init.php и сторонних модулях.
- Повторить всё на рабочем сайте в ночное время, заранее зная проблемные места.
Так простой рабочего сайта сводится к минимуму.
Чек-лист обновления Битрикса
- Лицензия активна.
- Проверка системы без критических ошибок.
- Правки ядра найдены и перенесены в /local/.
- Две резервные копии: средствами Битрикса и отдельно.
- Обновление сначала на копии.
- Главный модуль — первым, остальные — партиями.
- Решения Marketplace — после ядра, с чтением списка изменений.
- Проверка форм, корзины, обмена с 1С, агентов, журнала событий.
- Очистка кэша.
- Только после этого — смена версии PHP, тоже через копию.
Что делать, если лицензия истекла давно
Сайт продолжает работать, но без обновлений безопасности. Варианты: продлить лицензию и обновиться поэтапно; оставить как есть и закрыть основные риски на уровне сервера (ограничить доступ к /bitrix/admin по IP, запретить выполнение PHP в /upload/); либо, если возможности Битрикса не используются, перенести сайт на другую CMS. Решение зависит от того, насколько сайт завязан на 1С и Битрикс24.
Частые вопросы
Сколько времени занимает обновление Битрикса?
Если сайт обновлялся регулярно — от получаса. Если обновлений не было год и больше, с переносом правок ядра и проверкой на копии — от одного до нескольких дней.
Можно ли обновить только безопасность, не трогая остальное?
Отдельных патчей безопасности у Битрикса нет: исправления приходят в обновлениях модулей. Главный модуль и модули, отвечающие за безопасность, стоит обновлять в первую очередь.
Нужна помощь?
Если не хочется разбираться самому или не получилось — напишите мне. Посмотрю сайт и скажу, что сломалось и сколько стоит исправить.
Поддержка и доработка 1С-БитриксНаписать в TelegramНаписать в Viber
