Перейти к содержимому

Окружение 1С-Битрикс - BitrixVM, установка, cron, бэкапы

Рабочий сайт на 1С-Битрикс - это не один PHP, а связка сервисов: фронтенд nginx, бэкенд с PHP, база, кеш и сервис реального времени. Разберём готовое окружение BitrixVM, требования к серверу, правильные места для своих настроек и эксплуатационные задачи: cron, бэкапы, обновления.

Как это работает

Стек из пяти частей. Фронтенд nginx отдаёт статику и координирует push-сервер. Бэкенд Apache с PHP выполняет всю динамику. База данных - Percona, MySQL, MariaDB или PostgreSQL. Кеш - memcached и Redis. Плюс сервис обмена сообщениями на Node.js для real-time.

Готовое окружение поставляется в двух формах. BitrixEnv - это скрипт, который разворачивает весь стек на чистой Linux-системе. VMBitrix - готовые образы виртуальных машин, собранные тем же скриптом с драйверами гипервизора. Скрипт обновляется чаще образов, поэтому после запуска образа его сразу обновляют. Для локальной разработки есть и Docker-окружение - тот же список требований платформы, но без готового скрипта разворачивания: PHP, база и кеш собираются вручную из контейнеров.

Управление идёт через консольное меню. Единственный рекомендованный интерфейс

  • /root/menu.sh, именно в нём появляются все новые возможности. Меню оперирует двумя понятиями: пул (группа управляемых хостов) и роли (web, mysql, memcached, sphinx, push-server, transformer, monitor). Под капотом каждая операция - асинхронный плейбук Ansible, выполняемый как фоновая задача, а её статус и логи доступны в меню.

Жизненный цикл деплоя. Проверить требования тестовым скриптом, поставить дистрибутив, пройти мастер установки, настроить эксплуатацию (агенты на cron, кеш, бэкапы), дальше обновления через SiteUpdate и при необходимости переезд через резервную копию. Ключевой инвариант один: доработки и переопределения конфигов держат отдельно от ядра, иначе всё теряется при обновлении.

Примеры

1. Критические параметры php.ini

memory_limit = 256M
max_input_vars = 10000
max_file_uploads = 100
max_execution_time = 300
post_max_size = 1024M
upload_max_filesize = 1024M
default_charset = UTF-8
pcre.backtrack_limit = 1000000
pcre.recursion_limit = 14000
realpath_cache_size = 4096k
short_open_tag = On
allow_url_fopen = On
display_errors = Off
mbstring.func_overload = 0
; акселератор обязателен
opcache.max_accelerated_files = 100000
opcache.revalidate_freq = 0

Обязательные расширения: GD с FreeType для изображений и капчи, XML и DOM для системы обновлений, mbstring, Zlib, ZIP, OpenSSL, Hash, PCRE, драйвер базы, AMQP для конвертера файлов, LDAP для доменной авторизации. Модули suhosin и mod_security использовать нельзя.

Минимальные требования на текущий момент: PHP 8.2 и выше (рекомендуется 8.4+), MySQL 8.0+ с кодировкой utf8mb4, Apache 2.0+ или актуальный nginx. Начиная с версии продукта 24.0.0 поставка идёт только в UTF-8, PostgreSQL доступен в редакции «Энтерпрайз».

2. Куда класть свои настройки

MySQL: /etc/mysql/conf.d/z_bx_custom.cnf
Apache: /etc/httpd/bx/custom/z_bx_custom.conf
PHP: /etc/php.d/z_bx_custom.ini
nginx: /etc/nginx/bx/settings/z_bx_custom.conf
nginx (посайтово): /etc/nginx/bx/site_settings/<имя сайта>/

Это едва ли не самое ценное знание про BitrixVM. Стандартные файлы /etc/nginx/nginx.conf, /etc/httpd/conf/httpd.conf и /etc/my.cnf заменяются при обновлении, а служба автоподстройки перетирает правки в них. Файлы с префиксом z_bx_custom обновление переживают. После правки нужен перезапуск соответствующей службы.

3. Перенос агентов на cron

На боевом проекте агенты не должны выполняться на хитах посетителей: без трафика они не запустятся, а тяжёлая задача затормозит чужой запрос.

\Bitrix\Main\Config\Option::set('main', 'agents_use_crontab', 'N');
\Bitrix\Main\Config\Option::set('main', 'check_agents', 'N');
/bitrix/php_interface/dbconn.php
if (!(defined('CHK_EVENT') && CHK_EVENT === true)) {
define('BX_CRONTAB_SUPPORT', true);
}
*/1 * * * * /usr/bin/php -f /home/bitrix/www/bitrix/php_interface/cron_events.php

PHP в командной строке должен работать от того же пользователя и с теми же настройками, что и веб-сервер, иначе появятся проблемы с правами на файлы кеша.

4. Push-сервер

/bitrix/.settings.php
'pull' => [
'value' => [
'signature_key' => 'значение из SECURITY_KEY push-сервера',
],
],

Ключ в настройках сайта обязан совпадать с ключом в конфигурации push-сервера. Признак исправной работы - ответ 101 при установке WebSocket-соединения. За балансировщиком дополнительно открывают служебные порты.

Справочник

ИнструментНазначениеОсобенности
bitrix_server_test.phpпроверка требований до установкикладут в корень сайта
bitrixsetup.phpзагрузка и установка дистрибутиваальтернатива - архив или образ
/root/menu.shуправление BitrixVMединственный рекомендованный интерфейс
пул и ролиорганизация серверов окруженияweb, mysql, memcached, sphinx, push-server, monitor
z_bx_custom.*кастомные конфигипереживают обновление окружения
agents_use_crontab, check_agentsперенос агентов на cronвместе с константой BX_CRONTAB_SUPPORT
SiteUpdateсистема обновлений продуктаобновлять только одну копию сайта
резервное копированиеиз админки или командной строкивосстановление скриптом restore.php
«Проверка системы»диагностика после установкиНастройки, Инструменты
Монитор производительностиоценка производительностиотдельный модуль

Частые ошибки

Настройки сервера откатились после обновления. Правили стандартные конфиги вместо файлов z_bx_custom. Всё, что нужно сохранить, кладут только туда.

Ошибка ERROR_WRONG_CODE при обновлении. Состояние системы не совпадает с тем, что было после прошлого обновления. Обычная причина - обновляли обе копии сайта, публичную и разработческую, или правили ядро руками. Обновлять нужно одну копию, а второй ставить маркер установки для разработки.

Ошибка об отсутствующем классе на странице обновлений. Кеш кода закешировал старые файлы при отключённой проверке временных меток. Временно включите её в настройках акселератора.

Обновление обрывается по таймауту. Причины: недоступны сокет-функции, заблокирован исходящий порт, не хватает оперативной памяти - типичная беда дешёвых виртуальных серверов. В закрытом контуре нужен прокси, а пакет обновлений собирается индивидуально под набор модулей.

Push-уведомления не приходят. Ключ подписи в настройках сайта не совпадает с ключом push-сервера. Проверьте также, открыты ли служебные порты, если сайт работает за балансировщиком.

Частые вопросы

BitrixVM или своя сборка сервера?

Готовое окружение стоит брать почти всегда: там уже собран и согласован весь стек - nginx, Apache с PHP, база, memcached, Redis, push-сервер, - а обновления и автоподстройка идут централизованно. Своя сборка оправдана, когда есть жёсткие корпоративные требования к ОС или к составу пакетов, но тогда вы берёте на себя и соответствие требованиям продукта, и настройку производительности.

Куда класть свои настройки nginx и MySQL, чтобы они не пропали?

В файлы с префиксом z_bx_custom: для MySQL это /etc/mysql/conf.d/z_bx_custom.cnf, для PHP - /etc/php.d/z_bx_custom.ini, для Apache и nginx - соответствующие каталоги окружения. Стандартные конфиги заменяются при обновлении, а служба автоподстройки перезаписывает правки в них.

Почему cron-скрипт должен работать от пользователя веб-сервера?

Иначе возникают проблемы с правами на файлы кеша: PHP в командной строке должен работать от того же пользователя и с теми же настройками, что и веб-сервер. Это касается не только переноса агентов - любой CLI-скрипт из cron, который трогает кеш или файлы проекта, должен запускаться от того же пользователя.

Как безопасно переехать на другой хостинг?

Штатный путь - резервная копия и восстановление скриптом restore.php на новой площадке. Перед переездом проверьте требования тестовым скриптом, а после - «Проверку системы» в админке. Отдельно сверьте кодировку и версию базы: продукт поставляется только в UTF-8, а требования к версии СУБД со временем растут.

Связанные темы

Первоисточники