Развертывание Laravel 8 с нулевым временем простоя (4 часть)

Доброго времени суток!

В данном, финальном, эпизоде, мы с Вами запустим наш «конвейер» развертывания Laravel приложения с нулевым временем простоя.

Что делает Deployer после запуска:

  1. Создается новая папка и в нее клонируется проект из GIT репозитория
  2. Все задачи, которые мы описали в нашем файле, выполняются над этим проектом, в данной директории, в первую очередь — composer install
  3. После успешного выполнения всех задач этот релиз помечается как новый «current» . Он делает это, создавая символическую ссылку на новый релиз, которая называется — current

Пока весь процесс не завершится успешно, символическая ссылка current, которая является точкой входа в наше приложение, не будет пересоздана. Это означает, что наша текущая версия проекта будет полностью изолирована от будущего релиза.

Как вы помните, в конфиге NGINX мы указали следующую точку входа, о чем я напоминал выше:

/var/www/testmysite.pro/current/public

Давайте приступим к нашему развертыванию, выполнив следующую команду:

php vendor/bin/dep deploy

Если Вы все сделали правильно, следуя предыдущим сериям, у Вас должен начаться процесс развертывания.

После завершения процесса, о чем нам скажет консольное сообщение, мы получим следующую структуру проекта:

├── .dep
├── current -> releases/1
├── releases
│   └── 1
└── shared
    ├── .env
    └── storage

Как вы видите, наша current папка, указывает на releases/1 — наш самый первый релиз!


Давайте сделаем тестовый комит, пуш в удаленный GIT репозиторий и повторно запустим процесс развертывания:

php vendor/bin/dep deploy

После завершения процесса, увидим следующую структуру проекта:

├── .dep
├── current -> releases/2
├── releases
│   └── 1
│   └── 2
└── shared
    ├── .env
    └── storage

У нас создалась новая папка, под именем 2, в ней был выполнен сценарий развертывания и только, после успешного выполнения всех задач — создан новый symlink, указывающий на свежий релиз releases/2.

.dep существует для внутреннего использования библиотеки Deployer. Данная папка используется для хранения некоторых данных и кеширования таких вещей, как Ваш GIT репозиторий, чтобы не «искать» заново при каждом развертывании.


Если вы заметили какой то баг в новом релизе и Вам срочно нужно «переключить» проект на предыдущую версию — выполните следующую команду:

php vendor/bin/dep rollback

Для просмотра статистики (списка релизов, номер текущего, комит и т.д.) выполните следующую команду:

php vendor/bin/dep status

Файл .env и папка storage

А что с ними? Все в порядке! Deployer переместил их в папку shared и при каждом релизе, но не трогает содержимое папки shared, а просто создает символические ссылки на файл .env и папку storage, в папках релизов. Вы можете быть спокойны, что все ваши конфигурации и файлы записи, будут в покое, после каждого релиза. Это и в правду идеально!

├── .dep
├── current -> releases/2
│                       └── .env -> shared/.env
│                       └── storage -> shared/storage
├── releases
│   └── 1
│   └── 2
└── shared
    ├── .env
    └── storage

Та же ситуация могла бы быть с файлом robots.txt, задачу под который я описывал в предыдущей серии урока. Данный файл также был бы в виде символической ссылки в папке /releases/n/public.

Разумеется, мы не храним файл .env и содержимое папки storage в GIT, соответственно нам нужно один раз заполнить файл «shared/.env» и при необходимости, папку «shared/storage» (а вдруг вы локально уже загрузили пару аватарок и вам лень делать это заново).

Делается это уже на Ваше усмотрение, через SSH в терминале, зайдя напрямую, или через тунель, который предоставляет Deployer:

php vendor/bin/dep ssh production_1

Также, можно подключится, используя протокол SFTP, через ту же Filezilla, в разделе Файл -> Менеджер сайтов.


Вывод

Итого, нам удалось построить «конвейер» развертывания Laravel приложения с нулевым временем простоя!

С первого взгляда, это может показаться чем то очень сложным, но я Вас уверяю, пара-тройка раз и Вы убедитесь, насколько все просто.

Буду рад ответить на интересующие Вас вопросы, через раздел Контакты.

Вам я желаю максимальной концентрации, усидчивости и внимательности.

Хороших Вам заказчиков и максимум удовольствия от работы 😁.

До встречи на следущих уроках! 🚀