Назад в блог

Локальная разработка для headless Bitrix: три сценария и один рабочий

Первый вопрос, который мне задают про headless Bitrix, всегда про архитектуру. Второй — про деплой. Третий никто не задаёт вслух, но все спотыкаются об него на первой неделе: как вообще разрабатывать, если у тебя нет Bitrix на машине?

Я работаю с сетапом, где Next.js и Bitrix живут в разных репозиториях, но на одном железе. Это редкость. Большинство headless-команд разделяют фронтенд и бэкенд по разным людям и машинам. Именно поэтому я могу объяснить все компромиссы изнутри.

Почему это сложнее, чем поставить обычный Next.js

Стандартный Next.js-проект поднимается за npm install && npm run dev. Пять минут — и у тебя работающая страница.

Headless Bitrix так не работает. Полный локальный стек — это лицензия, веб-сервер (nginx или IIS), PHP-FPM, MySQL, cron для составного кэша и несколько часов на настройку. Это отдельный проект, а не «быстро развернуться локально».

Поэтому большинство headless-команд делают иначе: Next.js-разработчик пишет код у себя на машине, а API-запросы идут на staging-сервер или даже на прод. Это не плохо само по себе. Но у каждого подхода есть конкретная цена.

Когда начинаешь headless Bitrix-проект, вопрос локальной разработки редко обсуждается явно. Он всплывает через неделю, когда первый разработчик открывает задачу и спрашивает: «А на чём мне это тестировать?»

Три сценария: цена каждого

За несколько лет работы с headless Bitrix + Next.js я видел три устойчивых сценария.

Полный локальный стек. Bitrix поднят у каждого разработчика локально. Next.js работает против localhost.

Плюс — полная изоляция. Можно ломать что угодно, не трогая других.

Минус — дорого. Лицензия Bitrix не бесплатна. Поднять и поддерживать локальный Bitrix с нужными модулями, контентом и актуальными данными каталога — это десятки часов в начале и регулярные синхронизации потом. Для команды из 3+ человек нужен отдельный DevOps.

Этот вариант оправдан, если бэкенд активно меняется параллельно с фронтом на долгосрочном проекте.

Staging-прокси. Bitrix на отдельном staging-сервере. Next.js у разработчика локально, API-запросы идут на staging.

Самый распространённый сценарий. Он снимает проблему локальной установки Bitrix.

Цена — расхождение данных. Staging редко бывает точной копией прода: базу синхронизируют раз в неделю или реже, там устаревший контент, нет части промо-акций. Разработчик видит одно, пользователь в проде — другое. Классический источник багов, которые воспроизводятся только на проде.

Второй риск: несколько разработчиков одновременно работают против одного staging-сервера. Один меняет структуру iblock — у всех сразу ломается сборка.

Прод-прокси. Next.js локально, API идёт на продакшн Bitrix.

Быстро настроить, работает сразу. Но достаточно одной тестовой операции записи — и она попадёт в живые данные. Я видел, как тест на прод затёр описание товара. Случилось это не со стажёром, а с senior-разработчиком в конце рабочего дня.

Прод-прокси допустим только для операций чтения, с явными read-only ограничениями в конфигурации.

Наш сетап: оба репо на одном железе

Я работаю иначе. ivanpin.com (Next.js 16 + React 19) и wgp_backend (1С-Битрикс) живут в разных репозиториях, но на одной машине. Это нетипичный сценарий — обычно фронт и бэк разделены физически.

Что это даёт на практике:

Next.js обращается к API бэкенда по локальному URL, без сети. Latency в запросах — единицы миллисекунд вместо 80–150ms через интернет. Это звучит как мелочь, пока не начинаешь дебажить сложный запрос и не делаешь 50 итераций подряд.

Изменения в PHP-эндпоинте видны сразу. Я правлю файл в wgp_backend/api/ivanpin/services/, сохраняю, перезапрашиваю — никакого деплоя, никакого FTP, никакого ожидания. Это меняет скорость работы.

Плюс — данные живые и актуальные. Контент из базы тот же, что на проде, потому что это та же база.

Минус — один: это нельзя масштабировать на команду. Если над проектом работают два разработчика, этот сценарий перестаёт работать без дополнительной оркестрации.

.env.local: где ошибаются чаще всего

Когда Next.js работает против удалённого Bitrix — staging или прода — .env.local становится точкой сбора всех ошибок конфигурации.

Три типичных проблемы.

Первая — CORS на localhost. Bitrix не знает, что localhost:3000 — это доверенный источник. По умолчанию браузер заблокирует preflight-запросы. Решается на стороне PHP через Access-Control-Allow-Origin, но об этом забывают настроить на staging отдельно от прода. В bitrix-rest-api-headless-surprises я разобрал ещё несколько подобных сюрпризов API.

Вторая — NEXT_PUBLIC_ префикс. Переменные без этого префикса недоступны в браузере — они только серверные. Ошибка классическая: разработчик кладёт API_URL без префикса и получает undefined на клиенте. Два часа дебага, одно переименование.

Третья — сессии и cookies. Bitrix использует сессии для авторизации ряда API-методов. Если Next.js и Bitrix на разных доменах, cookie с сессией не передаётся автоматически. Нужно явно настраивать credentials: 'include' во fetch и SameSite=None; Secure на стороне бэкенда. На localhost это особенно больно — Secure требует HTTPS, которого локально нет.

Два инструмента, которые ускорили работу

Next.js hot reload. Звучит очевидно, но конкретно для headless-сетапа это важно: изменения в React-компонентах видны в браузере без ручного обновления страницы. Данные приходят с удалённого Bitrix, но UI перестраивается мгновенно. Это отделяет «изменил компонент» от «проверил API» — два независимых цикла.

Smoke-test скрипт для API. Перед началом работы я запускаю curl-скрипт, который проверяет 3–4 ключевых эндпоинта: возвращает ли API статус 200, есть ли данные, соответствует ли структура ответа. 10 секунд — и понятно, работает ли staging сегодня или нет. Без этого разработчик теряет 20–30 минут, прежде чем понимает, что проблема не в его коде.

Этот паттерн я описал в контексте headless-preflight-three-checks: быстрая проверка до начала работы экономит время всей итерации.

Что остаётся компромиссом

Staging-прокси — правильный выбор для большинства команд. Это признание, а не критика. Поднимать полный Bitrix локально для каждого разработчика экономически нецелесообразно в большинстве проектов.

Важно делать этот выбор осознанно. Расхождение данных на staging — не случайность, это норма. CORS надо настроить до старта разработки, не в первый день дебага. Прод-прокси — только для чтения, с явным ограничением в конфигурации.

В bitrix-nextjs-deploy-velocity-gap я разбирал другой аспект той же проблемы: деплой фронта и бэка движется с разной скоростью, и это нужно планировать. Локальная разработка — это та же история, только в начале цикла, а не в конце.

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