← Назад к блогу
PHP 07.02.2025·3 мин чтения

Laravel Multi-tenant: кейс перехода без остановки продукта

Пошаговый сценарий внедрения multi-tenant в Laravel: модели данных, изоляция, миграции и поэтапный запуск без простоя.

Переход к multi-tenant в Laravel чаще всего ломается не на коде, а на миграции данных и границах изоляции.

Проще говоря

Пошаговый сценарий внедрения multi-tenant в Laravel: модели данных, изоляция, миграции и поэтапный запуск без простоя. Ниже — что именно делать на практике и где чаще всего ошибаются.

Что было в проде

Коротко про вводные.

Контекст: Исходно: single-tenant модель, рост B2B клиентов, конфликты данных и ручные кастомизации.

Что сделали: Решение:

Результат:

  • tenant_id добавлен в core сущности,
  • глобальные scope + policy layer на доступ,
  • фоновые миграции батчами,
  • staged поэтапный запуск по сегментам клиентов.

Результат:

  • снизились инциденты утечки контекста,
  • onboarding новых клиентов ускорился,
  • стало проще масштабировать тарифные ограничения.

Критичные правила

  1. tenant context должен задаваться в middleware и быть проверяемым.
  2. Нет tenant context — нет доступа к данным.
  3. Админ-операции только через явный bypass c аудитом.

Что обычно забывают

  • фильтровать cache keys по tenant,
  • изолировать очереди/файлы/поиск,
  • тестировать cross-tenant leakage.

Чеклист

  • tenant-aware scopes
  • tenant-aware cache/session/queue
  • миграции батчами
  • e2e тест на изоляцию

Короткая история из команды

В команде эта практика начала приносить пользу только после того, как её закрепили в ежедневном процессе: в ревью, CI и пост-релизной проверке.

Вывод

Multi-tenant в Laravel реально внедрить без стопа, если сначала спроектировать изоляцию как архитектурный принцип, а не как patch по месту.

Где чаще всего происходят утечки контекста

Обычно проблемы не в основных запросах, а в кэше, очередях, экспортах и бэкграунд-задачах. Поэтому tenant isolation нужно проверять end-to-end тестами, включая асинхронные процессы.

Хороший индикатор зрелости — отсутствие cross-tenant инцидентов после релизов с изменением инфраструктурных модулей.

Термины простыми словами

  • Multi-tenant — модель, где одна система обслуживает несколько клиентов (tenant-ов) с логической изоляцией данных и доступа.

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

Как сделать это частью повседневной разработки

В PHP-проектах хорошие практики часто распадаются из-за темпа релизов. Чтобы этого не происходило, правило нужно закреплять в трёх местах: код-ревью, автоматические проверки и шаблоны PR. Тогда оно перестаёт зависеть от памяти отдельных разработчиков.

Практично начинать с самых больных endpoint-ов или модулей, где уже есть инциденты. Небольшой, но стабильный прогресс почти всегда полезнее, чем большой рефакторинг «когда-нибудь потом».