Один compose-файл, семь сервисов
nginx, PHP, Vue SSR, MySQL, Redis, Memcached и очередь поднимаются из одного файла. Свежий чекаут это три команды.
Стек сайта больше не смесь локального PHP, Node-скрипта и базы, которую кто-то поднял отдельно. Один compose-файл поднимает nginx, php, queue, schedule, vue, mysql, redis и memcached. Образ PHP это локальный laraboom-php:latest плюс расширения redis и memcached, поэтому медленный реестр не блокирует первый запуск.
Поднятие в три шага. Скопировать два env-файла. Собрать и запустить compose. Выполнить composer setup в контейнере PHP. Setup пишет ключ приложения, ждёт, пока MySQL начнёт принимать соединения, гоняет миграции, сеет публичный контент и линкует storage.
Зачем ждать базу
Миграции падали на холодном старте. MySQL ещё инициализировался. Ошибка выглядела как неверные креды. Скрипт setup теперь повторяет подключение ограниченное время и называет сервис, которого ждёт. Второй запуск безопасен. Сиды заменяют демо-строки, а не дублируют их.
Сборка стадийная. Lockfile ставятся в раннем слое. Сборка фронтенда в своей стадии. В рантайм-образ попадает только результат. Правка PHP больше не ставит пакеты Composer заново. Пересборка упала с минут до секунд.
Что ещё должно быть живым
nginx не должен гнать SSR, пока контейнер vue не поднялся. Иначе первый хит это пустая оболочка. uid volume storage должен совпадать с пользователем PHP, иначе загрузки падают только после первого входа в админку. Queue и schedule отдельные процессы, поэтому долгий job не задержит тик cron.
Проверка после свежего чекаута короткая. HTML главной приходит из Vue SSR. /api/user отвечает без токена. Redis и Memcached принимают ping из контейнера PHP. Если что-то из этого падает, смотреть compose-файл, а не папку host routes.
