Цель платформы Jelastic — сделать использование сложных технологий простым и понятным. Наша цель — сократить время, которое разработчики обычно тратят на выполнение рутинных задач для повышения эффективности работы. Однако всегда найдется то, что можно сделать лучше.
В этой статье мы рассмотрим решение, позволяющее автоматизировать установку приложения в один клик — Jelastic Packaging Standard (JPS). Мы опишем, как запаковать приложение в качестве готового к использованию продукта.
Общая информация
JPS — это стандарт, который может быть использован для создания шаблонов приложений, готовых для установки в Jelastic за 1 клик. В настоящий момент, система поддерживает приложения на Java, PHP и Ruby. В будущем, мы планируем добавить поддержку и других языков программирования.
JPS упрощает установку и конфигурацию приложения для конечного пользователя, управляет процессом развертывания приложения, определяет набор его свойств и конфигурацию кластера, в котором будет работать приложение. JPS также указывает количество необходимых ресурсов и пределы масштабирования для каждого контейнера в окружении.
Используя JPS, можно предложить пользователям виджет для быстрой установки приложений. Это способствует распространению приложения и росту продаж. Привлечь пользователей становится проще из-за легкости установки и настройки. Помимо этого, снижаются траты на поддержку и прочие моменты, связанные с распространением приложения.
Процесс установки с JPS
Каждый установочный виджет содержит манифест приложения (или ссылку на него) с описанием топологии окружения, необходимого для корректной работы, а также инструкции по установке и настройке. Манифест JPS основан на JSON.
Для начала установки подготовленного приложения пользователь должен нажать на виджет и ввести действующий e-mail. На указанный адрес будет выслано письмо, по ссылке из которого нужно перейти для инициалиазии установки. Пользователь будет перенеправлен в панель управления Jelastic, где он сможет произвести подтверждение действия.
После этого Jelastic потребуется несколько минут для завершения процесса установки. Стоит отметить, что фактическая продолжительность зависит от выбранного приложения, его свойств и характеристик. Jelastic опирается на манифест и создает необходимые ноды: серверы приложений, базы данных, балансировщик нагрузки и так далее. В результате пользователь получает полностью работоспособное приложение без каких-либо ручных операций.
Ниже мы подробно рассмотрим техническую сторону подготовки манифеста и создания виджета. И конечно мы покажем как выглядит установка в один клик со стороны конечного пользователя.
Манифест приложения
Прежде чем запаковать приложение, мы рекомендуем развернуть его в облаке 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 — необязательный параметр, который определяет
Виджет вы можете использовать на любой сайте и кастомизировать его как угодно. Единственное условие, которое следует соблюдать, виджет должен запрашивать ссылку следующего вида:
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.
Автор: infobox