Не создатели, а пользователи должны параметризовать процедуры. (Алан.Дж.Перлис)

Настраиваем сервер под интернет-магазин на 1С-Битрикс до первого покупателя


Настраиваем сервер под интернет-магазин на 1С-Битрикс до первого покупателя

Как-то раз мы озаботились вопросом, насколько хорошо наш сайт видят нейросети: часто ли они его цитируют и рекомендуют в ответах на запросы. Для начала решили проверить логи веб-сервера. Роботы Яндекса и Google заходили как обычно, смотрели страницы, индексировали. Роботов Bing и OpenAI за две недели не нашлось ни одного настоящего. Сайт на 1С-Битрикс при этом работал, robots.txt их не запрещал, в настройках всё было открыто. Запросы из зарубежных дата-центров отсекала по IP защита хостинга, и заметить это можно было только по логам.

Таких мест на сервере магазина несколько, и большинство всплывает уже после запуска: первым тяжёлым обменом с 1С, первым письмом о заказе, которое не ушло, первой резервной копией, из которой ничего не развернулось. Мы в IT Panda собрали настройки, которые проверяем на сервере до запуска каждого магазина: PHP и окружение, база данных, кеш, агенты и cron, обмен с 1С, резервные копии и логи. Параметры и цифры сверены с курсами 1С-Битрикс осенью 2026 года.

PHP и окружение

Битриксу нужен PHP 8.2.0 и выше, этот минимум действует с 1 февраля 2026 года, а рекомендуют уже 8.4. База данных: MySQL 8.0 и выше или MariaDB. В требованиях параметры PHP даны готовыми строками:

  • memory_limit = 256M;
  • max_input_vars = 10000;
  • realpath_cache_size = 4096k;
  • max_execution_time = 300;
  • date.timezone должен быть задан.

Для OPcache в инструкции по сборке окружения названы opcache.max_accelerated_files = 100000 и opcache.revalidate_freq = 0, то есть проверка изменений файлов на каждом запросе. В ядре десятки тысяч файлов, и стандартного лимита на их число в кеше байт-кода не хватает.

Готовая сборка называется «1С-Битрикс: Веб-окружение», актуальная версия 9.0.10 вышла в марте 2026 года. Спереди в ней стоит nginx, бэкендом служит Apache, PHP по умолчанию 8.2. Отдельный пул php-fpm под обмен с 1С, который часто советуют в статьях, здесь сделать не на чем: он возможен только на стеке, собранном вручную. Свои настройки в окружении держат в файлах, которые переживают обновление: /etc/php.d/z_bx_custom.ini, /etc/mysql/conf.d/z_bx_custom.cnf, /etc/httpd/bx/custom/z_bx_custom.conf. Правки стандартных конфигов при обновлении теряются.

Число процессов веб-сервера считают от памяти. В top смотрят, сколько занимает один процесс Apache (столбец RES), и ограничивают их количество так, чтобы все вместе заняли до 80 % памяти, оставшейся после базы данных. В курсе для хостеров разобрана ошибка: предел поставили в 100 процессов при размере процесса около 250 МБ, и 5 ГБ памяти с 4 ГБ подкачки закончились на сороковом. Сервер завис. Для php-fpm тот же расчёт переносится на pm.max_children.

База данных

Кодировка базы – utf8mb4: с версии 24.0.0 Битрикс поставляется только в UTF-8. Сортировку берут utf8mb4_0900_ai_ci для MySQL и utf8mb4_unicode_ci для MariaDB.

В свежей инструкции по сборке окружения заданы transaction-isolation = READ-COMMITTED и innodb_flush_log_at_trx_commit = 2. Старый урок того же курса до сих пор советует ноль. При двойке секунда последних транзакций теряется только при падении всей машины, при нуле ещё и при падении самого MySQL, поэтому для магазина с заказами мы берём двойку. Журнал медленных запросов включите до запуска, чтобы первые тяжёлые запросы от живых покупателей сразу в него попали.

Кеш и композит

По умолчанию кеш лежит в файлах. Для memcached правят два файла: в /bitrix/php_interface/dbconn.php задают константы BX_CACHE_TYPE, BX_CACHE_SID, BX_MEMCACHE_HOST и BX_MEMCACHE_PORT, в /bitrix/.settings_extra.php добавляют секцию cache. Redis подключают через секцию cache в /bitrix/.settings.php. Хранение сессий настраивают там же, в секции session. Время ответа замерьте до переноса и после. На быстром диске файловый кеш может оказаться не медленнее, и тогда перенос ничего не даст.

Композитный режим отдаёт страницу из готового HTML и подгружает персональные блоки следом. Кто именно отдал страницу, видно по заголовку X*-Bitrix-Composite. Проверяется одной командой: curl -sI https://ваш-сайт/ | grep -i composite. Значения Nginx (file) и Nginx (memcached) означают, что ответил nginx без запуска PHP. Cache (200) говорит, что страницу из композитного кеша отдал PHP.

Агенты и cron

Фоновые задачи в Битриксе называются агентами и по умолчанию выполняются на хитах посетителей. Кто-то открыл страницу, и заодно ушли письма и пересчитались скидки. Перенос на cron бывает частичным и полным, и их легко перепутать.

Частичный: опции главного модуля agents_use_crontab ставят значение Y и добавляют в cron штатный скрипт /bitrix/modules/main/tools/cron_events.php. После этого cron запускает только непериодические агенты. Периодические остаются на хитах.

Полный перенос делается в четыре действия:

  1. Опциям agents_use_crontab и check_agents ставят значение N.
  2. В dbconn.php добавляют строку if(!(defined("CHK_EVENT") && CHK_EVENT===true)) define("BX_CRONTAB_SUPPORT", true);.
  3. Создают свой скрипт /bitrix/php_interface/cron_events.php по образцу из курса.
  4. В crontab пользователя, под которым работает веб-сервер, добавляют строку */1 * * * * /usr/bin/php -f /home/bitrix/www/bitrix/php_interface/cron_events.php.

Опасен перенос, брошенный на середине. Константа определена, задачи в cron нет – агенты встают, и письма о заказах перестают уходить. После полного переноса почту тоже отправляет скрипт из cron. Сколько писем уходит за проход, задаёт опция mail_event_bulk, в примере из курса её поднимают до 20. После смены версии PHP отдельно проверьте, какой интерпретатор запускает cron.

Обмен с 1С

Тяжелее всего серверу даётся обмен. Запускать две процедуры обмена одновременно Битрикс запрещает прямо: вторая затирает временную таблицу первой. Если товары выгружаются раз в час и остатки каждые 15 минут, выгрузку остатков сдвигают на несколько минут от начала часа.

Ещё два отказа обмена выглядят как ошибки 1С, хотя причина на сервере. Компонент не пустит 1С, если часы веб-сервера и сервера базы расходятся больше чем на десять минут. Ошибка PHP о нехватке памяти посреди импорта означает, что memory_limit не хватило на обработку картинок.

Резервные копии и логи

Резервную копию по расписанию делает скрипт /bitrix/modules/main/tools/backup.php, его ставят в cron от пользователя веб-сервера. Локальные копии лежат в /bitrix/backup, и оставлять их только там нельзя. В облаке 1С-Битрикс хранятся три последние копии, объём зависит от редакции: 4 ГБ у «Малого бизнеса» и 10 ГБ у «Бизнеса». Один раз восстановитесь из копии на тестовой машине: только так выясняется, что она полная и разворачивается.

И проверьте по логам, что запросы роботов доходят до сервера и получают код 200. На нашем сайте из начала статьи мы поставили перед хостингом обратный прокси на отдельном виртуальном сервере. Через три дня робот OpenAI обошёл 366 страниц, а робот Bing за первую неделю октября сделал 228 запросов.

Кто за что отвечает

На стыке разработчика и администратора теряются cron, почта и резервные копии: каждая сторона считает их чужой работой. До запуска пройдите этот список вместе с подрядчиком и запишите, кто что делает. У нас установка системы и настройка хостинга стоят в смете отдельной строкой, пример такой разбивки есть на itpanda.ru/sozdanie-internet-magazina/.

Редактор: AndreyEx

Если статья понравилась, поделитесь ей в социальных сетях

Оставить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Это может быть вам интересно


Спасибо!

Теперь редакторы в курсе.

Прокрутить страницу до начала