Ответ
Мой типичный процесс деплоя PHP-приложения, например на Laravel, выглядит так:
- Подготовка кода: Все изменения мержатся в ветку (например,
main), и код проходит ревью и CI-пайплайн (тесты, линтинг). - На сервере: Я подключаюсь к production-серверу и выполняю скрипт деплоя. Часто для этого использую инструменты вроде Envoyer, Deployer или простой bash-скрипт.
Пример bash-скрипта для деплоя:
#!/bin/bash
cd /var/www/my-app
# Получаем актуальный код
git pull origin main
# Устанавливаем зависимости без dev-пакетов
composer install --no-dev --optimize-autoloader
# Применяем миграции базы данных
php artisan migrate --force
# Очищаем и перестраиваем кеш
php artisan config:cache
php artisan route:cache
php artisan view:cache
# Перезапускаем PHP-FPM для применения изменений
sudo systemctl reload php8.2-fpm
- Пост-деплойные проверки: После деплоя я проверяю ключевые функции приложения и мониторю логи на предмет ошибок. Для более сложных проектов мы используем Docker-контейнеры и оркестрацию через Kubernetes, что позволяет реализовать blue-green деплой или canary-релизы для минимизации даунтайма.
Ответ 18+ 🔞
А, ну это же классика, ебать мои старые костыли! Сейчас расскажу, как мы обычно эту магию производим, чтобы всё не накрылось медным тазом в самый ответственный момент.
В общем, стандартный танец с бубном для какого-нибудь Laravel'я выглядит примерно так, чувак. Сначала вся эта движуха с кодом: фичи допилены, всё замержено в main, ревью прошло, и CI-пайплайн не взвыл, как сука, от твоего кода. То есть, в теории, всё готово лететь в прод.
Дальше — священнодействие. Подключаешься к продакшен-серверу, и тут начинается чистая магия, а иногда и пиздец, если что-то пошло не так. Я обычно либо готовый инструмент юзаю, вроде того же Deployer, либо, если проект не очень большой, пинаю свой bash-скрипт, который уже сто раз проверен, но волнение ебать всё равно присутствует.
Вот смотри, типичный скрипт, который делает всю грязную работу:
#!/bin/bash
cd /var/www/my-app
# Получаем актуальный код
git pull origin main
# Устанавливаем зависимости без dev-пакетов
composer install --no-dev --optimize-autoloader
# Применяем миграции базы данных
php artisan migrate --force
# Очищаем и перестраиваем кеш
php artisan config:cache
php artisan route:cache
php artisan view:cache
# Перезапускаем PHP-FPM для применения изменений
sudo systemctl reload php8.2-fpm
Выглядит просто, да? Но ёпта, каждый раз, когда эта команда migrate --force выполняется, у меня в штанах легкая бздёжка происходит. А вдруг миграция кривая и всё посрет? Но доверия ебать ноль, поэтому летим дальше.
И вот, скрипт отработал, вроде тишина. Но расслабляться рано, ядрёна вошь! Обязательно надо потыкать ключевые функции приложения: а работает ли форма отправки? А авторизация? А платежи, ёперный театр? Одновременно с этим в другой вкладке терминала уже открыты логи и я в них уставленно пялюсь, выискивая красные строки. Пока не убедишься, что всё чисто, терпения ноль ебать, не отойдёшь.
Ну а если проект серьёзный, овердохуища трафика, то там уже совсем другой уровень шизофрении. Всё запаковано в Docker-контейнеры, которые крутятся в Kubernetes. Там уже можно такие фокусы вытворять, как blue-green деплой или canary-релизы. Это когда новый код запускается для горстки пользователей, а если всё ок — постепенно для всех. Красота, в общем. Но и головной боли, блядь, соответствующе.