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

Доброго времени суток!
В данном, финальном, эпизоде, мы с Вами запустим наш «конвейер» развертывания Laravel приложения с нулевым временем простоя.
Что делает Deployer после запуска:
- Создается новая папка и в нее клонируется проект из GIT репозитория
- Все задачи, которые мы описали в нашем файле, выполняются над этим проектом, в данной директории, в первую очередь — composer install
- После успешного выполнения всех задач этот релиз помечается как новый «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 приложения с нулевым временем простоя!
С первого взгляда, это может показаться чем то очень сложным, но я Вас уверяю, пара-тройка раз и Вы убедитесь, насколько все просто.
Буду рад ответить на интересующие Вас вопросы, через раздел Контакты.
Вам я желаю максимальной концентрации, усидчивости и внимательности.
Хороших Вам заказчиков и максимум удовольствия от работы 😁.
До встречи на следущих уроках! 🚀