Поднимаем собственный Maven репозиторий Nexus на OpenShift

в 11:27, , рубрики: java, maven, nexus, openshift, tomcat, Облачные вычисления, метки: , , ,

image

Последнее время на Хабре стали появляться статьи про OpenShift, что привлекло моё внимание, ведь платформа действительно интересна и грех в ней не поковыряться, да и так совпало, что я начал задумываться найти альтернативу моему уютному Dropbox-репозиторию Maven в связи с отменой возможности иметь прямые ссылки и папки Public в целом ( пруф: habrahabr.ru/post/145864/ ).

Итак, сегодня мы с Вами будем устанавливать Maven-репозиторий под управлением Nexus под собственные нужды, а Ваш покорный слуга поделится костылями знаниями, приобретёнными будучи первопроходцем в этом деле.

Вступление

Первым делом нам необходимо зарегистрироваться и создать приложение, этот процесс хорошо описан в статье habrahabr.ru/post/145203/, я лишь проведу краткое изложение:

  1. Регистрируемся по ссылке, если Вы этого не сделали раньше;
  2. Создаём DYI приложение (для примера я создал приложение habr с namespace trylogic)
  3. Дальше в настройках приложения добавляем свой ssh-ключ.
  4. Выполняем 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-ом работает посредственно.

Для тех, кто не владеет английским (или просто кому лень :)) попытаюсь опять же в кратце:

  1. Помните я говорил про git-ссылку? Используем её, чтобы зайти по ssh на наш сервер (Для пользователей Windows советую воспользоваться Putty):
    ssh a3cf48bc92174721a2c49fd823243b3a@habr-trylogic.rhcloud.com
    
  2. Отключим стандартную Ruby-заглушку:
    sh ~/habr/repo/.openshift/action_hooks/stop
    # Где habr - имя Вашего инстанса. 
    
  3. Последовательно выполняем (следим за именем приложения, у меня в примере используется 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
    
  4. Если сейчас правильная фаза луны, мы, выполнив последнюю команду, получим IP-адресс нашего сервера. Сохраните его куда-нибудь, он нам сейчас пригодится.
  5. Буду благодарен в комментариях sed-у, который сам заменит что надо, а я покажу, как поправить файлик server.xml вручную. На сервере стоит только vim, поэтому любителям nano прийдётся потерпеть:
    $ vim apache-tomcat-7.0.27/conf/server.xml
    
  6. Меняем 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">
      

  7. У 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/

  8. В папке с недавно выкачанным Вами 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
  9. Не забываем закомитить и отослать ( 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, приступим:

  1. Открываем наш Tomcat Manager (см. Выше)
  2. Скачиваем war-дистрибьютив Nexus-а: www.sonatype.org/downloads/nexus-2.0.5.war
  3. Пока он качается, кликаем Undeploy приложения, у которого Path указан как /
  4. Дождавшись скачивания, переименовываем скачанный файл nexus-2.0.5.war в ROOT.war
  5. указываем его в менеджере через Select WAR file to upload и нажимаем deploy
  6. По окончанию мы должны увидеть
    OK - Deployed application at context path /
    
  7. Опять заходим на сервер по 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
    
  8. Сохраняем, гордо идём в Tomcat Manager, жамкаем Start на нешем Nexus Application. Кошак должен отрепортить, мол, всё отлично запустилось и наш Nexus доступен по http://YOUR_APP_LINK/. Если этого не произошло — пишите в комментариях, помогу разобраться.

Заключение

Таким образом, мы научились корректно запускать наши приложения в контейнере Tomcat на примере Nexus. Какие у меня впечатления от OpenShift, скажите Вы? Исключительно положительные! Машинки очень отзывчивые, есть доступ по ssh, есть возможность самому устанавливать туда что душе угодно (лишь бы угодники души корректно работали с окружением ;)), 1Гб вполне достаточно для обыденных нужд программиста, плюс канал у них, судя по всему, около 10мбит на инстанс, поэтому кидался файлами с сервером довольно-таки быстро.

Спасибо за внимание!
Админь!

Автор: bsideup


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js