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

Инфраструктура и эксплуатация 1С-Битрикс

Раздел - про всё, что находится вокруг кода. Веб-сервер под 1С-Битрикс настраивают вручную, а вместо штатного поиска подключают Sphinx. Сайт связывают с доменной авторизацией NTLM/AD, а несколько сайтов разводят на одной копии платформы. Проект тестируют от модульных тестов на PHPUnit до нагрузочных. Изменения переносят между окружениями, не теряя данные при релизе. В разделе четыре статьи, и они не пересказывают друг друга. Похожая на первый взгляд статья «Окружение и деплой» из «Основ» - про другое. У каждой статьи свой предмет и своё время действия.

Как устроено

Четыре статьи раздела делятся на две пары, и делит их не тема, а момент времени. Первая пара - «Сервер и поиск» и «Мультисайтовость». Это то, что настраивают один раз и трогают редко: конфигурация, а не код. Вторая пара - «Тестирование и выкладка» и «Модульное тестирование». Это процесс, который повторяется на каждом релизе. Первая пара про состояние системы, вторая - про то, как менять это состояние безопасно, не сломав уже настроенное.

Раздел не дублирует «Окружение и деплой» из «Основ». Та статья - про готовый автоматизированный стек BitrixVM, который поднимается и обновляется собственным консольным меню платформы. Здесь - то, что в этот стек не входит или требует ручной донастройки. Это Sphinx как альтернативный бэкенд поиска и доменная авторизация через NTLM и Active Directory. Сюда же разбор того, почему связка nginx с Apache устроена именно так, а не иначе. Если читаете «Окружение», а нужный вопрос там не находится, - вероятно, ответ здесь.

Идемпотентные скрипты миграций из «Тестирования и выкладки» - частный случай общего приёма. Приём звучит так: «не редактируй состояние напрямую, опиши изменение воспроизводимо». В статье раздела он разобран целиком: номер версии хранится в настройках модуля, а каждый шаг безопасно повторить. Результат не зависит от того, что уже применено на конкретном сервере. Похожий по духу приём для конфигурации самого сервера здесь не описан. Он в статье «Окружение и деплой» раздела «Основы». Там свои настройки nginx и MySQL хранят в файлах с префиксом z_bx_custom, которые переживают обновление окружения.

Общая цель этих тем - устранить расхождение между тем, что должно быть, и тем, что есть на самом деле. Права на файлы должны совпадать для веб-сервера и заданий по расписанию. Иначе процессы начинают видеть разные наборы файлов. Тестовое окружение должно быть точной копией боевого, иначе тестирование ничего не гарантирует. Резервная копия и снимок делаются заранее, а не в момент, когда что-то уже пошло не так. Заглушка платформенного класса в модульном тесте - тот же риск на уровне кода. Пока она отражает настоящее поведение API, тесты полезны. Как только заглушка начинает жить своей жизнью, зелёные тесты перестают что-либо гарантировать. Четыре разные формулировки одного и того же требования: воспроизводимость важнее удобства момента.

Что нужно сделать

НужноСмотрите
Настроить веб-сервер, поиск и почту под платформуСервер и поиск
Поднять несколько сайтов на одной копии платформыМультисайтовость
Выкатывать изменения без ручного копирования файловТестирование и выкладка
Покрыть свой код тестами, которые гоняются в CIМодульное тестирование

С чего начать

Новичок, который настраивает сервер впервые. Начните с «Сервер и поиск» - там разобрана рекомендованная связка nginx и Apache.

Поиск или доменная авторизация тормозят или работают не так, как ожидалось. Сразу к нужному разделу статьи «Сервер и поиск». Sphinx и NTLM разобраны там как самостоятельные темы. Читать статью целиком не обязательно.

Нужно завести второй сайт на той же копии платформы. «Мультисайтовость» - оба способа развести сайты. Там же - как определяется текущий сайт по домену и по папке. Отдельно - что придётся прописать вручную, а что платформа определит сама.

В проекте нет процесса релизов, а изменения выкладывают на глаз. «Тестирование и выкладка» - весь путь от миграций структуры базы до плана отката. Особенно важно, если структуру базы до сих пор правили вручную прямо на боевом сервере.

Хотите проверять свой код тестами, а не только руками при каждом релизе. «Модульное тестирование» - как запустить PHPUnit при ядре, которое держит глобальное состояние. Заодно - что стоит тестировать без ядра вообще.

Темы раздела

  • Сервер и поиск: то, что настраивают один раз и вне готового стека BitrixVM - веб-сервер вручную, Sphinx, доменная авторизация.
  • Мультисайтовость: тоже конфигурация, а не код - несколько сайтов на одной копии платформы, на одном домене или на разных.
  • Тестирование и выкладка: процесс, который повторяется на каждом релизе - тесты, нагрузка, миграции структуры базы, откат.
  • Модульное тестирование: тот же процесс крупным планом - как писать и запускать тесты на PHPUnit при ядре, которое держит глобальное состояние.

Практика раздела

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

Чем «Сервер и поиск» отличается от «Окружения и деплоя» из «Основ» - разве не об одном и том же?

«Окружение и деплой» - про готовый автоматизированный стек BitrixVM: как его развернуть, где в нём место для своих настроек, как обновляться. «Сервер и поиск» - про то, что в этот стек не входит по умолчанию или требует ручной работы: подключение Sphinx вместо встроенного поиска, доменная авторизация NTLM, тонкости связки nginx и Apache. Разумный порядок - сначала «Окружение», потом эта статья по мере необходимости.

Sphinx, доменная авторизация и связка nginx с Apache - обязательно настраивать всё сразу?

Нет, это три независимые подсистемы под разные поводы. Sphinx подключают, когда штатный поиск не справляется с нагрузкой или скоростью. Доменная авторизация нужна только там, где вход идёт через AD/NTLM. Схема nginx плюс Apache касается вообще любого проекта на собственном сервере, отдельно от первых двух. Настраивать все три сразу в реальности почти не приходится - обычно каждая подсистема появляется в проекте по своему поводу и в своё время.

С какой статьи начинать, если проект уже в проде и просто нужно навести порядок в процессе релизов?

С «Тестирования и выкладки» - там разобраны именно организационные вещи: идемпотентные миграции вместо ручной правки структуры базы, цепочка окружений разработка-тест-бой, резервная копия и снимок перед каждым релизом. «Сервер и поиск» в этом случае нужен только по конкретному поводу - например, если заодно решили подключить Sphinx.

Что объединяет права на файлы, тестовое окружение как копию боевого и снимок перед выкладкой?

Все три - про устранение расхождения между тем, что должно быть, и тем, что есть на самом деле. Одинаковые права нужны, чтобы веб-сервер и cron видели одни и те же файлы. Тестовое окружение как копия боевого нужно, чтобы результат тестирования что-то значил. Снимок перед выкладкой нужен, чтобы откат занимал минуты, а не часы разбирательств. Это один и тот же принцип воспроизводимости, вид с трёх разных сторон.

Связанные разделы

  • Основы разработки - окружение BitrixVM и структура проекта - обязательный контекст перед ручной донастройкой сервера.
  • Производительность - веб-кластер и композитный сайт - соседние темы масштабирования и отдачи статики.
  • Модули - установщик модуля и его версия - тот же принцип воспроизводимых изменений, что и в миграциях базы данных.
  • Интеграции - обмен с 1С и push-сервер - серверные подсистемы, которые тоже нужно разворачивать и эксплуатировать.