Пользователь
0,0
рейтинг
4 июня 2012 в 20:46

Разработка → OpenShift в качестве Java – хостинга из песочницы

image
Не секрет, что уже около полугода RedHat продвигает собственный облачный продукт, причем не привычное хранилище файлов, а сервис для облачных вычислений, с бесплатной версией Developer Edition. В качестве одной из поддерживаемых платформ указывается Java, что для многих может оказаться весьма кстати на фоне достаточно малого числа бесплатных Java – хостингов. Причем, если брать java, то тут предлагается одна из современнейших платформ, а именно Jboss AS 7.1, что означает совместимость с большинством технологий и проектов, разрабатываемых под эгидой Jboss. Широкие возможности сервиса сочетаются с простотой, при этом разработчики настолько уверены в качестве и доступности сервиса, что не постеснялись даже написать про него «easy-peasy».

Недавно пришлось попробовать OpenShift в работе, как Java – хостинг для небольшого частного проекта. Впечатления, если кратко – да, у разработчиков RedHat всё получилось, все подробности далее…

Для начала – немного фактов из документации разработчика.


OpenShift – платформа-сервис, поддерживающая несколько языков/фреймворков, список которых, очевидно будет расширяться. На данный момент можно разрабатывать приложения на таких языках, как java, php, ruby, python, perl. Пользователь на 1 учетную запись может создать до 3 приложений, под которые выделяются виртуальных машины (gear) со следующими характеристиками:
512 MB RAM
100 MB swap
1 GB disk space
Какова производительность этой машины, не сообщается, но вот для сравнения: старт JBoss AS 7.1.1 с небольшим приложением на моем ноутбуке с процессором core-i5 2450M (2 ядра, 2,5 ггц) занимает 31 секунду, а то же приложение на OpenShift стартует за 29 секунд.
Характеристики машин можно слегка улучшать за счет уменьшения их количества.
1 GB дискового пространства используется на:
• git репозиторий
• Скомпилированное приложение
• Базу данных
• Логи
• Файлы с данными
Существует возможность сконфигурировать scalable-приложение, в котором сервер БД будет занимать отдельную машину, то есть он получит «чистый» гигабайт.
Дополнительное дисковое пространство также можно выпросить, написав по адресу openshift@redhat.com или в IRC (#openshift on freenode).
Приложения/машины могут комплектоваться вспомогательными сервисами (cartridge), такими, как базы данных, системы сборки, мониторинга, cron.

Hello, cloud!


Итак, попробуем создать приложение, работающее под управлением JBoss AS 7.1.
Для начала необходимо получить учетную запись OpenShift. Сделать это проще простого: идем по адресу https://openshift.redhat.com/app/account/new, там указываем свой RedHat логин, либо email адрес, придумываем пароль и вводим капчу. После получения подтверждения на электронный адрес вы – обладатель учетной записи OpenShift.
Прежде чем двигаться дальше, следует установить клиент OpenShift и средства разработки.

Клиент и средства разработки


Установка клиента подробно описана в документации по адресу docs.redhat.com/docs/en-US/OpenShift/2.0/html/Getting_Started_Guide/index.html и различается для разных операционных систем. Для Windows это установка Cygwin с рядом пакетов, затем – RubyGems и, наконец, непосредственно клиент rhc. Хитростей тут никаких нет, надо просто воспроизвести те шаги, которые указаны в инструкции.
Что касается средств разработки, то это набор плагинов для Eclipse 3.7 под названием JBoss Tools 3.3.0, инструкции по установке по адресу www.jboss.org/tools/download/installation/update_3_3, адрес загрузки www.jboss.org/tools/download/dev (core plugins). На данный момент нет окончательного релиза, придется ставить версию Beta3. Установка плагинов выполняется обычным способом – либо онлайн, прямо из Eclipse (update site), либо из оффлайн архива. При установке из оффлайн архива связь на самом деле понадобится, поскольку Eclipse все равно что-то закачивает из сети. Ничего не поделаешь – Beta версия.
Перед установкой плагинов обратите внимание на то, что default jre в Eclipse указывает на каталог именно с JDK, а не с JRE, иначе процесс зациклится.
Для работы с java и JBoss AS рекомендую установить весь набор, для других языков достаточно поставить JBoss Cloud Development Tools.
Маленькая хитрость: под 64 разрядной версией Eclipse не всё пока работает (по крайней мере, в Windows), поэтому даже если у вас 64 разрядная ОС, рекомендую поставить 32 разрядный JDK и 32 разрядную версию Eclipse. При этом никто не мешает сами приложения запускать под 64 разрядной версией JDK.
Также рекомендую скачать и установить:
• Maven, не ниже 3 версии (http://maven.apache.org/), установка заключается в распаковке и добавлении каталога bin к переменной path. После установки следует в Eclipse указать путь к настройкам Maven (к файлу conf/settings.xml), настройка Maven -> User settings
• JBoss AS 7.1.1 (http://www.jboss.org/jbossas), установка заключается в распаковке, далее сервер можно подключить к Eclipse для запуска и отладки приложений прямо из среды разработки.

Регистрация домена


Итак, учетная запись создана, средства разработки установлены, что дальше?
Следующим шагом является создание «домена». Домен – это суффикс в названии, или пространство имен (namespace), который будут иметь все ваши приложения:
applicationname-namespace.rhcloud.com.
Название «домена» должно состоять из букв и цифр, придумайте что-то уникальное, еще не занятое другими и не входящее в список забаненных слов. Название домена в будущем можно поменять.

Домен можно регистрировать как в web-интерфейсе OpenShift, так и в консольном клиенте. Я рекомендую второе, так как в этом случае наряду с регистрацией домена будет произведена генерация ssh ключей и других необходимых файлов. Для удобства работы с консолью рекомендую сразу же в файл ~/.openshift/express.conf добавить строчку вида:
default_rhlogin = rhlogin@example.com
где rhlogin@example.com – тот логин или email, который вы использовали при регистрации. Данная строчка позволит избежать необходимости ввода вашего логина в каждой команде.
Итак, для регистрации «домена» вводим команду:
$ rhc domain create -n DomainName

Будет запрошен пароль к вашей учетной записи, после чего будет создан домен и при необходимости – ssh ключи.
Убедитесь, что все нормально:
$ rhc domain show

Также можно открыть web-интерфейс, и убедиться, что домен создан и ключ добавлен (https://openshift.redhat.com/app/account).

Создаем приложение.


Приложения можно создавать как в web-интерфейсе, так и в консольном клиенте или в Eclipse. Я пробовал все 3 способа, самый надежный – из web-интерфейса. Остальные способы также срабатывали, но не 100% (возможно, из-за проблем со связью). Кроме того, в web-интерфейсе не нужно вспоминать типы приложений и картриджей, предоставляется полное меню, из которого выбираем нужные пункты.
Итак, указываем тип приложения (jbossas-7), название, и — приложение создано. При желании, добавляем картриджи (например, mysql-5.1 и phpmyadmin-3.4).
На данный момент уже можно по адресу applicationname-namespace.rhcloud.com посмотреть страничку – заготовку вашего приложения.
При добавлении картриджей с серверами БД сообщаются логин и пароль к базе, приложению их сообщать не надо, поскольку они хранятся в переменных окружения. Благодаря этому, даже если вы сами забыли пароль, его можно будет в последующем подсмотреть, зайдя по ssh на ваш сервер (ssh адрес доступен в web консоли):
$ ssh 177682d.......0eb4fe@app-domain.rhcloud.com
[app-domain.rhcloud.com ~]\> export

Эта команда выведет все переменные, в том числе логин и пароль БД.
На данный момент доступны следующие сервера БД:
• MongoDB NoSQL Database 2.0
• MySQL Database 5.1
• PostgreSQL Database 8.4

Порты к серверам закрыты, но можно по ssh пробросить их на свой компьютер, и далее использовать имеющиеся менеджеры по работе с БД. Кроме того, после установки MongoDB и MySQL появляется возможность установки картриджей RockMongo 1.1 и phpMyAdmin 3.4 соответственно, для управления БД через web.
На данный момент нет возможности использовать БД картриджи, если они не принадлежат данному приложению, то есть пока связь 1:1 (приложение: база данных).

Редактируем и публикуем приложение.


Для того, чтобы вести дальнейшую разработку приложения, импортируем его в Eclipse.
Выбираем File -> Import -> Existing OpenShift Application, вводим логин и пароль, указываем путь к ssh ключу, который был создан при создании домена, указываем импортируемое приложение. Будет предложено указать путь к локальному git-репозиторию, рекомендую указать home-каталог (в этом случае проще будет работать в консольном клиенте).
Приложение будет скопировано в указанный репозиторий (имя подкаталога соответствует названию приложения) и импортировано в Eclipse.
Не всё содержимое каталога будет импортировано в проект, возможно, некоторые файлы в дальнейшем придется открыть и отредактировать отдельно (например, если мы захотим поработать с базами данных или использовать аутентификацию), но в простейшем случае всё что надо уже есть в проекте.
Импортированное приложение–шаблон не пустое. В нем уже есть:
• Все необходимые каталоги
• index.html
• дескрипторы web.xml и faces-config.xml
• pom.xml
Следует помнить, что сборка приложения на сервере ведется в соответствии с Maven – скриптом pom.xml, так что даже если оно собирается в Eclipse, на сервере сборка не пойдет, если нужные зависимости не были указаны в pom.xml.
Допустим, мы хотим использовать richfaces. Для этого необходимо добавить следующие зависимости:
<dependency>
	<groupId>org.richfaces.core</groupId>
	<artifactId>richfaces-core-impl</artifactId>
	<version>4.2.2.Final</version>
	<scope>runtime</scope>
</dependency>
<dependency>
	<groupId>org.richfaces.ui</groupId>
	<artifactId>richfaces-components-ui</artifactId>
	<version>4.2.2.Final</version>
	<scope>runtime</scope>
</dependency>

Если Maven был настроен правильно, то автоматически подкачаются нужные библиотеки, и в index.html можно уже добавлять компоненты richfaces. После добавления компонент и написания кода бина получаем нашу первую jsf-страничку, например такую:
demo-rlab.rhcloud.com

Для того, чтобы опубликовать отредактированное приложение, просто делаем Commit из локального репозитория на сервер. Сервер будет остановлен, нужные файлы переданы в репозиторий, далее компиляция и запуск. Убеждаемся, что старт прошел успешно, для чего выводим лог в консоль по команде
$ rhc app tail -a demo -f demo/logs/server.log -o '-n 5000'
(замените demo на название своего приложения)
Надо сказать, что проект развивается прямо на глазах, и буквально 2 недели назад шаблон стартовал без ошибок, а теперь ошибки есть – из-за новых расширений, добавленных в файл .openshift/config/standalone.xml. Если эти ошибки сильно беспокоят, рекомендую всё лишнее оттуда удалить, но лучше не обращать внимания – скоро наверняка всё заработает.

Резервное копирование


Резервное копирование и восстановление выполняются в консоли:
$ rhc app snapshot save -a YourApplication -f ArchivePath

В результате будет создан архив с полной копией репозитория, всеми настройками, содержимым базы данных. Восстановление бэкапа выполняется командой
$ rhc app snapshot restore


Выводы


Сервис получился действительно удобный. Новичка может затруднить первоначальная установка клиента и средств разработки, но все остальное делается легко. Если сравнивать с другими облачными сервисами, то, создать учетную запись и первое приложение наверно даже легче, чем получить место на dropbox. При этом разработчик получает не только современную платформу для приложений, то также средства коллективной разработки и всевозможные дополнительные сервисы.
Конечно, выделяемые в Developer Edition ресурсы особо не позволят разгуляться, но для создания демок и мини-приложений, это, пожалуй, идеальный сервис.
Многое осталось за кадром, например, особенности работы с базой данных или jaas — аутентификация, но если тема кого-то заинтересовала, готов написать продолжение. Также предлагаю тем, кто уже попробовал OpenShift, поделиться своими впечатлениями.
Ivan Ravin @ivanra
карма
23,0
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

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

Самое читаемое Разработка

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

  • 0
    А что там с оплатой?
    • +2
      Насколько я понял, публичной информации по этому поводу ещё нет.
      Where can I get more information on Pricing ?
      To get more information on the pricing and timing of a paid version of OpenShift please send an email to openshift@redhat.com
      • +1
        Developer Edition абсолютно бесплатно, а если захочется большего, то да, прайса пока нет
        • +1
          Вот ссылка для большей убедительности:
          openshift.redhat.com/community/blogs/openshift-delivers-more-free-memory-and-storage-for-your-applications

          Will the free tier always be free?

          Yes, we are always going to have a free tier with our commercial offering building on top of it. In the future you'll only need to pay when you use a fourth Gear and beyond (and only if you decide to). Spending control will be always in your hands: Auto or manual scaling rules will determine if the app can go beyond the three free Gears, as well as, capping its scaling ceiling.
  • +1
    Спасибо Вам за подробную статью!
    Уже зарегистрировался и сейчас буду пробовать :)
  • +2
    Тоже использую OpenShift, перетащил на него один небольшой проект с Appengine. Интересный момент, хоть проект строго персональный, перестал вписываться в бесплатный лимит Appengine по IO operations. Деплой с помощью Maven прошел отлично, приложение (набор REST-JSON интерфейсов) отзывается быстро.

    Стоит упомянуть, OpenShift поддерживает не только набор популярных стеков (JEE, node.js, Python, Ruby) но и запуск совсем кастомных приложений, написанных, например, на С
  • +2
    если тема кого-то заинтересовала, готов написать продолжение.
    Ссылка на ваш пост в g+ ленте Red Hat (Russian), мне кажется это знак. ;-) Надо писать продолжение! ;-)

  • +1
    никто не пробовал jetty прикрутить?
    • +1
      Пробовали, притом вполне успешно.

      По схожему сценарию прикручивается также tomcat. Работает, но есть одно но: лично мне не удалось установить binding для shutdown-port. В итоге приходится завершать процесс через kill.
  • +2
    спасибо. попробовал — да, действительно без проблем.
    похоже что Do It Yourself (DIY) катридж можно что угодно прикрутить

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