Последнее время на Хабре стали появляться статьи про OpenShift, что привлекло моё внимание, ведь платформа действительно интересна и грех в ней не поковыряться, да и так совпало, что я начал задумываться найти альтернативу моему уютному Dropbox-репозиторию Maven в связи с отменой возможности иметь прямые ссылки и папки Public в целом ( пруф: habrahabr.ru/post/145864/ ).
Итак, сегодня мы с Вами будем устанавливать Maven-репозиторий под управлением Nexus под собственные нужды, а Ваш покорный слуга поделится костылями знаниями, приобретёнными будучи первопроходцем в этом деле.
Вступление
Первым делом нам необходимо зарегистрироваться и создать приложение, этот процесс хорошо описан в статье habrahabr.ru/post/145203/, я лишь проведу краткое изложение:
- Регистрируемся по ссылке, если Вы этого не сделали раньше;
- Создаём DYI приложение (для примера я создал приложение habr с namespace trylogic)
- Дальше в настройках приложения добавляем свой ssh-ключ.
- Выполняем git clone, как написано на странице. К примеру у меня:
$ git clone ssh://a3cf48bc92174721a2c49fd823243b3a@habr-trylogic.rhcloud.com/~/git/habr.git/
Обратите внимание на адрес, указаный в ссылке для клонирования ( что-то-похожее-на-хеш@app_name-namespace.rhcloud.com ), он нам пригодится для дальнейшего доступа к приложению по ssh.
Tomcat
Почему я выбрал Tomcat, спросите Вы, а не стал пользоваться уже настроенным за нас командой OpenShift контейнером JBoss? Да потому что Nexus в нём не работает:)
Не смотря на наличие статьи на Хабре, описывающей процесс установки Tomcat, я решил воспользоваться статьёй на сайте OpenShift, там и разжевали лучше, и есть шаги по установке IP и портов для тех, кто с Tomcat-ом работает посредственно.
Для тех, кто не владеет английским (или просто кому лень :)) попытаюсь опять же в кратце:
- Помните я говорил про git-ссылку? Используем её, чтобы зайти по ssh на наш сервер (Для пользователей Windows советую воспользоваться Putty):
ssh a3cf48bc92174721a2c49fd823243b3a@habr-trylogic.rhcloud.com
- Отключим стандартную Ruby-заглушку:
sh ~/habr/repo/.openshift/action_hooks/stop # Где habr - имя Вашего инстанса.
- Последовательно выполняем (следим за именем приложения, у меня в примере используется habr):
cd ~/habr/data wget http://www.bizdirusa.com/mirrors/apache/tomcat/tomcat-7/v7.0.27/bin/apache-tomcat-7.0.27.tar.gz tar zxvf apache-tomcat-7.0.27.tar.gz rm apache-tomcat-7.0.27.tar.gz env |grep INTERNAL_IP
- Если сейчас правильная фаза луны, мы, выполнив последнюю команду, получим IP-адресс нашего сервера. Сохраните его куда-нибудь, он нам сейчас пригодится.
- Буду благодарен в комментариях sed-у, который сам заменит что надо, а я покажу, как поправить файлик server.xml вручную. На сервере стоит только vim, поэтому любителям nano прийдётся потерпеть:
$ vim apache-tomcat-7.0.27/conf/server.xml
- Меняем IP и порты:
-
<Server port="8005" shutdown="SHUTDOWN">
на
<Server port="15005" shutdown="SHUTDOWN">
-
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
на
<Connector port="15009" protocol="AJP/1.3" redirectPort="8443" />
-
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
на
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" address="IP_АДРЕС_ПОЛУЧЕННЫЙ_ВЫШЕ” redirectPort="15443" />
-
<Engine name="Catalina" defaultHost="localhost">
на
<Engine name="Catalina" defaultHost="IP_АДРЕС_ПОЛУЧЕННЫЙ_ВЫШЕ">
-
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
на
<!-- Не забудьте поменять здесь habr-trylogic.rhcloud.com на ВАШ адрес --> <Host name="habr-trylogic.rhcloud.com" appBase="webapps" unpackWARs="true" autoDeploy="true">
-
- У Tomcat-а из коробки идёт свой менеджер, грех будет им не воспользоваться. Добавим в habr/data/apache-tomcat-7.0.27/conf/tomcat-users.xml
<role rolename="manager-gui"/> <user username="admin" password="mySupaPass" roles="manager-gui"/>
После чего менеджер будет доступен по ссылке http://YOUR_APP_LINK/manager/
- В папке с недавно выкачанным Вами git-репозиторием переходим в папку .openshift/action_hooks. Отредактируем файл start, чтобы он выглядел так:
# не забываем заменить habr на ваше имя приложения habr/data/apache-tomcat-7.0.27/bin/startup.sh
А так же файл stop:
repo/data/apache-tomcat-7.0.27/bin/shutdown.sh
Это позволит Вам запускать и останавливать сервер через
rhc app start -a habr
- Не забываем закомитить и отослать ( push ) сделанные Вами изменения
Не так уж и кратко получилось, конечно, но лучше так, чем никак:)
Nexus
Наконец-то мы подошли к герою нашего рассказа — продукту компании Sonatype по имени Nexus.
Казалось бы, что может быть сложного в простой установке приложения в JavaEE контейнер, подумал я и, не долго думая, задеплоил Nexus в свежий Tomcat. Естественно ничего не заработало $) Чтение логов показало, что Nexus пытается создать папку ${user.home}/sonatype-work, но у OpenShift другое мнение на этот счёт, и прав писать в USER_HOME она не даёт, а для записи у нас доступны только 3 папки: data, repo and tmp. NE GUSTO, подумал я, могли бы хотя бы Java Property «user.home» подменять на какую-нить data, но ведь платформа совсем свежая, авось прикрутят.
Держа в уме полученную информацию, которая, между прочим, полезна не только для Nexus, но и для других Java-приложений, которые используют USER_HOME, приступим:
- Открываем наш Tomcat Manager (см. Выше)
- Скачиваем war-дистрибьютив Nexus-а: www.sonatype.org/downloads/nexus-2.0.5.war
- Пока он качается, кликаем Undeploy приложения, у которого Path указан как /
- Дождавшись скачивания, переименовываем скачанный файл nexus-2.0.5.war в ROOT.war
- указываем его в менеджере через Select WAR file to upload и нажимаем deploy
- По окончанию мы должны увидеть
OK - Deployed application at context path /
- Опять заходим на сервер по SSH, где нам потребуется отредактировать файл plexus.properties, выполнив команду
# сами знаете, что там про замену habr на ваше имя приложения ;) vim habr/data/apache-tomcat-7.0.27/webapps/ROOT/WEB-INF/plexus.properties
где надо поправить параметр nexus-work
nexus-work=${user.home}/habr/data/sonatype-work/nexus
- Сохраняем, гордо идём в Tomcat Manager, жамкаем Start на нешем Nexus Application. Кошак должен отрепортить, мол, всё отлично запустилось и наш Nexus доступен по http://YOUR_APP_LINK/. Если этого не произошло — пишите в комментариях, помогу разобраться.
Заключение
Таким образом, мы научились корректно запускать наши приложения в контейнере Tomcat на примере Nexus. Какие у меня впечатления от OpenShift, скажите Вы? Исключительно положительные! Машинки очень отзывчивые, есть доступ по ssh, есть возможность самому устанавливать туда что душе угодно (лишь бы угодники души корректно работали с окружением ;)), 1Гб вполне достаточно для обыденных нужд программиста, плюс канал у них, судя по всему, около 10мбит на инстанс, поэтому кидался файлами с сервером довольно-таки быстро.
Спасибо за внимание!
Админь!
Автор: bsideup