Pull to refresh

Встречайте Envoyer.io (часть 1)

Reading time3 min
Views10K
Original author: Matt Stauffer
Envoyer — новый сервис от Тэйлора Отвелла, создателя Laravel. Уже сейчас можно посмотреть серию скринкастов на Laracasts про этот сервис. Это первая часть описания этого сервиса.

Вторая часть тут

image

Немного истории


Когда Laravel Forge был запущен Тэйлором, он стал серьезным помощником в запуске и управлении нескольких VPS, а также деплойменте приложений. Forge занимался процессом создания VPS в облаке, управлением окружения и деплоем (включая Git-hook-deployment) приложений на сервера, и сделал этот процесс более доступным и простым.

Но, к сожалению, Forge не удовлетворял таких потребностей, как управление более сложными деплой процессами или деплоймент без простоя. Вне зависимости от того, были Вы пользователем Forge или нет, приходилось задействовать такие инструменты, как Capistrano или Chef или Ansible, чтобы иметь больше возможностей. Но при этом, разобраться с этими инструментами занимает достаточно много времени.


Представляем Envoyer.io


Сегодня запускается Envoyer, который поможет решить выше описанные проблемы. Envoyer это zero-downtime деплоер для PHP и Laravel проектов. Это инструмент, который подключается к Вашему серверу, чтобы деплоить, и который использует серию инструментов, чтобы обеспечить то, что вся подготовительная работа для деплоя (например, composer install), выполняется в фоне, в то время, как предыдущая версия сайта всё ещё работает.

Как Zero-Downtime Deploy работает?


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

Деплой на обычной системе (например, в Forge) значит, что есть всего одна папка, где живет Ваш проект. Допустим есть два файла: index.php и папка app, и они лежат в webroot.

/webroot/index.php
/webroot/app


Ваша деплой система обычно сделает cd в эту папку, выполнит git pull и потом выполнит деплой скрипт, который, скорее всего, включает в себя composer install. Это значит, что, скорее всего, Ваше приложение не будет функционировать правильно в течение минимум нескольких секунд.

А zero-down-time система поддерживает систему с папкой releases, в которой хранятся по сути коммиты Вашей git истории. Каждый раз, когда деплой система запускается, она создает новую папку в releases и клонирует репозиторий на последнем коммите (или нужном коммите) в эту папку. Потом в этой папке запускается деплой скрипт. И только тогда, когда в новой папке существует полностью функционирующий проект, система меняет символическую ссылку current папки на последний релиз. И всё!
А Envoyer всем управляет сам. И в конце у Вас имеется примерно такое:

/webroot/current
/webroot/releases
/webroot/releases/20150316074832
/webroot/releases/20150315041251


Замечу, что все папки, которые должны сохраняться между релизами, должны существовать в корне проектной папки, и на них при каждом деплое нужно делать новые символические ссылки. Если деплоится Laravel приложение, то всё работает из коробки.

Первый проект с Envoyer


Окей, давайте начнем первый проект с Envoyer. Регистрируйтесь на Envoyer.io, выбрав пункт «I want to manage my own projects.».
image

А так выглядит дэшборд:
image

Добавляем первый проект


Первый шаг — добавить проект. Нажмите на большую кнопку «Add Project» в верхнем правом углу.
image

У Вас спросят, какого типа новый проект, а также указать данные Git'а.

Просмотр дэшборда проекта


Сразу после создания проекта, можно просматривать дэшборд отдельного проекта.
image

Добавление нового проекта


Во вкладке Servers на дэшборде можно добавить новый сервер для проекта.
image

Чтобы добавить новый сервер, Вам нужно указать IP адрес сервера, Unix/SSH пользователя, под которым Envoyer будет авторизоваться, и путь, где хранится проект (например, /home/username/website.com или /var/www/website.com).
Когда Вы добавите сервер, Вам будет выдан SSH ключ, который нужно добавить в файл ~/.ssh/authorized_keys того юзера, которого указали при добавлении сервера.
image

А если Вы используете Forge, добавьте этот SSH ключ во вкладке SSH keys нужного сервера.

Теперь во вкладке серверов, нажав кнопку обновить, можно проверить соединение с сервером.
image

Если всё хорошо, иконка станет зелёной с подписью “Successful.”

Допишите current/ к текущему webroot в настройках веб-сервера


Теперь, в конфиге nginx/Apache, нужно дописать current/. Если вы пользователь Forge и Laravel, то Вы, скорее всего, привыкли указывать папку /public. Теперь нужно указывать /current/public.
image

Запустить деплой


Вернитесь на дэшборд проект и нажмите на красную кнопку Deploy, чтобы выполнить новый деплой. Запись об этом появится во вкладке «Deployments».
image

Нажмите на стрелочку возле нужного деплоя и Вы сможете увидеть все шаги деплой скрипта (на данный момент, это стандартный деплой скрипт для данного типа проекта):
image

Заметье, что Вы также можете просмотреть вывод всех команд, из которых состоит деплой скрипт.
image

Готово!


Это всё для первого проекта! Теперь у Вас запущен проект, который деплоится с помощью Envoyer.
P.S. Если Вы хотите деплоить код, как только Вы запушили новые коммиты в Git ветку, можете в разделе Project Settings / Source Control поставить галочку возле “Deploy When Code Is Pushed”.
image
Tags:
Hubs:
+1
Comments11

Articles