Jelastic DevOps PaaS для хостеров и ISV
34,21
рейтинг
26 февраля 2014 в 13:00

Разное → JPS (Jelastic Packaging Standard) для установки сложных приложений в один клик

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

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

jps


Общие сведения


JPS это стандарт для создания шаблонов полностью настроенных приложений, готовых к установке в облако Jelastic в один клик. Данное решение предоставляет систему автоматической инсталляции Java, PHP или Ruby приложений (а также других языков в будущем).

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

С JPS вы можете предложить пользователям виджет для быстрой установки приложения. Это поможет распространить приложение среди более широкой аудитории и значительно увеличить объёмы продаж т.к. избавляет от сложностей установки и настройки, упрощает выбор хостинга и, таким образом, убирает барьеры в привлечении клиентов. К тому же, JPS помогает IT отделам уменьшить затраты на поддержку и управление приложением.

Установка JPS


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

app manifest

Для установки запакованного приложения пользователю всего лишь нужно нажать на виджет и ввести свой адрес электронной почты. На указанный имейл будет отправлена ссылка подтверждения. Пройдя по этой ссылке пользователь попадет в панель управления Jelastic для подтверждения установки.

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

initiate installation

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

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


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

Для создания JPS манифеста используется JSON формат (JSON Formatter & Validator). Данный код должен содержать набор строк, необходимых для успешной установки приложения.

Тело кода


Основой кода являются следующие строки:

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


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

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


Вышеуказанные основные строки должны быть расширены настройками самого приложения, которое вы запаковываете. Детали конфигурации размещаются в параметре «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"
     }

}}


Пройдите по ссылке, чтобы детальнее ознакомиться с параметрами описания приложения.

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


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

Используя параметр «env»: { } укажите все необходимые значения в соответствии с возможными вариантами, описанными в документе. Данный параметр состоит из следующих разделов:

  • «topology»:{ } содержит данные о языке программирования, необходимых нодах и их настройках, а также предоставляет возможность включить дополнительные функции, такие как высокая доступность и 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 поддерживает список плейсхолдеров, которые можно использовать в любом разделе JPS манифеста (только если он не ограничен контентом). JPS контроллер попытается обработать все плейсхолдеры на этапе установки пакета. Если это невозможно — плейсхолдер будет необработан и отображен в тексте как есть (например, ${placeholder}).

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


Чтобы проверить правильность настроек манифеста, используйте следующую ссылку для запуска процесса установки:

http://{hoster_domain}?manifest={manifest_code}

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

Пример манифеста для Magento


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

Magento манифест

{
    "jpsVersion": "0.2",
    "jpsType": "install",
    "application": {
        "id": "magento",
        "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": "Magento",
        "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><br/>Username: admin<br/>Password: ${user.appPassword}",
            "email" : "Admin panel URL: <a href='${env.url}index.php/admin/' target='_blank'>${env.url}index.php/admin/</a><br/>Username: admin<br/>Password: ${user.appPassword}"
        },
        "type": "php",
        "homepage": "http://www.magentocommerce.com/",
        "version": "1.7.0.2"
    }
}


Больше примеров описано в JPS документации.

Виджет установки


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

widget

Используя инструкцию вы без проблем создадите виджет для установки вашего приложения в один клик. В качестве примера мы использовали виджет с запакованным 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.{hoster_domain}">
</div>


Здесь используются следующие атрибуты:
  • class – значение данного параметра всегда должно быть “je-app”;
  • 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 – текст при некорректном введении имейла. Текст по умолчанию: “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 - необязательный параметр для обозначения хостинг провайдера, на площадке которого будет установлено приложение. Если значение параметра не указано, провайдер будет выбран автоматически на основе GeoIP (наиболее близко географически расположенный).

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

http://reg.{hoster_domain}/installapp?email={user_email}&manifest={link_to_your_manifest}


Использование клиентами


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

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

enter email

2. После этого на указанный электронный адрес будет отправлена ссылка подтверждения, нажав которую вы будете перенаправлены на панель управления Jelastic.

confirmation email

Если указанный имейл уже зарегистрирован в Jelastic, то пользователь автоматически войдет в панель управления под своим аккаунтом.

Если такого Jelastic аккаунта не существует, пользователь будет автоматически зарегистрирован и получит письмо с паролем и адресом электронной почты.

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

confirm installation

4. После этого начнется процесс установки. Подождите, пока Создание, Разворачивание и Настройка завершатся.

installation

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

magento credentials

5. Нажмите кнопку Открыть в браузере. Установленное приложение откроется через мгновение.
Для получения административного доступа к приложению, перейдите по ссылке к его панели управления.

magento admin panel

Как видите, приложение запущено и работает.

Итоги


Таким образом, в этой статье мы показали как легко запаковать любое приложение и предоставить пользователям простой способ разворачивания в один клик, используя виджет установки. Попробуйте, ведь чем больше виджетов, тем больше пользователей. Как результат - все в выигрыше!

Более детальную информацию вы можете найти у нас в документации:
docs.jelastic.com/jps
docs.jelastic.com/application-installation-widget
docs.jelastic.com/app-packaging
docs.jelastic.com/application-manifest
docs.jelastic.com/application-manifest-example
docs.jelastic.com/packaging-standard-placeholders
Автор: @jelastic
Jelastic
рейтинг 34,21
Jelastic DevOps PaaS для хостеров и ISV
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Спецпроект

Комментарии (6)

  • 0
    Ребзя, вы бы хоть поддержку кириллических доменов прикрутили, а то даже с конвертацией — не бельмес…
    • 0
      Поддержка кириллических доменов у нас есть в планах и в будущем будет добавлена.
      Но не совсем понимаю связь этих доменов к данной статье. Уточните, пожалуйста, с какой проблемой вы столкнулись.
      Возможно вы имели в виду проблему локализации? У каждого хостера свой набор языков, которые можно переключить.
      • 0
        Связь установки приложений и доменов… ну хз. Прямой вроде как нет, но она как бы есть…
        А имел ввиду я именно то, что написал — поддержку кириллических доменов. Для меня — здесь прямая связь — на кой мне ваш хостинг, если домен привязать не могу.
        Пробовал просто захоститься у вас (через reg.ru) но из-за доменов продолжать попытки не стал. на отечественном языке подробной документации не нашлось по интересующему вопросу: апач+проксирующий nginx+mysql (на мой взгляд стандартная связка) + несколько доменов в 1 окружении (с несильно нагруженными сайтами) — вот и вся проблема…
        • 0
          С кириллическими доменами, к сожалению, на данный момент мы вам помочь не сможем. Но вот по другим вопросам, если не находите ответов в документацие, то можете обратиться в сапорт хостера и они вам подскажут решение.
          А в данной статье мы по большей части обращаемся к разработчикам приложений, которые могут запаковать свои приложения и предложить пользователям уже готовый продукт (какой бы он ни был сложный). В данном случае хостить будут конечные пользователи, а не разработчики — потому не сразу уловили связь вашей проблемы с темой поста, спасибо за детали. Надеемся, что скоро сможем порадовать вас поддержкой кириллических доменов.
  • 0
     "jpsType": "install" 
    


    А какие еще есть варианты?
    • 0
      Возможно использование значения «update» для установки приложения в уже существующем окружении, но на данный момент этот вариант на стадии бета тестирования.

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

Самое читаемое Разное