Envoyer - деплой без задержек
26.01.2021
503

Envoyer - деплой без задержек

Zero Downtime PHP Deployment - способ развернуть сервис незаметно для посетителей.


Во времена развития CI/CD на фоне инструментов GitLab, BitBucket, Travis итп. не теряется из виду сервис envoyer.io, который позволяет настроить развертывание приложения незаметно для пользователей, и автоматизировать процессы выполняющиеся во время деплоя продукта.


Не смотря на то что сервис платный, от 10$ до 50$ per month, сочетание Envoyer c некоторыми проектами доставляет удовольствие. 


Принцип работы envoyer:

На примере проекте работающего в связке с Laravel, сервис подключается к серверу по ssh. Корневая папка состоит из:

  • storage
  • releases
    • папки с версиями деплоя
  • .env
  • current - симлинк на актуальную версию деплоя из releases


Envoyer предварительно устанавливает все зависимости проекта в новую папку releases под названием состоящей из даты. Поочередно запускаются команды composer install, npm install, npm run prod, php artisan cache:clear, php artisah queue:restart и другие, которые необходимы для работы проекта и легко кастомизируются в настройках. 

Если ошибок не возникло, симлинк меняет путь на новую папку из releases. Происходит рестарт nginx, php и др. сервисов.


Как работать с Envoyer:

После регистрации на сайте envoyer.io вам будет доступна панель управления, которая позволит добавить проекты и запустить деплой из нужного репозитория/ветки для продакшн сборки или демонтрации новой фичи.





Необходимо перейти в настройки аккаунта (выпадающее меню под логином справа).


Раздел Integrations:

Подключить используемый в проекте репозиторий, чтобы сервис Envoyer смог взаимодействовать с репозиторием. В моем случае используется BitBucket.


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



После того как проект добавлен, откроется dashboard. Нужно добавить доступы к серверу, размещенные за вкладкой "Servers" кнопка "Add server"


Заполнив реквизиты сервера, важно указать папку, где размещается проект. В ней envoyer самостоятельно добавит нужные папки и симлинк. Предварительно в папку нужно загрузить .env и storage.


После того как сервер добавлен, для пользователя, который был указан в параметре "Connect As" в файле ~/.ssh/authorized_keys нужно добавить ssh ключ, который можно получить рядом с добавленным ранее сервером кликом по иконке ключа.  

Можно проверить соединение кликнув по иконке "Loading" рядом с "Unknown".


В связи с тем, что после деплоя envoyer нужно перезагрузить php, нужно под root пользователем выполнить команду на сервере: 

echo "YOUR_USER ALL=NOPASSWD: /usr/sbin/service php7.4-fpm reload" | sudo tee -a /etc/sudoers.d/php-fpm > /dev/null


Важно заменить YOUR_USER на имя пользователя, которое было указано в параметре "Connect As", а так же заменить php7.4-fpm на вашу версию php.


Настройка nginx:

Root папку следует указать как путь до симлинка, например, в случае с Laravel:

root /home/zetrider/www/test/current/public;


Deployment Hooks

Во в кладке хуки можно найти URL адрес, который можно "дергать" автоматически через хуки настроенные в BitBicket, GitHub итд. Таким способом поставка ваших изменений будет непрерывной.

Так же автоматический деплой при каждом пуше в репозиторий можно задать через настройки проекта во вкладке "Source Control" отметим checkbox "Deploy When Code Is Pushed"


Так же на каждом шаге деплоя Envoyer позволяет добавить собственные скрипты, которые необходимо выполнить.

Всего 4 этапа деплоя:

  1. Clone New Release - клонирование из репозитория
  2. Install Composer Dependencies - установка зависимостей
  3. Activate New Release - активация нового релиза
  4. Purge Old Releases - удаление устаревших релизов

Мы можем добавить вебхуки, которые сработают сразу после нужного нам шага. Для перехода в папку проекта можно использовать переменную: cd {{release}}





Например для проекта с Laravel добавим вебхук, который сработает сразу после "Deployment script": 


cd {{release}}

npm install
npm run production

php artisan storage:link
php artisan route:clear
php artisan migrate --force
php artisan queue:restart


После активации релиза "Activate New Release" перезагрузим PHP:

sudo service php-fpm reload


После того как основные настройки заданы, можно попробовать сделать деплой проекта при помощи кнопки "Deploy"


Все 4 шага отображают информацию, что происходит в момент деплоя. В случае ошибки, деплой будет прерван, проект от этого не пострадает. Информацию об ошибке можно посмотреть в логе при клике на иконку "Eye".



В случае успешного деплоя задача будет отмечена зеленым цветом:



Дополнительные возможности Envoyer.io


Health Check URL - позволяет проверять работоспособность проекта после каждого деплоя. В случае когда адрес вернут не 200 ответ, вы получите уведомление. Находится в настройках проекта, вкладка "The Basics"




Heartbeats - обратная связь сервера, которая должна "дергать" предлагаемые url с заданным интервалом. Если envoyer не получит запрос на созданный url, вы получите уведомление. Можно настроить cron задачу для отправки запроса на url или использовать thenPing() метод в расписании Laravel. 



Уведомления - которые возникают в разных ситуация, можно получать в каналы Slack, Microsoft Teams, Discord Email. 


Доступы к проекту - можно предоставить во вкладке "Collaborators" указав email пользователя зарегистрированного в Envoyer.




Envoyer подойдет как для простых так и для средних проектов, для одиночной и командной разработки.


Источник: ZetRider
Начало работы с Google Data Studio + MySQL
18.07.2021
134
Начало работы с Google Data Studio + MySQL

Для составления отчетов или анализа данных Google предоставляет удобный инструмент/конструктор Data Studio.Data Studio умеет из "коробки" уд...

Читать →
Bash деплой - аналог Envoyer
24.02.2021
570
Bash деплой - аналог Envoyer

Для быстрого деплоя личных или простых проектов можно использовать сервисы подобные Envoyer.io о котором писал ранее или написать свой велосипед на ba...

Читать →