Опишите процесс деплоя, который вы использовали на работе.

«Опишите процесс деплоя, который вы использовали на работе.» — вопрос из категории DevOps, который задают на 24% собеседований PHP Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В моей предыдущей роли мы работали с монолитом на PHP (Laravel) и использовали инструмент Deployer для автоматизации. Процесс был следующим:

Основные этапы:

  1. Подготовка: Все изменения мержились в develop, проходили code review и полный набор тестов (PHPUnit, Pest). Для релиза создавался Pull Request из develop в master.
  2. Релиз: После мержа в master Jenkins-джоба автоматически запускала деплой на staging-сервер.
  3. Деплой на продакшн: После проверки на staging я вручную запускал деплой на production через команду Deployer. Это было сознательное решение для контроля времени релиза.

Пример конфигурации Deployer (deploy.php):

<?php
namespace Deployer;

host('production')
    ->set('deploy_path', '/var/www/my-app')
    ->set('branch', 'master');

task('deploy', [
    'deploy:prepare',
    'deploy:vendors',
    'artisan:migrate', // --force в production
    'artisan:cache:clear',
    'deploy:publish'
]);

Ключевые практики:

  • Миграции: Запускались с флагом --force только в рамках деплоя, что гарантировало их атомарность с развертыванием кода.
  • Обратный прокси: Использовался Nginx, поэтому для обновления кода без простоя мы применяли php-fpm: reload.
  • Откат: В Deployer есть встроенная команда dep rollback, которая быстро возвращала предыдущую рабочую версию.