Статьи

Играть в фреймворк на облаке стало проще: модуль Openshift

Всего пару лет назад поиск доступного хостингового решения для веб-приложения на Java был сложной задачей, а поиск бесплатного был невыполнимой задачей. Не говоря уже о том, что даже думать о таких вещах, как автоматическое масштабирование, развертывание одной командой, непрерывная интеграция и тому подобное, было простой научной фантастикой.
В прошлом году произошла облачная революция, и в настоящее время существует огромное количество альтернатив на выбор. Казалось, что каждый ИТ-игрок среднего и большого размера должен был предложить собственное облачное предложение Platform as Service (PaaS).

В этом случае предложение от Red Hat не могло остаться незамеченным. Инженеры Red Hat действительно много знают об управлении серверами, и, к счастью для нас, они также много знают о веб-приложениях Java. К счастью, они приняли вызов, и то, что они могут предложить, не разочаровало бы нас.

Разве эта панда не милашка?

Итак, вот идет Openshift . Openshift — это бесплатная, автоматически масштабируемая облачная платформа Red-Shift для приложений Java, Perl, PHP, Python и Ruby. Это быстро развивающаяся платформа, которой удалось сформировать активное и полезное сообщество, поддерживающее ее. Более того, это бесплатное предложение во многом превосходит все, что может предложить компетенция. Просто введя свой адрес электронной почты и выбрав пароль, вы получите пять пространств имен applicationacions, каждое из которых имеет git-репозиторий и половину ГБ данных (код + база данных) для использования по своему усмотрению. Добавьте к этому поддержку mysql (с phpmyadmin), PostgreSQL , MongoDB 2.0 (с MongoRock) и даже полностью функциональный экземпляр Jenkins , обеспечивающий среду непрерывной интеграции.

Развертывание Java-приложения в openshift действительно просто, просто git add , git commit , git push … и все. Но мы, разработчики игр, избалованные нашей любимой платформой, как и мы, предпочитаем просто напечатать что-то вроде play rhc:deploy и забыть об этом.
Вот что такое модуль openshift для игровых фреймворков.

Рассказ

Таким образом, у вас есть все, что нужно для развертывания приложения Play Framework в openshift. Это означает, что вы установили JDK 1.6 или 1.5 , Play Framework , Ruby , Ruby Gems, инструменты клиента OpenShift , и вы зарегистрировались в openshift, а также создали домен.
В этом случае вам просто нужно:

1
$ play install openshift

а потом

1
2
3
$ play new <my app> --with openshift
$ cd <my app>
$ play rhc:deploy -o

… вот и все.

Ваше приложение готово … и работает на Openshift!

Каждый раз, когда вы хотите развернуть свои изменения в openshift, просто еще раз play rhc:deploy -o . Параметры -o просто указывают модулю открывать ваше приложение в веб-браузере сразу после развертывания.

С нуля до облака

В качестве напоминания для себя, вот шаги, необходимые для перехода от простой установки Linux к развертыванию на openfhit:

1. Установите Java JDK 1.6
в дистрибутивах Linux на основе Debian (таких как Ubuntu, Mint и другие)

1
$ sudo apt-get install openjdk-6-jdk

на основанных на rmp дистрибутивах Linux (таких как fedora, red hat, centos и другие)

1
$ sudo yum install java-1.6.0-openjdk-devel.i686


2. Установите игровые рамки
Вот мой быстрый и грязный список команд для установки игрового фреймворка.

1
2
3
4
5
6
7
8
9
$ cd ~
$ mkdir dev
$ cd dev
$ wget http://download.playframework.org/releases/play-1.2.4.zip
$ unzip play-1.2.4.zip
 
$ echo "export PATH=$PATH:~/dev/play-1.2.4" >> ~/.profile
 
$ source ~/.profile

И затем проверьте это с:

01
02
03
04
05
06
07
08
09
10
$ play version
~        _            _
~  _ __ | | __ _ _  _| |
~ | '_ \| |/ _' | || |_|
~ |  __/|_|\____|\__ (_)
~ |_|            |__/  
~
~ play! 1.2.4, http://www.playframework.org
~
1.2.4

Примечание. Если вы работаете на fedora, вам может потребоваться выполнить команду sudo yum remove sox , поскольку пакет sox поставляется с собственной командой play, которая конфликтует с инфраструктурой play.

3. Зарегистрируйтесь на openshift
Перейдите на страницу https://openshift.redhat.com/app/user/new/express, введите свой адрес электронной почты и выберите пароль.

4. Установите, мерзавцы и рубины
В дистрибутиве Linux на основе Debian:

1
$ sudo apt-get install git ruby rubygems

Rpm версия:

1
$ sudo yum install git ruby rubygems


5. Установите клиентские инструменты openshift
После того, как вы установили рубиновые самоцветы, установить инструменты Red Hat Cloud так же просто, как:

1
$ sudo gem install rhc

6. Создайте домен
Пространство имен вашего домена используется для идентификации ваших приложений и как часть URL-адресов ваших приложений. Это уникально для вас во всех openshift. Например, допустим, у вас есть классное пространство имен, когда вы создаете новое приложение с именем wicked , вы найдете его по адресу http://wicked-awesome.rhcloud.com . Когда вы создадите новое приложение под названием freakin , оно будет на http://freakin-awesome.rhcloud.com.


Перейдите в панель управления openshift по адресу https://openshift.redhat.com/app/control_panel и нажмите « Изменить» в разделе «NAMESPACE». Затем введите что-то вроде playdemo (ну, этот уже занят ) и нажмите «Сохранить».

7. Создайте и зарегистрируйте ваши ключи SSH
Теперь вам нужно создать пару ключей, приватный и публичный …, чтобы openshift мог проверить, что вы действительно пытаетесь что-то перенести в удаленный репозиторий git. Просто следуйте инструкциям на http://help.github.com/linux-set-up-git/ , вам просто нужно открыть терминал, а затем

1
$ cd ~/.ssh

Если вы получили ошибку « Нет такого файла или каталога» , не беспокойтесь, это означает, что в вашей системе не было ключа SSH. С другой стороны, если у вас уже есть ключ SSH, было бы неплохо сделать резервную копию.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
$ ssh-keygen -t rsa -C "<my email>"
Generating public/private rsa key pair.
Enter file in which to save the key (/home/sas/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/sas/.ssh/id_rsa.
Your public key has been saved in /home/sas/.ssh/id_rsa.pub.
The key fingerprint is:
22:7b:cd:f3:98:4f:92:de:80:1d:ad:d6:ea:73:20:c2 <my email>
The key's randomart image is:
+--[ RSA 2048]----+
|                 |
|                 |
|                 |
|         .       |
|   .. . S .      |
|    Eo.*.=       |
|    [email protected]      |
|     . o.@.      |
|       .*++      |
+-----------------+

И затем, вы можете настроить свое имя пользователя и адрес электронной почты, как это:

1
2
$ git config --global user.name "<my name>"
$ git config --global user.email "<my email>"

Теперь вы должны зарегистрировать этот ключ в openshift. Просто скопируйте содержимое id_rsa.pub (будьте осторожны, не копируйте файл id_rsa , это ваш личный ключ, и вы должны сохранить его при себе) и добавьте его как новый SSH KEY с вашей панели управления .

В Fedora раздражает необходимость вводить вашу фразу-пароль при каждой операции git. Чтобы избежать этого, просто запустите ssh-add и введите свою фразу-пароль в последний раз.

Кроме того, вы также можете использовать следующую команду

1
$ rhc-create-domain -l <your email> -p <your password> -n <pick a domain>

и позвольте openshift создать пару закрытых и открытых ключей как libra_id_rsa и libra_id_rsa.pub в вашем каталоге .ssh /. У меня была пара конфликтов между моими собственными ключами SSH и ключами libra, созданными openshift, поэтому я предпочитаю обрабатывать ключи ssh самостоятельно.

Примечание. Вы не сможете что-либо отправить в свой репозиторий git, если у вас нет действующего открытого ключа, зарегистрированного в openshift. Учтите, что вы можете добавить столько ключей, сколько вам нужно.

Перейдите в панель управления по адресу https://openshift.redhat.com/app/control_panel, чтобы убедиться, что все правильно.

Собираюсь в облако

И теперь да, мы готовы развернуть наше приложение Play Framework в облаке.

1
2
3
$ play install openshift
$ play new <my app> --with openshift
$ cd <my app>

Теперь для каждой команды вам нужно будет ввести, как минимум, ваше имя пользователя и пароль. Вы можете избавить себя от этой проблемы, добавив следующие ключи в файл conf / application.conf :

1
2
3
# Openshift module configuration
openshift.rhlogin=<my login>
openshift.password=<my password>

После этого вы должны убедиться, что вы установили все необходимые компоненты. Просто беги:

1
$ play rhc:chk

Он проверит наличие клиентских инструментов java 1.6 или 1.5 install, git, ruby, rubygem и openshift 0.84.15 или выше. Он также проверит, что приложение существует в openshift, в противном случае он попросит вас его создать, и, наконец, он проверит наличие локального git-репозитория, указывающего на удаленный репозиторий в openshift.
Затем вы можете развернуть свое приложение с помощью:

1
$ play rhc:deploy -o

В первый раз развертывание развертывания займет довольно много времени, поскольку модуль должен загрузить все библиотеки инфраструктуры воспроизведения. После этого начального развертывания последующие коммиты будут намного быстрее, потому что git достаточно умен, чтобы отправлять только измененные файлы. Более того, модуль запросит у вас разрешение на создание приложения на openshift, а также на создание локального репо. Если вы просто хотите, чтобы скрипт создавал все без разрешения, просто добавьте в --bypass параметр --bypass или -b .
Ваше приложение теперь будет доступно по адресу: http: // <мое приложение> — <мой домен> .rhcloud.com .
Если вы уже развернули свое приложение в openshift и хотите просто извлечь его из удаленного репозитория git, просто введите:

1
$ play rhc:fetch

Учтите, что это разрушительная операция. Он полностью удалит ваше локальное приложение и заменит его содержимым вашего удаленного хранилища.
Чтобы просмотреть журналы вашего сервера, введите:

1
$ play rhc:logs
Взгляните на файлы журналов openshift с «play rhc: logs»

Чтобы отобразить информацию о ваших приложениях при запуске openshift:

1
$ play rhc:info

Это просто сокращение для команды rhc-domain-info .
Вы можете открыть свое приложение в openshift в любое время, выдав:

1
$ play rhc:open

Это также сокращение для открытия веб-браузера по адресу http: // <мое приложение> — <мой домен> .rhcloud.com .
Наконец, если вы хотите удалить свое приложение из openshift, просто запустите:

1
$ play rhc:destroy

Установка модуля openshift

Есть два способа установить модуль openshift. Один из них — просто play install openshift , который установит модуль непосредственно с вашей платформой, в <play install folder> /modules/openshift-0.1.0 . Таким образом, он будет доступен для каждого приложения, которое вы создаете

1
$ play new my-app --with openshift

Другой способ — вручную настроить его как зависимость. Просто добавьте следующую строку в файл conf / dependencies.yml :

1
2
3
4
# Application dependencies
require:
    - play
    - play -> openshift 0.1.0

А потом выпускать

1
play deps

Примечание: play хранит кеш выбранных зависимостей в ~ / .ivy2 / cache . Если у вас возникли проблемы с зависимостями, просто почистите этот словарь и попробуйте снова.

Наряду с модулем имеется пример приложения в <папке модуля openshift> / samples_and_tests / openshift-demo . Просто зайдите в эту папку и выполните play deps а затем play run чтобы увидеть, как она работает локально. Он просто отображает конфигурацию воспроизведения и переменные среды хоста, чтобы вы могли проверить, запущено ли ваше приложение в openshift.

Демо-приложение модуля Openshift

Затем запустите play rhc:chk чтобы убедиться, что вы установили все необходимые rhc:chk . После этого rhc:deploy -o чтобы создать удаленное приложение в openshift, создать локальное git-репо, упаковать свое приложение в файл war, зафиксировать новое приложение и развернуть в openshift. Благодаря параметру -o модуль откроет ваше приложение openshift в веб-браузере после развертывания.

Получать помощь

Вы можете взглянуть на выдачу команд модуля:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
$ play help
~        _            _
~  _ __ | | __ _ _  _| |
~ | '_ \| |/ _' | || |_|
~ |  __/|_|\____|\__ (_)
~ |_|            |__/  
~
~ play! 1.2.4, http://www.playframework.org
~
 
[...]
~
~ Modules commands:
~ ~~~~~~~~~~~~~~~~~
~ rhc:chk             Check openshift prerequisites, application and git repo.
~ rhc:deploy          Deploys application on openshift.
~ rhc:destroy         Destroys application on openshift.
~ rhc:fetch           Fetches application from remote openshift repository.
~ rhc:info            Displays information about user and configured applications.
~ rhc:logs            Show the logs of the application on openshift.
~ rhc:open            Opens the application deployed on openshift in web browser.
~
~ Also refer to documentation at http://www.playframework.org/documentation
~

Затем вы можете получить дополнительную справку о параметрах с параметром -h или --help :

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
$ play rhc:chk -h
 
~        _            _
~  _ __ | | __ _ _  _| |
~ | '_ \| |/ _' | || |_|
~ |  __/|_|\____|\__ (_)
~ |_|            |__/  
~
~ play! 1.2.4, http://www.playframework.org
~
Usage: play [options]
 
Options:
  -h, --help            show this help message and exit
  -a APP, --app=APP     Application name  (alphanumeric) (required)
  -s SUBDOMAIN, --subdomain=SUBDOMAIN
                        Application subdomain, root by default  (alphanumeric)
                        (optional)
  -l RHLOGIN, --rhlogin=RHLOGIN
                        Red Hat login (RHN or OpenShift login with OpenShift
                        Express access)
  -p PASSWORD, --password=PASSWORD
                        RHLogin password  (optional, will prompt)
  -d, --debug           Print Debug info
  -m MESSAGE, --message=MESSAGE
                        Commit message
  --timeout=TIMEOUT     Timeout, in seconds, for connection
  -o, --open            Open site after deploying
  -b, --bypass          Bypass warnings

Вы также можете указать эти параметры в файле conf / application.conf с помощью следующих ключей:

1
2
3
4
5
6
openshift.rhlogin: Red Hat login (RHN or OpenShift login with OpenShift Express access)
openshift.password: RHLogin password  (optional, will prompt)
openshift.application.name: Application name  (alphanumeric) (required)
openshift.application.subdomain: Application subdomain, root by default  (alphanumeric)
openshift.debug: Print Debug info
openshift.timeout: Timeout, in seconds, for connection

Вы можете увидеть все версии модуля на странице модуля openshift по адресу http://www.playframework.org/modules/openshift .
Вы можете проверить документацию по адресу http://www.playframework.org/modules/openshift-0.1.0/home или запустить локально ваше приложение в режиме разработки с помощью play run , а затем перейти по адресу http: // localhost: 9000 / @ документация / модули / openshift / home .

Просмотр документации модуля локально

Вы можете задать вопросы в списке обсуждений Play Framework по адресу https://groups.google.com/group/play-framework , или вы можете попробовать с его двоюродным братом испанским по адресу https://groups.google.com/group/play- латам

Известные вопросы

К сожалению, сейчас модуль openshift не работает с окнами. Это потому, что модуль выдает много команд git, а вы не можете сделать это на окнах из стандартной оболочки, для этого требуется специальное приглашение «git bash».

Дальнейшие шаги

В следующей версии я буду изучать возможность создания версии модуля только для Java с использованием Java API-интерфейса openshift . Таким образом, нам не понадобится ни git, ни ruby, ни установка rhc tools. Моревоер, мы должны иметь возможность использовать все это из окон.

Ресурсы

Справка: игровая среда в облаке стала проще: модуль Openshift от нашего партнера JCG   блог.