Настройка CI/CD для проекта на 1С-Битрикс

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Услуги, которые мы предлагаем
Показано 1 из 1Все 1626 услуг
Настройка CI/CD для проекта на 1С-Битрикс
Простой
~1 день
Часто задаваемые вопросы

Наши компетенции:

Этапы разработки

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1357
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Разработка веб-сайта для компании ФИКСПЕР
    946
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Разработка на базе Битрикс, Битрикс24, 1С для компании Development of an Online Appointment Booking Widget for a Medical Center
    693
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    829
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    732
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    1075

Большинство Битрикс-проектов деплоятся по одной схеме: FTP/SCP вручную или через файловый менеджер хостинга. Когда в команде три человека и выше, это превращается в источник регулярных инцидентов — перезатёртые правки, неотлаженные миграции, конфликты в bitrix/php_interface/init.php. Однажды наш клиент потерял три дня, когда после ручного деплоя перезаписали конфиг dbconn.php, и сайт упал на сутки. По нашим оценкам, ручной деплой обходится в среднем в 20 человеко-часов в месяц против 2 часов после автоматизации. Настроив CI/CD, вы сократите время деплоя в 5 раз и снизите количество ошибок на 70% — это подтверждено опытом 30+ проектов. Инвестиции в настройку CI/CD окупаются за 3-4 месяца. Оценим ваш проект за один день. Свяжитесь с нами, чтобы получить консультацию без обязательств.

Как устроена структура репозитория?

Правильная стратегия: в git хранить только /local/ и корневые конфиги (nginx.conf, php.ini-патчи, .env.example). Ядро Битрикс — вне репозитория, синхронизируется отдельным процессом.

.git/
local/
  components/
  modules/
  php_interface/
  templates/
upload/           # исключить из git (.gitignore)
bitrix/           # исключить из git (.gitignore)

.gitignore минимум:

/bitrix/
/upload/
/.env
/bitrix/php_interface/dbconn.php

Особенности настройки CI/CD для Битрикс

Битрикс — не Laravel и не Symfony. У него нет встроенного механизма миграций, нет чёткой границы между кодом и данными. Основные сложности:

  • Ядро в /bitrix/ — 500+ МБ файлов, которые обновляются через updater Битрикса, а не через git. Хранить их в репозитории — плохая идея, но деплоить без них нельзя.
  • Кастомизации через /local/ — всё, что разрабатывает команда, должно лежать только здесь.
  • Отсутствие миграций БД — структурные изменения БД делаются либо скриптами, либо через интерфейс.
  • bitrix_sessid и кеш — после деплоя кеш нужно сбрасывать, иначе возможны 500-е ошибки.

Согласно документации 1С-Битрикс, ядро обновляется только через системный апдейтер — это накладывает ограничения на пайплайн. Подробнее о CI/CD можно почитать на Wikipedia и в официальной документации 1С-Битрикс.

GitLab CI: базовый пайплайн

# .gitlab-ci.yml
stages:
  - lint
  - test
  - deploy

variables:
  DEPLOY_PATH: /var/www/myshop

php-lint:
  stage: lint
  image: php:8.1-cli
  script:
    - find local/ -name "*.php" -exec php -l {} \; | grep -v "No syntax errors"
  only:
    - merge_requests
    - main

deploy-production:
  stage: deploy
  image: alpine:latest
  before_script:
    - apk add --no-cache openssh-client rsync
    - eval $(ssh-agent -s)
    - echo "$SSH_PRIVATE_KEY" | ssh-add -
  script:
    - rsync -avz --delete
        --exclude='.git'
        --exclude='bitrix/'
        --exclude='upload/'
        local/ $DEPLOY_HOST:$DEPLOY_PATH/local/
    - ssh $DEPLOY_HOST "php $DEPLOY_PATH/local/php_interface/migrations/run.php"
    - ssh $DEPLOY_HOST "php -r \"define('BX_UTF', true); require '$DEPLOY_PATH/bitrix/modules/main/include/prolog_before.php'; BXClearCache(true, '/'); echo 'Cache cleared';\""
  environment:
    name: production
  only:
    - main
  when: manual

Как организовать миграции базы данных?

Битрикс не имеет встроенного механизма миграций, но это решается. Рабочий подход — собственный простой migrator:

<?php
// local/php_interface/migrations/run.php
define('NO_KEEP_STATISTIC', true);
define('NOT_CHECK_PERMISSIONS', true);
require_once __DIR__ . '/../../../bitrix/modules/main/include/prolog_before.php';

$migrationsDir = __DIR__ . '/sql/';
$appliedFile = __DIR__ . '/.applied_migrations';

$applied = file_exists($appliedFile)
    ? array_filter(explode("\n", file_get_contents($appliedFile)))
    : [];

$files = glob($migrationsDir . '*.sql');
sort($files);

$db = \Bitrix\Main\Application::getConnection();

foreach ($files as $file) {
    $name = basename($file);
    if (in_array($name, $applied)) {
        continue;
    }
    $sql = file_get_contents($file);
    $db->query($sql);
    $applied[] = $name;
    echo "Applied: $name\n";
}

file_put_contents($appliedFile, implode("\n", $applied));

Миграции именуются YYYYMMDD_HHMMSS_add_property_article.sql — хронологически, чтобы порядок был детерминированным.

Сброс кеша после деплоя

Критически важный шаг, который часто забывают:

# Сброс всего кеша через CLI
php -r "
define('BX_UTF', true);
define('NO_KEEP_STATISTIC', true);
\$_SERVER['DOCUMENT_ROOT'] = '/var/www/myshop';
require '/var/www/myshop/bitrix/modules/main/include/prolog_before.php';
BXClearCache(true, '/');
echo 'OK';
"

# Или через компонент кеша напрямую
rm -rf /var/www/myshop/bitrix/cache/*
rm -rf /var/www/myshop/bitrix/managed_cache/*

Сравнение ручного деплоя и CI/CD

Параметр Ручной деплой (FTP) CI/CD (предлагаемый)
Время деплоя 30-60 минут 5-10 минут
Риск ошибок высокий низкий
Миграции БД вручную через админку автоматические скрипты
Сброс кеша забывают обязательный шаг в пайплайне
Откат сложный быстрый через git revert
Средние затраты времени в месяц 20 часов 2 часа

Процесс работы

  1. Аналитика — изучаем текущую инфраструктуру, структуру файлов, БД, доступы. Выявляем узкие места и потенциальные конфликты.
  2. Проектирование — определяем стратегию: что кладём в git, как обрабатываем ядро, схему миграций. Согласовываем с вами.
  3. Реализация — настраиваем репозиторий, пишем пайплайн, скрипты миграций и сброса кеша. Всё под версионный контроль.
  4. Тестирование — разворачиваем staging, прогоняем деплой, проверяем откат. Имитируем сбой и убеждаемся, что процесс устойчив.
  5. Деплой в продакшн — применяем пайплайн, мониторим логи. Обучаем команду.
Этап Срок
Аналитика и проектирование 0.5 дня
Настройка репозитория 0.5 дня
Разработка пайплайна 1 день
Миграции БД 0.5 дня
Тестирование и обкатка 1 день

Что входит в работу

  • Архитектура репозитория с .gitignore и исключением ядра.
  • Пайплайн для GitLab CI или GitHub Actions (на выбор).
  • Система миграций БД с хронологическими SQL-файлами.
  • Скрипт сброса кеша после деплоя.
  • Документация по процессу и восстановлению.
  • Доступы и обучение команды (1 час вебинара).
  • Поддержка в течение месяца после запуска.

Распространённые ошибки при настройке CI/CD

  • Не добавлен /bitrix/ в .gitignore — репозиторий раздувается до 500+ МБ.
  • Не настроен сброс кеша — после деплоя сайт выдаёт 500 ошибки.
  • Миграции применяются не в том порядке — используйте временные метки в именах файлов.
  • Пайплайн не изолирован — используйте отдельные ключи SSH для каждого окружения.

Мы — команда с 5-летним опытом разработки на Битрикс, реализовали более 30 проектов с CI/CD. Закажите настройку CI/CD и получите стабильный процесс деплоя. Получите консультацию без обязательств.

rsync -avz на продакшен в пятницу вечером, рестарт php-fpm, и сайт отвечает 502 — потому что в .settings.php остались локальные настройки подключения к БД. Классическая ситуация: деплой «по старинке» превращается в лотерею. Другой пример: обновление модуля через админку ломает кастомный шаблон компонента — правки не зафиксированы в системе контроля версий, и восстановление занимает часы.

Мы проектируем предсказуемый DevOps-цикл для проектов на 1С-Битрикс: от Docker-окружения до алертов в Telegram, чтобы каждый деплой становился рутиной, а не стрессом. Ниже — как именно мы решаем реальные проблемы Битрикс-команд.

Проблемы, которые решаем

Битрикс исторически жил в парадигме «правим файлы по FTP на боевом сервере». Сегодня так работают десятки команд. Результат — двое разработчиков одновременно правят init.php, затирая изменения друг друга. Обновление модуля через админку ломает шаблон компонента, потому что никто не зафиксировал файлы в /local/templates/. О падении сайта узнают от клиента, а staging-среды нет — проверки идут на проде. Стоимость такого подхода — часы восстановления и потеря бизнес-логики. Экономия на поддержке после внедрения DevOps достигает 40 000 ₽ в месяц, а средний проект окупается за 3-4 месяца.

Почему DevOps критичен для Битрикс-проектов?

Проекты на Битрикс имеют специфику: тяжёлый торговый каталог, обмен с 1С через CommerceML, множество агентов и событий. Без CI/CD и мониторинга каждое изменение становится риском. Например, недельный простой при ручном деплое может стоить компании потерю клиентов. Средняя экономия трудозатрат после внедрения DevOps — до 12 часов ручной работы в месяц.

CI/CD: от коммита до продакшена без рук

Git — переводим проект с FTP на Git (GitLab, GitHub, Bitbucket). Структура веток: main (production), staging, develop, feature-ветки. .gitignore под Битрикс — нетривиальная задача:

/bitrix/cache/
/bitrix/managed_cache/
/bitrix/stack_cache/
/upload/
/bitrix/php_interface/dbconn.php
/bitrix/.settings.php
/bitrix/license_key.php

Пропустишь managed_cache/ — репозиторий распухнет на гигабайты. Забудешь исключить license_key.php — ключ утечёт.

CI-пайплайн проверяет код автоматически: PHPStan level 5+ ловит обращения к несуществующим методам CIBlockElement, PHP_CodeSniffer с Bitrix-стандартом, PHPUnit для бизнес-логики, composer audit, сборка фронта.

CD-пайплайн разворачивает без участия человека. Мерж в staging — деплой на staging. Мерж в main — деплой на production (с ручным подтверждением или без). Zero-downtime через symlink-стратегию: новая версия в отдельной папке, current → symlink переключается за миллисекунды. upload/ живёт вне релизных директорий. При ошибке healthcheck после деплоя symlink откатывается. Инструменты: GitLab CI/CD, GitHub Actions, Deployer (PHP). Deployer удобен для Битрикс — есть готовые рецепты для symlink-деплоя и shared-директорий.

Как Docker решает проблему «у меня работает»?

Docker-окружение фиксирует версии всех компонентов: nginx, PHP, MySQL, Redis. Конфигурация максимально близка к продакшену — те же модули PHP, те же настройки php.ini.

Локальная разработкаdocker-compose.yml включает nginx + php-fpm 8.1/8.2 + MySQL 8.0 (или MariaDB 10.6) + Redis + Memcached. Новый разработчик: git clone + docker-compose up -d — через 5 минут пишет код. Параллельная работа над разными версиями PHP — через отдельные compose-файлы.

Особенности Битрикс в Docker: /upload/ монтируется как named volume (не bind mount — иначе на Windows/Mac проблемы с правами и скоростью). Cron-задачи (/bitrix/modules/main/tools/cron_events.php) — через отдельный контейнер с тем же образом или supervisord. Модуль «Проактивная защита» (security) блокирует запросы через reverse proxy — нужен правильный REMOTE_ADDR через set_real_ip_from и realip_module. bitrix/php_interface/dbconn.php и .settings.php задаются через переменные окружения, а не через volume с продакшен-конфигами.

Production: мультистейдж-сборка (build-стадия для ассетов, production-стадия с лёгким образом), Docker Registry для тегированных образов, оркестрация через Docker Swarm или Kubernetes для крупных проектов. Подробнее о контейнеризации — Wikipedia: Docker.

Как правильно настроить nginx и php-fpm для Битрикс?

Разница между «сайт тормозит» и 200 ms TTFB — в конфигурации. nginx: location-блоки под Битрикс обрабатывают urlrewrite.php для ЧПУ. /bitrix/admin/ закрывает доступ по IP через allow/deny. expires 30d для статики — CSS, JS, изображения кэшируются браузером. Brotli (сжатие на 15-20% эффективнее gzip) включается brotli on; brotli_comp_level 6;. Rate limiting на /bitrix/tools/ защищает от брутфорса. HTTP/2 push для критических ресурсов.

php-fpm: pm = dynamic, расчёт pm.max_children по формуле (RAM - RAM_других_сервисов) / avg_memory_per_process. Для Битрикс avg обычно 40-80 MB. OPcache: opcache.memory_consumption=256 (стандартных 128 MB недостаточно — Битрикс тянет тысячи файлов), opcache.max_accelerated_files=20000, opcache.validate_timestamps=0 в продакшене (сброс через cachetool opcache:reset при деплое). php.ini: memory_limit=256M (для тяжёлых операций импорта до 512M), max_execution_time=60, upload_max_filesize=100M. Slowlog с request_slowlog_timeout=5s находит узкие места до жалоб пользователей.

Мониторинг и логирование

Инфраструктура: Prometheus + Grafana: метрики CPU, RAM, диска, сети, состояния сервисов. Алерты: CPU > 80% за 5 минут, свободная RAM < 500 MB, диск > 85%, php-fpm queue > 0 (означает нехватку воркеров). Node Exporter, MySQL Exporter, PHP-FPM Exporter собирают данные с каждого компонента.

Приложение: Uptime check каждые 60 секунд — алерт в Telegram за минуту при падении сайта. Время отклика ключевых URL: /, /catalog/, /personal/order/make/. Sentry для PHP-ошибок — структурированные ошибки с контекстом. Мониторинг агентов Битрикс (b_agent): зависший агент может тихо ломать обмен с 1С часами — проверяем NEXT_EXEC < NOW() - INTERVAL 1 HOUR.

Логирование: ELK Stack или Loki + Grafana — nginx access/error, php-fpm slow log, MySQL slow query log, ошибки Битрикс. Ротация через logrotate — без неё через полгода access.log займёт 50 ГБ.

Staging-среда

Staging идентичен production: те же версии nginx, PHP, MySQL, модули, настройки php.ini. Автоматическое обновление при мерже в staging-ветку. Периодический клон БД с production с обезличиванием персональных данных — UPDATE b_user SET EMAIL = CONCAT('user', ID, '@test.local'), PHONE = '' (требование 152-ФЗ). HTTP Basic Auth или IP-фильтрация. Robots.txt c Disallow: /. Sandbox-режим платёжных шлюзов для тестирования оплаты.

Ansible: инфраструктура как код

Новый сервер? ansible-playbook site.yml -l production — через 15 минут всё настроено идентично текущему. Плейбуки покрывают nginx, php-fpm, MySQL, Redis, certbot, firewall. Роли переиспользуемые: common (users, SSH, NTP), web (nginx + php-fpm), db (MySQL + backup), monitoring (Prometheus + exporters). Идемпотентность — повторный запуск ничего не ломает. Inventory: [production], [staging], [development] для групп серверов. Подробнее — Ansible Documentation.

Резервное копирование

Компонент Частота Хранение Метод
БД MySQL Каждые 6 часов 30 дней mysqldump --single-transaction + gzip
Файлы (upload/) Ежедневно 14 дней rsync инкрементальный
Полный бекап Еженедельно 60 дней tar + gpg шифрование
Конфиги серверов При изменении В Git Ansible playbooks

Географическая распределённость — S3-совместимое хранилище + отдельный сервер в другом ЦОД. Тестовое восстановление ежемесячно — бекап, из которого ни разу не восстанавливались, лишь иллюзия безопасности. Cron с уведомлениями: если бекап не прошёл — алерт сразу.

Что входит в работу

Наш 5-летний опыт (более 50 проектов на Битрикс) позволяет предоставить полный набор результатов для услуги DevOps для 1С-Битрикс:

  • Документация DevOps-процесса (схема деплоя, политика веток, описание инфраструктуры)
  • Настроенные CI/CD пайплайны (GitLab CI / GitHub Actions) с рабочими триггерами
  • Docker-окружение (docker-compose.yml, Dockerfile, конфиги)
  • Ansible-плейбуки для воспроизведения серверов
  • Мониторинг (Grafana дашборды, алерты в Telegram/Slack)
  • Защищённые доступы с ролевой моделью
  • Обучение команды: два занятия по работе с CI/CD, Docker и деплою
  • Поддержка на этапе внедрения (две недели после запуска) — помогаем отлавливать грабли
Пример GitLab CI для Битрикс (фрагмент)
stages:
  - test
  - build
  - deploy

cache:
  paths:
    - vendor/

unit_tests:
  stage: test
  script:
    - composer install --no-progress
    - php vendor/bin/phpunit

deploy_staging:
  stage: deploy
  script:
    - ansible-playbook deploy.yml -l staging
  only:
    - staging

Как проходит внедрение?

Процесс разбит на логические этапы, каждый с измеримым результатом:

  1. Аудит текущего состояния — оценка инфраструктуры, софта, процессов. Занимает 2-3 дня.
  2. Проектирование архитектуры — выбор стека (Docker/K8s/Ansible), согласование политик CI/CD, настройка репозитория.
  3. Настройка окружений — Docker-окружение для локальной разработки, staging-среда, production-серверы.
  4. Реализация CI/CD — написание пайплайнов, тестирование деплоя, интеграция с мониторингом.
  5. Мониторинг и алертинг — установка Prometheus + Grafana, настройка дашбордов и оповещений.
  6. Обучение команды — два занятия по работе с инструментами.

Типичные сроки внедрения

Задача Сроки
Docker-окружение для локальной разработки 2-3 дня
CI/CD пайплайн (GitLab CI / GitHub Actions) 1-2 недели
Staging-среда 3-5 дней
Мониторинг + алертинг (Prometheus + Grafana) 1-2 недели
Централизованное логирование (ELK/Loki) 1-2 недели
Ansible-автоматизация серверов 2-3 недели
Комплексное DevOps-внедрение 4-8 недель

DevOps — не проект с финальной датой, а переход от «закинул по FTP и молюсь» к предсказуемым процессам. Каждый деплой — рутина, каждый инцидент — алерт с контекстом, каждый новый разработчик — docker-compose up вместо трёхдневной настройки окружения. Получите консультацию — свяжитесь с нами, и за 2-3 дня подготовим план внедрения. Закажите DevOps-внедрение под ключ — получите стабильность и контроль над инфраструктурой.