Awsbox — PaaS-инфраструктура для развёртывания приложений Node.js в облаке Amazon

от автора

От переводчика: Это двенадцатая, последняя статья из цикла о Node.js от команды Mozilla Identity, которая занимается проектом Persona.


После того как вы написали приложение на Node.js, как развернуть его на сервере? Вместо того, чтобы использовать готовое PaaS-решение, наша команда создала собственную инфраструктуру поверх Amazon EC2. Сейчас мы расскажем подробнее о том, как мы это сделали.

Мы представим вам awsbox — минималистичный слой PaaS-инфраструктуры для Node.js, который сейчас обслуживает пару дюжин некритичных сервисов Mozilla. Awsbox разработан для того, чтобы предоставить простоту и удобство развёртывания, характерные для PaaS, не теряя при этом гибкости кастомизированной инфраструктуры.

Использование awsbox

Чтобы начать использовать awsbox, вам надо будет внести несколько небольших изменений в своё приложение и добавить учётные данные Amazon в переменные окружения. После этого вы можете приступить к развёртыванию с помощью инструментов командной строки.

В приложение нужно внести такие изменения:

  • создать файл .awsbox.json, содержащий инструкции по запуску сервера;
  • добавить awsbox в список зависимостей package.json;
  • убедиться, что сервер слушает порт, указанный в переменной окружения PORT.

Учётные данные Amazon нужно указать в переменных окружения AWS_ID и AWS_SECRET. Их можно узнать в консоли управления Amazon.

После того, как конфигурация окончена, можно установить модуль awsbox через npm, и создать сервер:

$ node_modules/.bin/awsbox create -n MyFirstAWSBOX reading .awsbox.json attempting to set up VM "MyFirstAWSBOX"    ... VM launched, waiting for startup (should take about 20s)    ... Instance ready, setting human readable name in aws    ... name set, waiting for ssh access and configuring    ... public url will be: http://<IP ADDRESS>    ... nope.  not yet.  retrying.    ... victory!  server is accessible and configured    ... applying system updates    ... and your git remote is all set up    ... configuring SSL behavior (enable)   Yay! You have your very own deployment. Here are the basics:     1. deploy your code:  git push MyFirstAWSBOX HEAD:master   2. visit your server on the web: http://<IP ADDRESS>   3. ssh in with sudo: ssh ec2-user@<IP ADDRESS>   4. ssh as the deployment user: ssh app@<IP ADDRESS> 

Последний шаг — собственно развёртывание приложения. Это делается с помощью git push:

$ git push MyFirstAWSBOX HEAD:master 

Теперь ваше приложение работает на виртуальной машине EC2. Вся процедура занимает около двадцати минут и требует минимальных изменений в приложении. Все изменения в процессе разработки можно выкладывать на сервер привычным способом, через git push.

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

Awsbox — это минималистичный контракт

Любое рабочее окружение сервера имеет определённые требования к запускаемому приложению, другими словами, заключает с ним контракт. Для awsbox основные пункты контракта это:

Какие процессы будут запущены? Это должно быть указано в .awsbox.json. В простейшем виде это выглядит так:

{   "processes": [ "path/to/myprocess.js" ] } 

Какое ПО нужно установить? Список должен быть указан в package.json.

Какой порт должен слушать сервер? Номер порта должен быть в переменной окружения PORT.

Создавая awsbox, мы хотели сделать его влияние на приложение минимальным, чтобы было легко портировать существующие приложения.

Awsbox — это образ виртуальной машины

Во время установки awsbox создаёт экземпляр виртуальной машины из образа, устанавливает зависимости и запускает приложение. Наш образ построен на основе Amazon Linux AMI — образом Linux, который предоставляет Amazon. Для этого образа доступны репозитории пакетов rpm и пакетный менеджер yum. Конкретный ID образа указан в коде awsbox.

В созданном экземпляре машины есть несколько предустановленных аккаунтов. Аккаунт ec2-user — это администратор сервера с возможностью выполнять sudo. Аккаунт proxy служит для доступа к обратному HTTP-прокси, который можно настроить для включения SSL и поддержки HTTPS без каких-либо изменений в приложении. Наконец, аккаунт app имеет доступ к вашему приложению, логам сервера, репозиторию и хукам git. Он отвечает за установку зависимостей и запуск приложения.

Awsbox — это инструменты командной строки

При установке awsbox вы получаете набор библиотек JavaScript и инструментов командной строки на локальной машине. Скрипты и консольные команды позволяют развернуть приложение гораздо быстрее, чем через веб-консоль Amazon, и берут на себя большую часть работы по созданию инстанса EC2, доступного из веба и по SSH.

Кроме того, awsbox предоставляет много команд для администрирования вашего сервера приложения, полный список которых можно посмотреть, выполнив node_modules/.bin/awsbox -h.

Самая интересная команда из этого набора — create. Она создаёт виртуальную машину.

Awsbox — это куча функций и хуков

Любой сервер, кроме самого примитивного, требует не только Node.js и пакетов Node. Awsbox позволяет указать системные пакеты для установки с помощью yum. Для более тонкой настройки есть два пути:

Доступ по SSH. Цель awsbox — максимально ускорить развёртывание, и иногда проще и быстрее всего бывает вручную настроить некоторые вещи, не забыв упомянуть эти шаги в README. Но кое-что можно и автоматизировать.

Скрипты для автоматической конфигурации. Awsbox предоставляет хуки, которые позволяют добавить пользовательский скрипт на определённых этапах установки. С их помощью можно сконфигурировать MySQL, установить Redis — или что угодно ещё, необходимое вашему приложению.

Подходит ли awsbox мне?

Наличие единого механизма развёртывания приложения для некритичных сервисов очень сильно повысило производительность нашей команды. Простой и понятный контракт между средой и приложением значительно упрощает сотрудничество. Устоявшийся набор соглашений упрощает поиск и разрешение проблем. Наконец, переход экспериментального приложения в продакшн становится проще, когда уже есть готовый список зависимостей.

Если вы ищете решение для развёртывания собственных экспериментальных сервисов Node.js, вам стоит присмотреться к awsbox.


ссылка на оригинал статьи http://habrahabr.ru/company/nordavind/blog/198590/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *