Если ваш Битрикс тормозит, а Laravel кажется из другой вселенной — эта статья для вас.
Привет, хабровчане! На связи Алиса — тимлид в e-commerce агентстве KISLOROD. Мы ежедневно имеем дело с большими каталогами, сложной коммерцией и 1С, которая дышит в затылок. И однажды мы решили сделать невозможное: подружить Битрикс с Laravel. Так, чтобы Битрикс остался каноном и привычной админкой, а Laravel стал помощником — взял на себя API, тяжёлую бизнес-логику и все, что тормозит. Без форка ядра, слез SEO-шника и без утечек в 1С. Да, это реально.
Что будет внутри:
Архитектура «соседнего сервиса» — покажем, как Laravel становится полноценным соседом Битрикса, а не его врагом. Где провести границы, чтобы не сломать ничего важного.
JWT, SSO и Redis Streams без боли — авторизация, события и наблюдаемость: как соединить две платформы так, чтобы всё было прозрачно и надежно.
Очереди, вебхуки, кеш, наблюдаемость — разберем, как мы внедряли очереди событий, обрабатывали вебхуки с проверкой подписи и делали наблюдаемость без костылей.
Пошаговый план миграции с откатами и фича-флагами — как эволюционно мигрировать проект с Битрикса на Laravel, не выведя прод из строя.
Код, конфиги и живые примеры — не будет абстракций: только продовые конфиги, API-контракты и трейсинг с боевого проекта.
Кода будет много. Теории — ровно столько, чтобы вы могли повторить это у себя. Погнали!
Почему вообще это нужно

«Не трожь Битрикс — сломаешь 1С» — старая народная мудрость.
Если ваш проект на Битриксе вырос за пределы его изначальных возможностей, вы это чувствуете:
медленные каталоги, листинги, фильтры;
сложно внедрять новые бизнес-фичи без риска все сломать;
нет нормального API для фронтов и партнеров;
любая сложная логика превращается в компонент с бизнес-логикой размером с модуль CRM;
любая интеграция с внешними сервисами переходит в мини-движок с кастомным API, который сложно сопровождать.
Знакомо? Тогда давайте покажу, как мы пошли другим путем: без форка, без слома — через архитектурное разделение и разумный headless-подход.

Архитектура «Соседний сервис»: кто где живет и зачем
Представьте, что Битрикс — это Морфеус, а Laravel — Нео. Один знает, как устроен мир, второй — как его менять. В нашей архитектуре:
Битрикс продолжает управлять админкой, корзиной, UI, бизнес-логикой скидок, регистрацией заказов.
Laravel берет на себя все, что требует производительности, API-first мышления и легкой масштабируемости: каталог, фильтры, уведомления, интеграции.

Принципы взаимодействия:
Nginx маршрутизирует /bitrix/* в Битрикс, а /api/* в Laravel;
аутентификация и авторизация — через JWT (RS256) с публикацией JWK из Битрикса;
обмен событиями — через Redis Streams, в стиле outbox pattern.
Ножницы владения данными:
Битрикс пишет только в свои b_* таблицы;
Laravel — в svc_*;
взаимодействие строго через REST/AsyncAPI.
Шаг А: Аутентификация, события, наблюдаемость
Цель: создать фундамент для headless-подхода: единая авторизация, корректная передача событий и наблюдаемость всей архитектуры.
Что делаем:
реализуем мост SSO: пользователи логинятся через Битрикс, получают JWT в HttpOnly cookie, Laravel использует кастомный guard;
внедряем outbox-слой в Битрикс, чтобы гарантировать доставку событий в очередь (Redis Streams, RabbitMQ);
настраиваем наблюдаемость: X-Request-Id, трассировка запросов с OpenTelemetry, метрики Prometheus и алерты в Sentry.
Контракты |
Метрики |
Риски и откат |
|
REST: /auth/login, /auth/logout, /.well-known/jwks.json; AsyncAPI: catalog.events, order.events, stock.events, price.events. |
логин: P95 < 300 мс; лаг публикации события: < 5 с; ошибки валидации JWT: < 0.5%. |
SSO не работает? Laravel просто не пускает, а Битрикс продолжает работать по сессиям; Redis упал? Outbox не теряет данные — публикация догоняет после восстановления. |
Шаг Б: Каталог и OpenSearch
Цель: убрать основной тормоз Битрикса — это листинги, фильтры и каталог в целом. Мы хотим, чтобы пользователи не ждали по 5 секунд, пока откроется раздел, а получали быстрый отклик даже на больших выборках и с множеством фильтров.
Что делаем:
создаем денормализованный индекс в OpenSearch на основе таблиц svc_catalog_*, заранее подготавливая структуру под фасеты и фильтрацию;
Laravel раздает быстрые ответы по эндпоинтам /api/catalog/search, /api/products/{id} — с поддержкой сортировки, фасетных фильтров, fulltext и nested-атрибутов;
админка больше не «висит»: ленивые вкладки, кеш метаданных, быстрые справочники и автокомплиты позволяют работать без ожидания перезагрузки страницы;
подключаем отдельный медиасервис — он делает асинхронные ресайзы, готовит WebP и AVIF, отдает через CDN-ссылки.
Контракты и события:
REST: /api/catalog/search, /api/products/{id};
события: catalog.element.updated, price.changed, stock.changed.
Метрики:
TTFB каталог: < 150 мс на кэше, < 400 мс на миссе;
лаг реиндексации: < 10 с.
Риски: если OpenSearch упал — Laravel отдает кеш из Redis или заглушку.
Шаг В: Коммерция — корзина, цены, заказы
Цель: ускорить путь пользователя от выбора товара до успешного заказа и при этом существенно разгрузить Битрикс в самых уязвимых точках — корзине, расчете цен и создании заказов.
Что делаем:
переносим корзину в Redis, сохраняя полную совместимость с логикой sale. Пользователь продолжает работать с привычным интерфейсом, но данные обрабатываются быстрее и устойчивее;
цены и остатки теперь отдаются через API: мгновенный ответ из кэша, плюс персонализация (скидки, правила, группы пользователей), если нужно — с запросом к внутренним сервисам;
заказ создается с минимальным набором данных в b_sale_order для совместимости с UI и административкой. Вся остальная логика, маршруты, статусы, уведомления и интеграции уходят в Laravel и обрабатываются асинхронно.
Контракты: /api/cart, /api/pricing, /api/inventory, /api/orders
Метрики:
операции с корзиной P95: < 120 мс;
расчет цен P95: < 120 мс (кэш), < 300 мс (реальный вызов);
заказ: запись в Битрикс < 400 мс, саги Laravel < 60 с.
Риски:
конфликт логики скидок — проверка на стороне Битрикс;
откат — по флагу, данные совместимы.
Шаг Г: Интеграции и уведомления
Цель: собрать все внешние вызовы в одно место и вытащить из админки логику, которую туда когда-то «временно» положили. Больше никаких скриптов в init.php, чтобы синкать заказы с CRM или вручную слать уведомления.
Что делаем:
разворачиваем единый шлюз интеграций, через который проходят все внешние взаимодействия — 1С, CRM, платёжные шлюзы, доставки. Все это оформлено в отдельные каналы с retry, паузами, fallback и таймингами;
оборачиваем все в очередь с DLQ (dead letter queue), чтобы не терять события при сбоях. Плюс мониторим лаги и ошибки;
уведомления выносим в отдельный сервис, который работает через REST, поддерживает шаблоны писем и сообщений, учитывает приоритеты и предпочтения пользователя.
Контракты:
/api/integrations/*, /api/notify;
события статусов обратно в Битрикс и ERP.
Метрики:
интеграции P95: < 30 с;
уведомления: >98% доставляемости.
Риски:
если провайдер лег, очередь ставится на паузу;
спам — скоростные лимиты и троттлинг.
Шаг Д: Headless API и SDK
Цель: вытащить API наружу, чтобы фронты больше не зависели от внутренних модулей, бизнес-логики и тонкостей реализации. Меняем концепцию: не «Лезь в Битрикс за JSON», а «Обратись в стабильный API и получи то, что нужно».
Что делаем:
API Gateway на Laravel — единая точка входа (/v1/*) с версияцией, лимитами, ключами партнеров и всем, что положено продовому API;
SDK для фронтов — готовая библиотека с типами из OpenAPI, встроенными ретраями, трейсингом и логикой повторов. Работает одинаково на вебе и в мобильных.
Метрики:
Доля 5xx — менее 0,2%;
P95 отклика по кэшу — до 150 мс;
SDK покрыт автотестами и валидируется при CI-доставке.
Откат: если SDK вдруг перестал работать — фронт может напрямую ходить по REST, пока не починим. Все маршруты стабильны, структура API не меняется без версии. Теперь API — это контракт, не фреймворк. Вы можете менять фронт, деплоить виджеты, выносить в мобилки — и не трогать бэкенд вовсе.
Laravel и Битрикс — разные, но вместе работают круче. Headless-подход не требует рвать все на части — он требует осознанности, фича-флагов и нормальной архитектуры.
Так проект становится гибче, быстрее, масштабируемее. А главное — не превращается в «спагетти-код с криками в комментариях».
Продолжение следует...
Если статья зашла — покажите её тем, кто сомневается: а можно ли сделать современную архитектуру рядом с Битриксом? Можно. И нужно.
Комментарии (4)

wagoodoogoo
13.10.2025 11:07Зачем тут вообще Битрикс?

kortezh
13.10.2025 11:07Кто-то видимо не хочет слезать с админки Битрикса, переучивать весь персонал и т.д.
В моём случае я всё же убедил клиента перевести админку тоже, благо сейчас множество пакетов админок) Потому как рано или поздно последним тормозящим местом останется как раз эта самая админка на битриксе...

kortezh
13.10.2025 11:07Тоже проходим похожий путь, только мы перевозим магазин с битрикса на Laravel поэтапно: главная, каталог и т.д..
Поэтому вот эту всю интеграцию через рест между двумя системами, в части товаров, корзины, авторизации уже прошли)
dmitrijtest24
А что тут невозможного? Многие компании так делают.
Значит вы его не умеете готовить, и скорее всего он вам не нужен.