Развернули коммерческий скрипт на Laravel в изолированном Docker-стеке, локализовали под русский, отребрендили и разобрались, почему страница открывалась пятнадцать секунд.
Купленный скрипт доски объявлений нужно было поднять локально — но так, чтобы он не подрался с другими стеками на той же машине (порты СУБД, Redis и админки уже были заняты), заговорил по-русски и открывался за разумное время. На старте главная страница грузилась 13–15 секунд.
Первое подозрение — запросы к базе. Замерили: 75–88 запросов складываются примерно в 0.1 секунды, медленных нет ни одного. База чиста, сеть ни при чём. Значит, время уходит до того, как код вообще начал работать.
Настоящая причина — медленный проброс файлов с Windows в контейнер. PHP при настройках по умолчанию проверяет дату изменения каждого файла проекта на каждый запрос. В обычной файловой системе это незаметно; через мост Docker-for-Windows — это тысячи медленных обращений на один заход. Усугубляло то, что лимит кэша скомпилированных файлов стоял на 10 000 при 21 359 PHP-файлах в проекте: кэш переполнялся и перекомпилировал одно и то же по кругу.
Своё имя проекта, своя сеть, свои тома и порты — стек не конфликтует с уже работающими на машине. В комплекте PHP-FPM, Nginx, MariaDB, Redis и перехватчик почты, чтобы письма не улетали наружу с тестового стенда.
Браузерный мастер установки спотыкался о CSRF, сессии и внешние вызовы. Прошли его детерминированно консольными командами: миграции, наполнение справочников, страна и 2 658 городов, супер-админ, файл-маркер установки. Повторяемо и без сюрпризов.
Язык переключён в базе, в конфиге и у админа. Отдельно выключено автоопределение по браузеру — иначе английский заголовок от браузера перебивал бы русский дефолт. Здесь же грабли: дефолтный язык кэшируется, без сброса кэша правка не видна.
Заменили то, что видит пользователь: название, футер, служебные страницы. Функциональный идентификатор скрипта не трогали намеренно — по нему код сравнивает версии, переименование сломало бы логику. Проверено: упоминаний исходного бренда на публичных страницах не осталось.
Переключение выявило ловушку: конфиг сессий по умолчанию уходил на СУБД и валил приложение пятисоткой. Лечится явным указанием соединения — из тех вещей, которые стоят полчаса, если знаешь, и полдня, если нет.
Отдельно зафиксирован путь дальнейшего ускорения до значений меньше секунды — перенос кода в файловую систему Linux вместо монтирования с Windows. Это убирает первопричину, а не симптом, но требует перестройки рабочего окружения, поэтому решение оставлено заказчику как осознанный выбор.