Окружение 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 = 256Mmax_input_vars = 10000max_file_uploads = 100max_execution_time = 300post_max_size = 1024Mupload_max_filesize = 1024Mdefault_charset = UTF-8pcre.backtrack_limit = 1000000pcre.recursion_limit = 14000realpath_cache_size = 4096kshort_open_tag = Onallow_url_fopen = Ondisplay_errors = Offmbstring.func_overload = 0
; акселератор обязателенopcache.max_accelerated_files = 100000opcache.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.cnfApache: /etc/httpd/bx/custom/z_bx_custom.confPHP: /etc/php.d/z_bx_custom.ininginx: /etc/nginx/bx/settings/z_bx_custom.confnginx (посайтово): /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');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.phpPHP в командной строке должен работать от того же пользователя и с теми же настройками, что и веб-сервер, иначе появятся проблемы с правами на файлы кеша.
4. Push-сервер
'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, а требования к версии СУБД со временем растут.
Связанные темы
- Архитектура платформы - что где лежит в проекте
- Docker-окружение - тот же чек-лист требований, собранный для контейнеров, а не для выделенного сервера
- События и агенты - как устроены агенты
- Инфраструктура сервера - тонкая настройка nginx и Apache
- Тестирование и выкладка - релизный процесс
- Установка и настройка BitrixVM - готовое окружение вместо ручной сборки
- Раздел Основы
- Git и выкладка проекта: что версионировать и как переносить - перенос правок между стендами
- Стенд разработчика - копия боевого без его связей