Задача

Внутренний портал работал на Laravel 6 и PHP 7.4 — обновления безопасности уже не выходили, часть пакетов не поддерживалась, а разработчики боялись трогать код, чтобы ничего не сломать.

Что нашли

14 известных уязвимостей в зависимостях, несовместимые между собой пакеты и полное отсутствие тестового окружения — обновлять «на живую» было рискованно.

Что сделали

  1. Составили план поэтапного обновления по мажорным версиям Laravel
  2. Разворачивали копию портала и обновляли на ней с прогоном тестов на каждом шаге
  3. Заменили устаревшие пакеты на поддерживаемые аналоги
  4. Перевели проект на PHP 8.3 и включили OPcache

Результат

Портал работает на актуальном Laravel 11, известные уязвимости закрыты, скорость и стабильность выросли. Простоя во время работ не было — обновление шло поэтапно на копии с переключением после проверки.