![image](https://habrastorage.org/getpro/habr/post_images/037/56d/538/03756d53815dfcc330ce8dd9cce11b47.jpg)
Прочитав статью на Хабре про OpenShift,
мне сразу захотелось подружиться с этой платформой. Все-таки халявный удаленный комп с 512MB оперативки и 1GB места лишним в хозяйстве точно не будет. ;) Тем более, что можно запустить не только предлагаемые самой платформой веб-сервера, но и что-нибудь свое. Выбор пал на Tomcat с небольшим личным проектом.
Далее опишу алгоритм реализации этой идеи:
1. Получаем ssh-доступ
- Создаете аккаунт на OpenShift
- После авторизации вам предлагают выбрать тип приложения (Choose a type of application),
выбираем из списка тип Do-It-Yourself - Задаем Public URL и нажимаем Create Application
- Ура, удаленный компьютер ждет нас! Осталось достучаться до него через ssh. Внизу страницы видим раздел Set your Public Key — надо задать публичный ключ. Я воспользовался генерацией публичного ключа через PuTTY. Отправив серверу публичный ключ, нам станет доступным ssh адрес (что-нибудь в духе: ssh://много-цифр@ваше-приложение.rhcloud.com)
- Теперь можно разворачивать свое приложение!
2. Что дают?
В начале, скажу пару слов о полученной нами удаленной машине:
- Установлена java 1.6.0_22
- Для внешнего мира можно использовать порт 8080, который, по умолчанию, занят ruby-заглушкой
- Для внутренних нужд можно использовать лишь порты 15000 — 35530
- Для дебага сервера можно отдельно включить порт 8787 (об этом ниже)
3. Запускаем Tomcat
Основные нюансы копирования сервера на удаленную машину описаны в этой замечательной статье. Поэтому будем считать, что мы уже скопировали Tomcat в папку app-root/data/tomcat, настроили ip и все порты в файле app-root/data/tomcat/conf/server.xml (ip получили из $OPENSHIFT_INTERNAL_IP, а значения портов задали выше 15000, кроме порта 8080) и теперь готовы запустить свой сервер, но нам мешает уже запущенная ruby-заглушка на порте 8080. И плюс у нас пока нет возможности дебага сервера через порт 8787. Разрешим эти трудности:
- Настала пора установить у себя OpenShift client tools. К сожалению, без нее не получится решить все озвученные проблемы.
- После установки client tools и запуска в консоли, вам предложат сгенерировать ssh-ключ и сохранить его на сервер. Обязательно соглашайтесь! Т.к. этим ключом будет пользоваться Git, а про ваш ключ от PuTTY никто кроме PuTTY ничего не знает :)
- Итак, у нас есть client tools и Git, теперь мы можем выключить ruby-заглушку. В начале, посмотрите статью, объясняющую принцип запуска и остановки приложений через Git-репозиторий. В двух словах смысл такой: когда вы делаете push на удаленный компьютер, то автоматически вызываются sh-скрипты из папки .openshift/action_hooks (это путь относительно репозитория, а вот адрес на удаленной машине: app-root/runtime/repo/.openshift/action_hooks). Эти скрипты предназначены для остановки текущего веб-сервера, сборки и запуска его заново. По умолчанию, в этих sh-файлах записана ruby-заглушка. Идея в том, чтобы убрать из скрипта .openshift/action_hooks/start запуск этой заглушки и отправить изменения в удаленный репозиторий. Тогда заглушку остановит скрипт .openshift/action_hooks/stop и порт 8080 будет свободен.
- Собственно делаем все то, что было сказано выше: скачиваем репозиторий на свою машину, редактируем файл .openshift/action_hooks/start, убирая из него запуск ruby-заглушки, и отправляем изменения на сервер. В результате, у нас освобождается порт 8080 и мы можем через PuTTY запускать свой Tomcat. Нет, конечно же можно прописать запуск и остановку томката в файлах .openshift/action_hooks, но мне было это не интересно — ssh-консоль как-то ближе ;)
- Практически все готово. Tomcat запускается и доступен внешнему миру. Осталось только решить проблему с дебагом. Решение лежит в этой статье. В двух словах, надо создать новый файл .openshift/markers/enable_jpda и залить его на удаленный репозиторий. После этого порт 8787 будет открыт для нашего томката. Но стоп! Ведь наружу торчит лишь порт 8080, как же достучаться до 8787?
- Чтобы получить доступ к портам, отличным от 8080, надо воспользоваться client tools: набираем у себя в консоли rhc-port-forward –a applicationName и теперь на локальной машине доступны все порты удаленной машины (по адресу в духе 127.6.242.5)
4. Итоги
Алгоритм запуска Tomcat на OpenShift получился довольно муторным, но что не сделаешь ради халявы. Приятной работы!