Envoyer — новый сервис от Тэйлора Отвелла, создателя Laravel. Уже сейчас можно посмотреть серию скринкастов на Laracasts про этот сервис. Это вторая и последняя часть описания этого сервиса.
Встречайте Envoyer.io (часть 1)
В это части будут описаны более продвинутые возможности Envoyer.
У Envoyer есть 4 шага в процессе деплоя, а Вы в свою очередь можете выполнить любые свои скрипты до и после любого из этих шагов. Эти шаги: Клон нового релиза, Установка composer зависимостей, Активация нового релиза и Удаление старых релизов.
Возле каждого шага есть кнопка «шестерёнка», нажав на неё Вы попадает на следующий экран:
Там Вы можете добавлять хуки до и после выбранного шага. Нажмите на Add Hook в нужной Вам части.
Как видите, для каждого хука можно указать своё название, указать юзера под которым нужно выполнить скрипт, и тело хука, у которого есть доступ к переменной
Заметьте, что Вы также можно посредством drag & drop менять порядок выполнения хуков.
А что если Вы выполнили новый деплой и поняли, что всё сломали? Обычно, Вы бы коннектились на сервер через ssh,
Используя Envoyer, Ваш предыдущий релиз будет находиться в рабочем состоянии в папке
Вы могли заметить раздел Post-Deployment Health на проектном дэшборде. Там есть иконки для Нью-Йорка, Лондона и Сингапура — три региона, из которых Envoyer проверяет доступность Вашего приложения. До тех пор, пока Вы не укажете Health Check URL, эти иконки будут знаками вопроса.
У каждого проекта может быть указать Health Check URL, который будет вызван Envoyer'ом после каждого деплоя. Редактировать этот URL можно в настройках проекта.
После деплоя, Envoyer смотрит на HTTP ответ от указанного URL, и проверят, является ли код ответа
Если всё хорошо, то Вы увидите зеленые галочки.
Если что-то сломается, Вы увидите красные крестики (и тогда Вам, скорее всего, понадобится раздел «Отмены»):
Если Вы хотите деплоить на несколько серверов сразу, просто добавьте их в проект и сервер автоматически будет участвовать в деплое.
Заметьте, что, когда идет процесс деплоя, пока не закончится предыдущий шаг деплоя на каждом сервере, дальнейшие шаги не запускаются, что позволяет серверам оставаться полностью синхронизированными между собой.
Если у Вас есть локальный файл настройки, который нужно синхронизировать с серверами (
Заметьте, что файл шифруется паролем, который не хранится в Envoyer, поэтому не потеряйте “Environment Key”.
Как только Вы введёте пароль, Вам будет дано текстовое поле, которое по сути является редактором кода. Пишите то, что Вам нужно в этом поле, и содержимое будет сохранено в файл (
Теперь выберите сервера, на которые нужно это сохранить и сохраните.
Envoyer сам сохранит этот файл в корень проекта на серверах и создаст все нужные символические ссылки.
Во вкладке «Notifications», можно настроить Envoyer так, чтобы он уведомлял Вас о важных событиях. В данный момент Envoyer может уведомлять в Hipchat и Slack.
Одна из самых больших сложностей при управлении «здоровьем» серверов, это обеспечение того, что все cron задачи всегда работают. Envoyer Heartbeats позволяют установить условие, что если указанный URL пингуется с указанной частотой, значит cron работа «жива». Если пинга нет, Envoyer уведомит Вас об этом.
Чтобы добавить Heartbeat, во вкладке Heartbeats нажмите на кнопку Add Heartbeat.
Можно указать название и указать частоту, с которой ожидается получать пинг от cron задачи.
Как только Вы добавите его, статус будет Healthy. До тех пор, пока не пройдет указанное время, статус будет оставаться Healthy. То есть, если Вы выбрали 10 минут, оно будет оставаться Healthy в течение 10 минут после создания.
Каждый Heartbeat имеет свой уникальный URL, который можно получить на вкладке Heartbeats. Он будет следующего формата:
В обычном cron файле можно сделать следующим образом, чтобы пингануть Heartbeat:
Если Вы используете Laravel, в последней версии в планировщик был добавлен метод
Вот так выглядит уведомление, если нет пинга:
Envoyer позволяет неограниченному количеству людей получать доступ к Вашим серверам. Если кто-то в Вашей команде хочет работать с Вами над деплоем серверов, но не хочет создавать свой аккаунт с указанием данных платежной карты, то можно создать аккаунт выбрав пункт “I’m just collaborating with others.” при регистрации.
У каждого проекта есть вкладка Collaborators, где Вы можете добавлять людей, указывая их email.
Заметьте, что у этих людей будет доступ ко всем функциям, кроме удаления проекта.
Нет. Envoyer не управляет серверами. Но он составит отличную пару Forge.
После добавления нового сервера, Envoyer даст Вам SSH ключ, который нужно добавить в файл
Да, конечно. Правда, некоторые автоматические настройки не будут работать. Например, автоматическое создание символических ссылок на папку
Нет, просто запустите сайт, не подключая ни к какому репозиторию. Всё остальное сделает Envoyer сам.
Envoyer заметит это и уведомит Вас об этом. Деплой при этом будет отменён.
Встречайте Envoyer.io (часть 1)
В это части будут описаны более продвинутые возможности Envoyer.
Кастомизация деплой хуков
У Envoyer есть 4 шага в процессе деплоя, а Вы в свою очередь можете выполнить любые свои скрипты до и после любого из этих шагов. Эти шаги: Клон нового релиза, Установка composer зависимостей, Активация нового релиза и Удаление старых релизов.
Возле каждого шага есть кнопка «шестерёнка», нажав на неё Вы попадает на следующий экран:
Там Вы можете добавлять хуки до и после выбранного шага. Нажмите на Add Hook в нужной Вам части.
Как видите, для каждого хука можно указать своё название, указать юзера под которым нужно выполнить скрипт, и тело хука, у которого есть доступ к переменной
{{release}}
, в которой хранится путь в папке самого нового релиза (например, /home/my-user/website.com/releases/20150316083301
).Заметьте, что Вы также можно посредством drag & drop менять порядок выполнения хуков.
Отмены
А что если Вы выполнили новый деплой и поняли, что всё сломали? Обычно, Вы бы коннектились на сервер через ssh,
git log
, искали бы нужный коммит, копировали бы хэш коммита, git checkout THAT_HASH
, composer install
, и только тогда, возможно, успокоились бы на несколько минут.Используя Envoyer, Ваш предыдущий релиз будет находиться в рабочем состоянии в папке
releases
. Просто зайдите в дэшборд Вашего проекта, найдите деплой, который деплоил работающий код и нажмите кнопку “Redeploy”. Символическая ссылка current
просто станет указывать на рабочую папку в папке releases
и всё снова заработает.Здоровье
Вы могли заметить раздел Post-Deployment Health на проектном дэшборде. Там есть иконки для Нью-Йорка, Лондона и Сингапура — три региона, из которых Envoyer проверяет доступность Вашего приложения. До тех пор, пока Вы не укажете Health Check URL, эти иконки будут знаками вопроса.
У каждого проекта может быть указать Health Check URL, который будет вызван Envoyer'ом после каждого деплоя. Редактировать этот URL можно в настройках проекта.
После деплоя, Envoyer смотрит на HTTP ответ от указанного URL, и проверят, является ли код ответа
200
(OK). Если да, то Envoyer считает приложение «здоровым». Вы можете указать домашнюю страницу Вашего сайта или сделать специальный тестовый URL, который в полной мере сможет указать, «здоров» ли Ваш сервер.Если всё хорошо, то Вы увидите зеленые галочки.
Если что-то сломается, Вы увидите красные крестики (и тогда Вам, скорее всего, понадобится раздел «Отмены»):
Деплой на несколько серверов
Если Вы хотите деплоить на несколько серверов сразу, просто добавьте их в проект и сервер автоматически будет участвовать в деплое.
Стадии деплоя
Заметьте, что, когда идет процесс деплоя, пока не закончится предыдущий шаг деплоя на каждом сервере, дальнейшие шаги не запускаются, что позволяет серверам оставаться полностью синхронизированными между собой.
Синхронизация настроек окружения
Если у Вас есть локальный файл настройки, который нужно синхронизировать с серверами (
.env
в Laravel 5, .env.php
в Laravel 4), нажмите кнопку Manage Environment в проектном дэшборде.Заметьте, что файл шифруется паролем, который не хранится в Envoyer, поэтому не потеряйте “Environment Key”.
Как только Вы введёте пароль, Вам будет дано текстовое поле, которое по сути является редактором кода. Пишите то, что Вам нужно в этом поле, и содержимое будет сохранено в файл (
.env
, если Вы выбрали тип проекта Laravel 5 или Другой и .env.php
, если тип проекта — Laravel 4).Теперь выберите сервера, на которые нужно это сохранить и сохраните.
Envoyer сам сохранит этот файл в корень проекта на серверах и создаст все нужные символические ссылки.
Уведомления
Во вкладке «Notifications», можно настроить Envoyer так, чтобы он уведомлял Вас о важных событиях. В данный момент Envoyer может уведомлять в Hipchat и Slack.
Heartbeats
Одна из самых больших сложностей при управлении «здоровьем» серверов, это обеспечение того, что все cron задачи всегда работают. Envoyer Heartbeats позволяют установить условие, что если указанный URL пингуется с указанной частотой, значит cron работа «жива». Если пинга нет, Envoyer уведомит Вас об этом.
Чтобы добавить Heartbeat, во вкладке Heartbeats нажмите на кнопку Add Heartbeat.
Можно указать название и указать частоту, с которой ожидается получать пинг от cron задачи.
Как только Вы добавите его, статус будет Healthy. До тех пор, пока не пройдет указанное время, статус будет оставаться Healthy. То есть, если Вы выбрали 10 минут, оно будет оставаться Healthy в течение 10 минут после создания.
Пинг heartbeat
Каждый Heartbeat имеет свой уникальный URL, который можно получить на вкладке Heartbeats. Он будет следующего формата:
beats.envoyer.io/heartbeat/203849102395790125
В обычном cron файле можно сделать следующим образом, чтобы пингануть Heartbeat:
php yourfile.php && curl https://beats.envoyer.io/heartbeat/203849102395790125
Если Вы используете Laravel, в последней версии в планировщик был добавлен метод
thenPing()
, который позволяет выполнить пинг любого URL после выполнения cron задачи. Это идеально подходит для Heartbeats:Вот так выглядит уведомление, если нет пинга:
Совместная работа
Envoyer позволяет неограниченному количеству людей получать доступ к Вашим серверам. Если кто-то в Вашей команде хочет работать с Вами над деплоем серверов, но не хочет создавать свой аккаунт с указанием данных платежной карты, то можно создать аккаунт выбрав пункт “I’m just collaborating with others.” при регистрации.
У каждого проекта есть вкладка Collaborators, где Вы можете добавлять людей, указывая их email.
Заметьте, что у этих людей будет доступ ко всем функциям, кроме удаления проекта.
FAQ
Будет ли Envoyer заменой Forge?
Нет. Envoyer не управляет серверами. Но он составит отличную пару Forge.
Как Envoyer авторизуется на сервере?
После добавления нового сервера, Envoyer даст Вам SSH ключ, который нужно добавить в файл
authorized_keys
нужного пользователяМогу ли я использовать Envoyer с не Laravel проектом?
Да, конечно. Правда, некоторые автоматические настройки не будут работать. Например, автоматическое создание символических ссылок на папку
storage
. Но этого можно будет добиться используя хуки.Если я использую Forge, надо ли подключать сайт к Git репозиторию в Forge?
Нет, просто запустите сайт, не подключая ни к какому репозиторию. Всё остальное сделает Envoyer сам.
Что случится, если в каком-нибудь шаге деплоя произойдет ошибка?
Envoyer заметит это и уведомит Вас об этом. Деплой при этом будет отменён.