Как настроить миграции БД в 1С-Битрикс через sprint.migration?

Как настроить миграции БД в 1С-Битрикс через sprint.migration?

На практике часто так: на локалке вы создали инфоблок «Акции», запушили шаблоны в git — а на тесте каталог пустой, потому что тип инфоблока есть только в вашей базе. Коллеги вручную кликают админку и ломают прод. Это не перенос сайта — это рассинхрон структуры БД между dev, staging и production. Модуль sprint.migration превращает правки в файлы в git. К концу гайда вы установите модуль, создадите миграцию инфоблока и прогоните её на стендах через консоль.

Миграции sprint.migration - это версионирование изменений базы данных CMS: инфоблоки, highload-блоки, пользовательские поля, агенты. Файлы лежат в /local/php_interface/migrations/, накатываются командой up и откатываются через down. Перед production всегда делайте свежий дамп БД и прогоняйте те же миграции на staging. Это другой процесс, чем перенос всего сайта с SEO и 301-редиректами.

Речь про коробочную CMS 1С-Битрикс: Управление сайтом на вашем сервере, не про облачный портал Bitrix24. Если вы только переносите проект с другого хостинга - смотрите гайд по переносу сайта на Битрикс. Здесь - ежедневный dev-workflow: структура БД едет в git вместе с кодом, как composer.lock.

Разберите, когда нужны миграции БД, а когда хватит админки

Таблица: миграции БД sprint.migration vs ручная админка vs перенос сайта

База данных CMS хранит не только товары и статьи, но и "скелет" сайта: типы инфоблоков, свойства, highload-блоки, почтовые шаблоны, агенты. Код шаблонов лежит в git, а структура БД - нет, пока вы не завели миграции.

Ситуация Ручная правка в админке Миграция sprint.migration
Один раз поправили текст на проде Да Нет
Новый тип инфоблока на dev для всей команды Риск забыть шаг на staging Да - файл в git, up на каждом стенде
Перенос сайта на другой домен и хостинг Нет Нет - это перенос CMS, не sprint.migration
Highload-блок для справочника городов Долго повторять вручную Да - билдер HL или миграция из админки

Делайте: любое изменение схемы, которое должно повториться на staging и prod, оформляйте миграцией. Не делайте: не путайте sprint.migration с облачной CRM — у неё другой API и нет общего git-workflow.

Установите sprint.migration через Маркетплейс или Composer

Схема установки sprint.migration: Маркетплейс, Composer, git, staging, production

Модуль бесплатный (MIT), автор Andrey Ryabin. Официальное имя в админке - "Миграции для разработчиков". Перед установкой создайте каталог /local/php_interface/ - иначе модуль может положить migrations в /bitrix/php_interface/, и путь не совпадет с best practice /local/.

  1. Создайте папки /local/php_interface/ и при необходимости /local/modules/ на dev.
  2. Установите модуль: Маркетплейс sprint.migration или Composer: composer require andreyryabin/sprint.migration с путем в local/modules/.
  3. Проверьте версию: на Packagist актуальна 5.13.0 (июль 2026), в карточке Маркета может быть старее - в команде лучше зафиксировать одну версию в composer.json.
  4. Откройте настройки: Настройки - Настройки продукта - Миграции для разработчиков или /bitrix/admin/settings.php?mid=sprint.migration.
  5. Убедитесь, что каталог миграций - /local/php_interface/migrations (архив - migrations.archive).
  6. Создайте алиас консоли /local/bin/migrate.php, который подключает bitrix/modules/sprint.migration/tools/migrate.php.

На Symfony 3.20+ есть bundle и php bin/console sprint:migration. Без Symfony - migrate.php из tools модуля.

Делайте: один способ установки на всю команду (Composer или Маркет). Не делайте: не смешивайте версии модуля на dev и prod - билдеры ведут себя по-разному.

Создайте первую миграцию через админку и консоль

Чеклист первой миграции: админка sprint.migration, консоль up/down

Миграция — PHP-файл с классом Version: метод up() накатывает изменения, down() откатывает. Состояния: New (файл есть, в БД записи нет), Installed (накатана), Unknown (запись в БД без файла). В реальном проекте Unknown — типичная ошибка после git revert, когда файл удалили, а запись в таблице модуля осталась.

Через админку: Настройки - Миграции для разработчиков - Миграции (cfg) - кнопки "Создать миграцию для инфоблока", HL-блока, UF и др. Файл появится в /local/php_interface/migrations/. Допишите down(), если билдер оставил заглушку.

<?php

namespace Sprint\Migration;

class Version20260720120000 extends Version
{
    protected $description = "Инфоблок Акции";

    public function up()
    {
        $helper = $this->getHelperManager();
        $iblockId = $helper->Iblock()->saveIblock([
            'CODE' => 'promo',
            'NAME' => 'Акции',
            'IBLOCK_TYPE_ID' => 'catalog',
        ]);
        $this->outSuccess('Iblock ID: ' . $iblockId);
    }

    public function down()
    {
        $helper = $this->getHelperManager();
        $helper->Iblock()->deleteIblockIfExists('promo');
    }
}

Консоль (из корня сайта): php local/bin/migrate.php add my_first - пустой шаблон; php local/bin/migrate.php ls --new - список новых; php local/bin/migrate.php up - накатить все новые по порядку от старых к новым. При ошибке одной миграции цепочка останавливается.

Миграция не в списке - проверьте путь cfg, кэш и каталог migrations/. Справочник CLI - commands.txt.

Делайте: коммитьте файл миграции сразу после проверки up на dev. Не делайте: не правьте уже установленную миграцию на проде - создайте новую с исправлением.

Настройте типовые сценарии: инфоблок, HL, UF и агенты

Готовые билдеры в cfg покрывают большую часть рутины. Связка с другими гайдами:

  • Инфоблок - после создания инфоблока вручную снимите миграцию билдером, чтобы структура уехала в git.
  • Highload-блок - то же для HL-справочников: поля, индексы, права.
  • Пользовательские поля (UF) - для сущностей USER, HL, разделов ИБ.
  • Агенты и почтовые события - чтобы cron и письма не расходились между стендами.
  • Настройки модулей — когда модуль хранит опции в b_option.
  • Права доступа — роли и группы, если их настраивали вручную на dev.

Компоненты и шаблоны в git не заменяют миграции: если свой компонент читает инфоблок по CODE, а типа нет на prod - получите пустую выдачу или 404.

Делайте: одна миграция - одна логическая задача (один ИБ или один HL). Не делайте: не смешивайте в одном файле и инфоблок, и тысячи элементов каталога - для данных используйте импорт, для схемы - миграции.

Прогоните чек-лист dev → git → staging → production

Схема релиза:
dev (создали миграцию, up локально) → git commit + push → staging (git pull, бэкап БД, up, smoke-тест) → production (бэкап, up в окно релиза, мониторинг)
  1. На dev: создайте миграцию, выполните php local/bin/migrate.php up, убедитесь, что сайт работает.
  2. В git: добавьте файлы из /local/php_interface/migrations/, не коммитьте .env и дампы БД.
  3. На staging: git pull, php local/bin/migrate.php ls --new, сделайте бэкап базы, затем php local/bin/migrate.php up.
  4. Smoke-тест: откройте разделы, затронутые миграцией (каталог, формы, админка).
  5. На production: повторите pull, свежий дамп БД, up в согласованное окно; держите план отката down.
  6. После релиза: пометьте набор тегом php local/bin/migrate.php up --add-tag=release20260720 для отката группы.

В cfg задайте console_user - под кем CLI выполняет миграции (по умолчанию admin). Тяжелые SQL при обновлении ядра - отдельный продвинутый кейс, не ежедневные миграции структуры.

Нужна помощь с настройкой pipeline на вашем проекте - обсудим задачу. Похожие внедрения - в портфолио.

Делайте: одинаковый порядок миграций на всех стендах. Не делайте: не накатывайте на prod без прогона на staging с копией данных близкой к бою.

Откатите миграцию через down и теги релиза

Откат одной версии: php local/bin/migrate.php down 20260720120000. Повторный накат после правки файла: redo. Удаление файла без down оставит запись Installed - появится Unknown при следующем ls.

Теги группируют миграции релиза: down --tag=release20260720 откатывает все с этим тегом. Для PostgreSQL: поддержка есть с версии модуля 5.0.0 - убедитесь, что проект не на устаревшем форке.

Делайте: пишите осмысленный down() для каждой up(). Не делайте: не удаляйте файлы миграций с прода, пока не согласовали с командой - сломаете историю.

Автор: Максим Мольков, разработчик 1С-Битрикс.
Источники: GitHub sprint.migration, Маркетплейс 1С-Битрикс, блог автора модуля.

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

Чем миграции sprint.migration отличаются от переноса сайта на Битрикс?

Перенос сайта - это смена хостинга, домена, файлов и базы целиком, часто с SEO и 301. Sprint.migration версионирует точечные изменения структуры БД между копиями одного проекта. Для переноса смотрите гайд по переносу CMS, для ежедневной разработки - миграции в git.

Где лежат файлы миграций?

По умолчанию в /local/php_interface/migrations/. Установленные копии архивируются в migrations.archive. Путь меняется в настройках модуля sprint.migration - проверьте cfg до первого коммита.

Как установить модуль через Composer?

В composer.json укажите пакет andreyryabin/sprint.migration и путь установки в local/modules/. После composer install активируйте модуль в админке CMS. Зафиксируйте версию, чтобы dev и prod совпадали.

Нужен ли бэкап перед migrate на проде?

Да, обязательно. Сделайте дамп БД и проверьте, что up уже прошел на staging. При падении по таймауту восстановите из бэкапа и разбейте миграцию на части или увеличьте лимит времени PHP.

Как откатить миграцию?

Выполните php local/bin/migrate.php down с номером версии или down --tag=имя_релиза для группы. Метод down() в файле миграции должен удалять то, что создал up(). Без down откат только из бэкапа БД.

Что значит состояние Unknown у миграции?

В таблице модуля есть запись, а файла в migrations/ нет - например, после удаления из git или рассинхрона веток. Восстановите файл из репозитория или согласуйте mark/delete через консоль, не накатывайте вслепую.

Это то же самое, что миграции в облачной CRM?

Нет. Bitrix24 — облачная CRM и портал с другим API. Sprint.migration работает только в коробочной CMS «Управление сайтом» и синхронизирует структуру БД вашего PHP-проекта.

Читайте также

Интеграции с 1С и API
1074 6 мин.

Как настроить регистрацию и личный кабинет покупателя на 1С-Битрикс?

Пошаговая настройка регистрации на сайте битрикс: Главный модуль, main.register, system.auth.form и sale.personal.section с историей заказов и 152-ФЗ.
Интеграции с 1С и API
941 6 мин.

Как настроить скидки и промокоды на 1С-Битрикс: правила корзины и купоны

Пошаговый гайд по скидкам в CMS-магазине: скидка на товар, правило корзины от суммы, купоны с лимитом, приоритеты без конфликтов и тестовый заказ. Не Bitrix24.
Интеграции с 1С и API
759 15 мин.

Что такое компонент в Битриксе и как он работает

Каждый разработчик, впервые столкнувшийся с Битриксом, проходит через своеобразный обряд посвящения. Вначале кажется, что это просто CMS, где можно поправить HTML в визуальном редакторе или дописать пару строк CSS. Но однажды наступает момент, когда нужно изменить логику вывода новостей, отфильтровать товары по хитрому свойству или добавить на страницу нечто совершенно новое. И тут он впервые слышит это слово — «компонент». Для многих этот момент становится стеной. Система, казавшаяся понятной, вдруг превращается в черный ящик, полный непонятных файлов и странных переменных. Но стоит лишь раз заглянуть под капот, как эта стена рассыпается, превращаясь в набор удивительно логичных и мощных строительных блоков. Понимание компонентов — это тот самый щелчок, после которого разработка на Битрикс из мучения превращается в творчество.

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

Интеграции с 1С и API
718 2 мин.

Установка Composer в 1С-Битрикс

Установка Composer в проекте на 1С-Битрикс требует учета особенностей платформы, чтобы обеспечить корректную работу и интеграцию с системой.