10K+ товаров, миллионы строк данных — миграция с OpenCart на Laravel
Действующий маркетплейс на старом OpenCart — медленный, без мобильного приложения, без запаса роста. Десятки тысяч товаров и миллионы строк данных перенесли в новую Laravel-архитектуру с нулевой потерей. Мобильное приложение выкатили параллельно.
- Многоэтапно (миграция + мобильное)
- Эльвин Шарифов + backend / mobile контракторы
- Инженерия · Дизайн продукта · Мобильное приложение
- В проде
Исходная точка
Hamısıburada.az — это действующий маркетплейс: ежедневный трафик, реальный поток заказов, наработанные SEO-позиции. Сайт жил на старом OpenCart с километрами кастомизаций — производительность низкая, новая функциональность добавляется всё мучительнее. Мобильного приложения нет.
Риски на пальцах: десятки тысяч товаров, десятки продавцов, категории, история цен, архив заказов, SEO-URL, профили клиентов. В новой системе всё это должно вести себя так же — ноль потери данных, ноль потери SEO, минимальный даунтайм.
Решения
- Laravel как новый стек. Современный PHP, живая экосистема, Eloquent, queue, Horizon, Telescope. Все возможности OpenCart переразложили на модули в Laravel.
- Миграционные скрипты идемпотентные — можно гонять заново, есть dry-run. На каждом шаге сверка по count-ам.
- SEO-URL сохранили — старые адреса повесили на 301-редиректы. Sitemap и canonical переписали.
- Мобильное приложение параллельно — REST API писали тем же составом, что и мобильное, и API-разъезда не случилось.
Исполнение
Миграция в три фазы: schema mapping, batch import, живой switch. В день переключения — окно «только чтение» на 4 часа: новые заказы в этот момент в БД не писались, фронт возвращал понятную ошибку. После переключения — ноль потерь.
«В миграциях самый ценный инструмент — dry-run. Каждый скрипт до боевой БД крутился десятки раз на staging.»
Мобильные приложения — нативные под iOS и Android, API на Laravel-ресурсах. Push, in-app payment, фильтр по категориям, избранное — всё в первой версии.
Результат
- Полный переход на Laravel — новая функциональность теперь добавляется не неделями, а днями.
- Ноль потери данных и ноль потерь SEO-позиций (старые URL — на 301).
- iOS + Android запущены — мобильный поток заказов работает на паритете с вебом.
- Команда сама ведёт релизы — мы остались в роли консультантов.