Скачать CV

Стек

Один 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.

Один compose-файл. Семь процессов. Host-приложение их руками не стартует.
Один compose-файл. Семь процессов. Host-приложение их руками не стартует.

Зачем ждать базу

Миграции падали на холодном старте. MySQL ещё инициализировался. Ошибка выглядела как неверные креды. Скрипт setup теперь повторяет подключение ограниченное время и называет сервис, которого ждёт. Второй запуск безопасен. Сиды заменяют демо-строки, а не дублируют их.

Сборка стадийная. Lockfile ставятся в раннем слое. Сборка фронтенда в своей стадии. В рантайм-образ попадает только результат. Правка PHP больше не ставит пакеты Composer заново. Пересборка упала с минут до секунд.

Setup ждёт MySQL. nginx ждёт Vue SSR. Загрузки ждут uid storage.
Setup ждёт MySQL. nginx ждёт Vue SSR. Загрузки ждут uid storage.

Что ещё должно быть живым

nginx не должен гнать SSR, пока контейнер vue не поднялся. Иначе первый хит это пустая оболочка. uid volume storage должен совпадать с пользователем PHP, иначе загрузки падают только после первого входа в админку. Queue и schedule отдельные процессы, поэтому долгий job не задержит тик cron.

Проверка после свежего чекаута короткая. HTML главной приходит из Vue SSR. /api/user отвечает без токена. Redis и Memcached принимают ping из контейнера PHP. Если что-то из этого падает, смотреть compose-файл, а не папку host routes.

К новостям