Автоматизация развертывания приложений в 1 клик на платформе InfoboxCloud Jelastic с JPS

от автора

Цель платформы Jelastic — сделать использование сложных технологий простым и понятным. Наша цель — сократить время, которое разработчики обычно тратят на выполнение рутинных задач для повышения эффективности работы. Однако всегда найдется то, что можно сделать лучше.

В этой статье мы рассмотрим решение, позволяющее автоматизировать установку приложения в один клик — Jelastic Packaging Standard (JPS). Мы опишем, как запаковать приложение в качестве готового к использованию продукта.

Jelastic Packaging Standard

Общая информация

JPS — это стандарт, который может быть использован для создания шаблонов приложений, готовых для установки в Jelastic за 1 клик. В настоящий момент, система поддерживает приложения на Java, PHP и Ruby. В будущем, мы планируем добавить поддержку и других языков программирования.

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

Используя JPS, можно предложить пользователям виджет для быстрой установки приложений. Это способствует распространению приложения и росту продаж. Привлечь пользователей становится проще из-за легкости установки и настройки. Помимо этого, снижаются траты на поддержку и прочие моменты, связанные с распространением приложения.

Процесс установки с JPS

Каждый установочный виджет содержит манифест приложения (или ссылку на него) с описанием топологии окружения, необходимого для корректной работы, а также инструкции по установке и настройке. Манифест JPS основан на JSON.

JPS application manifest
Для начала установки подготовленного приложения пользователь должен нажать на виджет и ввести действующий e-mail. На указанный адрес будет выслано письмо, по ссылке из которого нужно перейти для инициалиазии установки. Пользователь будет перенеправлен в панель управления Jelastic, где он сможет произвести подтверждение действия.

После этого Jelastic потребуется несколько минут для завершения процесса установки. Стоит отметить, что фактическая продолжительность зависит от выбранного приложения, его свойств и характеристик. Jelastic опирается на манифест и создает необходимые ноды: серверы приложений, базы данных, балансировщик нагрузки и так далее. В результате пользователь получает полностью работоспособное приложение без каких-либо ручных операций.

JPS Initiate Installation
Ниже мы подробно рассмотрим техническую сторону подготовки манифеста и создания виджета. И конечно мы покажем как выглядит установка в один клик со стороны конечного пользователя.

Манифест приложения

Прежде чем запаковать приложение, мы рекомендуем развернуть его в облаке Jelastic вручную и проверить, все ли работает как необходимо. Это стоит сделать, чтобы точно знать, какую конфигурацию нужно указать в манифесте.

Для создания манифеста, полностью подходящего под требования JSON, можно использовать JSON Formatter & Validator или http://pro.jsonlint.com. Ваш код должен содержать набор строк, необходимых для успешной установки приложения.

Содержимое манифеста

Обязательная часть манифеста содержит несколько строк:

{   "jpsVersion":"0.2"   "jpsType": "install",   "application": { } } 

Этa часть содержит информацию о версии JPS и типе установки приложения (например, “install” запускает процесс создания нового окружения, которое подходит для деплоя).

Параметры приложения

Указанный выше код необходимо расширить в соответствии с настройками приложения, которое вы собираетесь упаковать по стандарту JPS. Сведения о конфигурации включены в параметр “application”: { }

В первую очередь нужно описать некоторую общую информацию о приложении. К примеру, название, версия, язык программирования и прочее.

Пример кода для OpenCMS, которая содержит базовую информацию о приложении:

{ application: {       "id":"opencms",       "name":"OpenCMS",       "version":"8.5",       "logo":"",       "type":"java",       "homepage": "",       "description": {           "en": "OpenCMS from Alkacon Software is a professional, easy to use website content management system. OpenCms helps content managers worldwide to create and maintain beautiful websites fast and efficiently.",           "ru": "Russian description"       },      "startPage" : "/install.jsp",      "success": {     "text": "Dashboard success text",     "email": "Email success text"      } }} 

Подробную информацию о доступных параметрах можно почитать в документации по JPS.

Параметры окружения

Здесь вам нужно указать сведения об окружении, которое требуется приложению для оптимальной работы. Настройки указанные в этой части кода будут использованы при создании и конфигурации окружения необходимого для установки пакета.

Используейте параметр “env”: { } для описания всех необходимых значений. При этом нужно учитывать возможные варианты, которые перечислены в документации.

Из параметров можно использовать:

“topology”:{ } содержит данные о языке программирования окружения, данные о необходимых нодах и позволяет использовать такие дополнительные функции как High Availability и SSL.

"topology":{               "ha":"value",               "engine":"value",               "ssl":"value",               "nodes":[ ]            }, 

“deployments”:[ ] отвечает за процесс деплоя приложения в готовом окружении.

"deployments":[               {                  "archive":"value",                  "name":"value",                  "context":"value"               }            ] 

“upload”:[ ] — блок может быть добавлен, если приложению требуются сторонние файлы, они будут загружены и установлены.

"upload":[               {                  "nodeType":"value",                  "sourcePath":"value",                  "destPath":"value"               }                         ], 

“configs”:[ ] — этот блок позволяет изменять любой файл на любой из нод для настройки параметров приложения (например, описание процесса установки соединения между сервером приложений и базой данных).

"configs":[               {                  "nodeType":"value",                  "restart":"value",                  "replacements":[]                  "path":"value",                  "database":{},                  }                           ] 

Пример кода, который описывает параметры окружения для выполнения Hello World:

"env": {             "topology": {                 "engine": "php5.3",                 "nodes": [{                         "extip": false,                         "count": 1,                         "cloudlets": 16,                         "nodeType": "apache2"                     }                 ],                 "ssl": false,                 "ha": false             },             "deployments": [{                     "archive": "http://app.jelastic.com/xssu/cross/download/RDYYHFNuUQYJBFpPZQ08F0UWCRlUHxdBD0ZlTS4gcQJFFBJUDwIBQmNTTEBI",                     "name": "Hello World",                     "context": "ROOT"                 }             ],             "configs": []         }, 

Детальная информация о первичных настройках доступна здесь.

JPS поддерживает список шаблонов (placeholders), которые могут быть использованы в любой части файла JPS (если блок не ограничен строго содержимым). Контроллер JPS постарается преобразовать все шаблоны на стадии установки пакетов. Если этого не произойдет, шаблон не будет реализован и отобразится в тексте как ${placeholder}

Проверка результата

Для проверки корректности созданного манифеста используйте ссылку ниже. Ссылка инициализирует процесс установки:

app.jelasticloud.com?manifest={manifest_code}

Отметим, в указанной ссылке вместо кода манифеста, мы рекомендуем использовать URL с JSON файлом манифеста.

В случая проблем с манифестом можно нажать Send report и отобразятся подробности ошибки в details:

Код JSON можно проверить например в валидаторе http://pro.jsonlint.com и исправить ошибку.

В случае успеха вы увидите предложение к развертыванию приложения:

Образец манифеста для Magento

Перед вами пример манифеста Magento. Вы можете использовать этот код как основу при подготовке пакетов приложений. С остальными примерами можно ознакомиться здесь.

{     "jpsVersion": "0.2",     "jpsType": "install",     "application": {         "id": "omagento1",         "logo": "https://app.jelastic.com/xssu/cross/download/RDYYHFNvBFQOA1RKYgFoRhdDWhRTS00RDxZtG34gIlYWHhdXDwIBQmNTTEBI/view",         "description": {             "en": "Magento is the eCommerce software and platform trusted by the world's leading brands. Grow your online business with Magento!"         },         "name": "Magento1",         "env": {             "topology": {                 "engine": "php5.3",                 "nodes": [{                         "extip": false,                         "cloudlets": 16,                         "count": 1,                         "nodeType": "apache2"                     }, {                         "extip": false,                         "cloudlets": 16,                         "count": 1,                         "nodeType": "mysql5"                     }                 ],                 "ssl": false,                 "ha": false             },             "deployments": [{                     "name": "magento-1.7.0.2.zip",                     "context": "ROOT",                     "archive": "https://app.jelastic.com/xssu/cross/download/RDYYHA9jBlRaAVRLZldjQUdFDhhUG0dACkY4TnpzJlFFEhZVDwIBQmNTTEBI"                 }             ],             "configs": [{                     "nodeType": "mysql5",                     "database": {                         "dump": "https://app.jelastic.com/xssu/cross/download/RDYYHFM0UFEJU1VNNwVqRRBAXhhXGBEQChNrG31xdFQRFkBYDwIBQmNTTEBI",                         "patch": "UPDATE magento.admin_user SET password=CONCAT(MD5('qX${user.appPassword}'), ':qX'), email='${user.email}' WHERE username='admin';",                         "name": "magento",                         "user": "magento"                     }                 }, {                     "replacements": [{                             "replacement": "<![CDATA[${env.appid}]]>",                             "pattern": "{{key}}"                         }, {                             "replacement": "<![CDATA[${nodes.mysql5.address}]]>",                             "pattern": "{{db_host}}"                         }, {                             "replacement": "<![CDATA[${nodes.mysql5.database.user}]]>",                             "pattern": "{{db_user}}"                         }, {                             "replacement": "<![CDATA[${nodes.mysql5.database.password}]]>",                             "pattern": "{{db_pass}}"                         }, {                             "replacement": "<![CDATA[${nodes.mysql5.database.name}]]>",                             "pattern": "{{db_name}}"                         }, {                             "replacement": "</config>",                             "pattern": "{{db_name}}"                         }                     ],                     "path": "/var/www/webroot/ROOT/app/etc/local.xml",                     "nodeType": "apache2"                 }, {                     "restart": true,                     "replacements": [{                             "replacement": "extension=gd.so",                             "pattern": "; Dynamic Extensions ;"                         }                     ],                     "path": "/etc/php.ini",                     "nodeType": "apache2"                 }             ]         },         "success": {             "text": "Admin panel URL: <a href='${env.url}index.php/admin/' target='_blank'>${env.url}index.php/admin/</a> Username: admin Password: ${user.appPassword}",             "email" : "Admin panel URL: <a href='${env.url}index.php/admin/' target='_blank'>${env.url}index.php/admin/</a> Username: admin Password: ${user.appPassword}"         },         "type": "php",         "homepage": "http://www.magentocommerce.com/",         "version": "1.7.0.2"     } } 

Дополнительная полезная информация:

  • ссылки в манифесте на логотип должны быть https.
  • аттрибут ha доступен только для Java–приложений в настоящий момент.
  • для корректного отображения description должен быть на всех языках, которые включены в панели управления Jelastic (в настоящий момент это русский и английский).
Установочный виджет

Давайте рассмотрим другую сторону использования JPS. Когда манифест приложения будет готов, вы сможете поделиться возможностью установки приложения в 1 клик с пользователями с помощью виджета установки:


В виде примера мы разбираем виджет пакета Magento.

1) Разместите следующий JavaScript на вашей странице. Лучше всего, если код будет сразу после открывающего тэга .

<html>   <body> <script>     (function(d, s, id) {         var js, fjs = d.getElementsByTagName(s)[0];         if (d.getElementById(id)) return;         js = d.createElement(s); js.id = id;         js.async = true;         js.src = "//go.jelastic.com/widgets.js";         fjs.parentNode.insertBefore(js, fjs);     }(document, 'script', 'jelastic-jssdk')); </script> </body> </html> 

2) Этот код поместите в любом месте, где вы бы хотели увидеть виджет.

<div  	class="je-app"  	data-manifest="link_to_json_file"  	data-width="280"  	data-theme="flat-blue"  	data-text="Get it hosted now!"  	data-tx-empty="Type your email and click the button"  	data-tx-invalid-email="Invalid email, please check the spelling"  	data-tx-error="An error has occurred, please try again later"  	data-tx-success="Check your email"  	data-key="app.jelasticloud.com"> </div> 

Указанные выше атрибуты отвечают за:

data-manifest — определяет ссылку на файл JSON.
data-width — ширина виджета.
data-theme — цвет виджета. Доступны: flat-blue, flat-purple, flat-orange, flat-green;
data-text — начальная метка виджета. Текст по умолчанию: Get it hosted now!
data-tx-empty — при наведении мыши на виджет пользователь увидит текст, описанный этим атрибутом. Дефолт: Type your email and click the button
data-tx-invalid-email — текст, описанный атрибутом, отдается если e-mail некорректный. Дефолт: Invalid email, please check the spelling
data-tx-error — если пройзойдет какая-либо ошибка пользователь увидит сообщение: An error has occurred, please try again later
data-tx-success — текст будет показан, если все хорошо, процесс установки начат и письмо для подтверждения отправлено: Check your email.
class — атрибут всегда содержит значение je-app.
data-key — необязательный параметр, который определяет хостинг-провайдера. Если параметр не определен, то дейтсвует GeoIP. Будет выбран географически близкий к пользователю провайдер.

Виджет вы можете использовать на любой сайте и кастомизировать его как угодно. Единственное условие, которое следует соблюдать, виджет должен запрашивать ссылку следующего вида:

reg.app.jelasticloud.com/installapp?email={user_email}&id={app_id}

Со стороны пользователя

Когда виджет уже размещен на сайте, любой пользователь может начать процесс установки, кликнув кнопку Get it hosted now! и выполнив ряд действий:

1) Введите электронный почтовый адрес и нажмите на указатель.


2) Письмо с ссылкой для подтверждения будет отправлено на указанный e-mail. Ссылка действует один раз и осуществляет перенаправление в панель управления Jelastic.

Если e-mail уже зарегестрирован в Jelastic, то пользователь автоматически залогиниться в панель управления. В противном случае, пользователю на e-mail придут учетные данные для входа.

3) В панели управления будет открыто окно Сonfirm installation of application c краткой информацией о приложении.

Необходимо ввести название окружения, которое будет создано для деплоя приложения и нажать Install.

4) Процесс создания начат. Необходимо выждать пару минут, Создание окружения, его конфигурация и деплой приложения будут завершены.

Url приложения и данные для доступа к нему отобразятся по окончании процесса установки (разумеется, если это указано для приложения).

5) Нажмите кнопку Open in browser и приложение загрузится в тот же момент.

Как видите, приложение работает и готово к использованию. Нет ничего сложного!

Итоги

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

Создавайте пакеты ваших приложений и делитесь ими на сайтах с помощью виджетов. Один клик — и готово!

Чем больше виджетов, тем больше пользователей.

Начните сейчас и ощутите выгоду от использования формата JPS и платформы InfoboxCloud Jelastic.

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


Комментарии

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

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