Деплой приложений с машины разработки на боевой сервер всегда создавал множество проблем для разработчиков. На машинах могут быть установлены разные версии библиотек и зависимых сервисов, использоваться различные пути установки. Да что там говорить, не каждый разработчик будет держать на своей машине Linux-дистрибутив нужной версии. Но что, если бы у нас был инструмент, позволяющий быстро и легко развернуть нужную среду разработки и так же просто залить приложение на боевой сервер?

 

Вместо введения

С незапамятных времен для решения проблемы различий среды разработки и боевого сервера принято применять виртуальные серверы. Это действительно простой и удобный способ создать идентичное боевому серверу окружение на любой платформе, будь это Linux, OS X или Windows. Все, что нужно сделать, — это установить виртуалку, поднять в ней нужную ОС и настроить ее идентично серверу.

Особо продвинутые товарищи шли еще дальше и писали скрипты, позволяющие частично или полностью автоматизировать этот процесс. Для автоматизации самой виртуальной машины применялись встроенные в них командные интерфейсы (такие есть и в VMware, и в VirtualBox, и даже в QEMU), а для автоматизации развертывания нужной среды в уже запущенной ВМ — системы оркестрации типа Puppet или Chief. Затем появился Vagrant — готовое ПО, направленное на решение именно этой задачи. Он должен быть хорошо знаком любому, кто продвинулся дальше модели «одно приложение на одном сервере» и в связи с этим столкнулся с кучей проблем. Vagrant позволяет поднять окружение практически любой сложности и с любым количеством машин с помощью пары простых команд и набора конфигурационных файлов.

За пять лет Vagrant фактически превратился в стандарт среди данного типа решений, а его разработчики выпустили массу сопутствующих инструментов: Packer для создания образов виртуальных машин, Terraform для автоматического построения целых инфраструктур в облаке, Сonsul и Serf для мониторинга серверов и их коммуникации и другие. Все они работали в связке с Vagrant и фактически брали на себя работу DevOps-инженера. Однако без проблем не обошлось. Инструменты были разобщены и использовали разные форматы конфигов. Сам Vagrant также стал не самым простым и очевидным решением. Для написания конфига, например, нужно было знать хотя бы азы Ruby, а также синтаксис Puppet или другой системы оркестрации. Также Vagrant не особо подходил для решения задач в эру микросервисов и оперировал целыми машинами, а не приложениями. Вопрос деплоя также не был до конца решен.

Чтобы избавиться от этих проблем, разработчики Vagrant выкатили Otto — единое решение, позволяющее объединить все описанные инструменты и при этом на порядок упростить и конфигурирование окружения разработки, и его деплой на реальные серверы. Благодаря Otto такие задачи решаются с помощью небольшого и понятного конфига в несколько десятков строк и пары команд. Кроме того, этот инструмент следует тренду и ориентирован на микросервисы (основанные на Docker, например), а также оперирует понятием «приложение», а не «машина». То есть если в случае Vagrant ты описывал в конфигах всю машину целиком (какой дистрибутив поставить, какие пакеты и прочее), то в конфиге Otto тебе достаточно описать только свое приложение, а все остальное Otto сделает за тебя: скачает нужный образ ОС и поставит все необходимые зависимости. Тебе останется только зайти в созданное окружение с помощью SSH.

Otto ориентирован на облака, поэтому деплой приложения в нем выполняется с помощью заливки на удаленный сервер не самого приложения, а всего образа ОС целиком. Другими словами, после того как ты внес все необходимые правки в приложение, остается только отдать команду на сборку образа под конкретную облачную платформу (поддерживаются Amazon и другие) и команду для его заливки. К примеру, если тебе нужен веб-сервер на Amazon с указанным PHP-приложением, то все, что нужно сделать, — это создать конфиг в несколько строк и отдать несколько команд для создания окружения, построения из него образа и последующей заливки образа на Amazon. В дальнейшем в локальное окружение можно «зайти», внести изменения и точно так же залить обновленный образ в облако с помощью пары команд. Это действительно очень просто.

 

Пробуем!

Otto легко не только использовать, но и установить. Фактически это один исполняемый файл (доступны версии для Linux, OS X и Windows), который достаточно скачать и запустить. Единственное требование: установленный VirtualBox. Все остальные зависимости (Vagrant и Ко) Otto скачает сам. Пример установки Otto в среде Linux:

$ cd /tmp
$ wget https://releases.hashicorp.com/otto/0.1.2/otto_0.1.2_linux_amd64.zip
$ unzip otto_0.1.2_linux_amd64.zip
$ mv otto ~/bin
$ chmod +x ~/bin/otto

Вместо каталога ~/bin можно использовать и любой другой, сути это не меняет. Далее просто запускаем Otto:

$ otto

На экране должен появиться простенький хелп. А дальше можно начать работу с приложением. Для примера создадим конфигурацию окружения для запуска Ruby-приложений с MySQL в отдельном Docker-контейнере. Для начала создадим каталог проекта с подкаталогом mysql внутри:

$ mkdir -p otto-project/mysql/

Далее в подкаталоге mysql разместим файл Appfile со следующим содержимым:

application {
    name = "mysql"
    type = "docker-external"
}

customization "docker" {
    image = "mysql"
    run_args = "-e MYSQL_ROOT_PASSWORD=mysuperpassword -e MYSQL_DATABASE=example"
}

Отдадим команды для «компиляции» конфига:

$ otto compile

Данная команда прочитает наш конфиг и создаст подкаталог .otto с конфигами Vagrant. Теперь возвращаемся в каталог otto-project и создаем следующий Appfile:

Продолжение статьи доступно только подписчикам

Вариант 1. Оформи подписку на «Хакер», чтобы читать все статьи на сайте

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

Вариант 2. Купи одну статью

Заинтересовала статья, но нет возможности оплатить подписку? Тогда этот вариант для тебя! Обрати внимание: этот способ покупки доступен только для статей, опубликованных более двух месяцев назад.


Комментарии

Подпишитесь на ][, чтобы участвовать в обсуждении

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

Check Also

Скрытая сила пробела. Эксплуатируем критическую уязвимость в Apache Tomcat

В этой статье мы поговорим о баге в Apache Tomcat, популярнейшем веб-сервере для сайтов на…