DIY картридж — это экспериментальный картридж, который позволяет тестировать неподдерживаемые языки в OpenShift. Он предоставляет минимальные леса свободной формы, которые оставляют все детали картриджа разработчику приложения . Этот блог рассказывает об использовании приложения Spring Boot / Java 8 / Tomcat 8 с привязанным к нему сервисом PostgreSQL.
Создание нового приложения
необходимое условие
Прежде чем мы сможем приступить к созданию приложения, нам необходимо установить бесплатную учетную запись OpenShift и клиентские инструменты.
Шаг 1: Создайте приложение DIY
Чтобы создать приложение с помощью клиентских инструментов, введите следующую команду:
1
|
rhc app create boot diy- 0.1 |
Эта команда создает загрузку приложения с использованием DIY- картриджа и клонирует репозиторий в каталог загрузки .
Шаг 2: Добавьте картридж PostgreSQL в приложение
Приложение, которое мы создаем, будет использовать базу данных PostgreSQL, поэтому нам нужно добавить соответствующий картридж в приложение:
1
|
rhc cartridge add postgresql- 9.2 --app boot |
После создания картриджа можно проверить его состояние с помощью следующей команды:
1
|
rhc cartridge status postgresql- 9.2 --app boot |
Шаг 3: Удалить исходный код приложения шаблона
OpenShift создает шаблон проекта, который можно свободно удалить:
1
|
git rm -rf .openshift README.md diy misc |
Зафиксируйте изменения:
1
|
git commit -am "Removed template application source code" |
Шаг 4: извлечение исходного кода из GitHub
1
2
|
git remote add upstream https: //github.com/kolorobot/openshift-diy-spring-boot-sample.git git pull -s recursive -X theirs upstream master |
Шаг 5: Нажмите изменения
Базовый шаблон готов к отправке:
1
|
git push |
Первоначальное развертывание (сборка и запуск приложения) займет некоторое время (до нескольких минут). Последующие развертывания выполняются немного быстрее, хотя запуск приложения Spring Boot на небольшом Gear может занять даже более 2 минут:
1
2
|
Tomcat started on port(s): 8080 /http Started Application in 125.511 seconds |
Теперь вы можете перейти по адресу : http://boot-yournamespace.rhcloud.com/manage/health, и вы должны увидеть:
1
2
3
4
5
|
{ "status" : "UP" , "database" : "PostgreSQL" , "hello" : 1 } |
Вы также можете просматривать API. Чтобы узнать, какие у вас есть варианты, перейдите в корень приложения. Вы должны увидеть корень ресурса со ссылками на доступные ресурсы:
1
2
3
4
5
6
7
8
|
{ "_links" : { "person" : { "templated" : true } } } |
Переход на http://boot-yournamespace.rhcloud.com/people должен вернуть всех людей из базы данных.
Шаг 6: Добавление Дженкинса
Использование Jenkins имеет ряд преимуществ. Одним из них является то, что сборка происходит в своем собственном Gear. Для сборки с Jenkins OpenShift требуется сервер и клиентский картридж Jenkins, прикрепленный к приложению. Создание приложения Jenkins:
1
|
rhc app create ci jenkins |
И присоединение клиента Jenkins к приложению:
1
|
rhc cartridge add jenkins-client --app boot |
Теперь вы можете перейти по адресу : http: // ci- .rhcloud.com и войти в систему с предоставленными учетными данными. Когда вы сделаете следующие изменения и нажмете их, сборка будет запущена Jenkins:
1
2
3
4
5
|
remote: Executing Jenkins build. remote: remote: You can track your build at https: //ci-<namespace>.rhcloud.com/job/boot-build remote: remote: Waiting for build to schedule......... |
И когда вы наблюдаете результат сборки, приложение запускается немного быстрее на Jenkins.
Под капотом
Почему сделай сам?
Приложение Spring Boot можно развернуть на картридж Tomcat в OpenShift. Но на данный момент нет поддержки Tomcat 8 и Java 8, поэтому был выбран DIY. Сделай сам имеет ограничения: его нельзя масштабировать, например. Но он идеально подходит для попыток играть с новыми вещами.
Структура приложения
Приложение является обычным приложением Spring Boot, которое можно загрузить с помощью http://start.spring.io . Используемая система сборки Maven, тип упаковки Jar. Tomcat 8 с Java 8 используется. Spring Boot по умолчанию использует Tomcat 7, для его изменения было добавлено следующее свойство:
1
2
3
|
< properties > < tomcat.version >8.0.9</ tomcat.version > </ properties > |
Maven был выбран, поскольку в настоящее время только OpenShift может использовать Gradle 1.6. Это связано с ошибкой в Gradle . Gradle 2.2 исправляет эту проблему.
Maven settings.xml
Файл settings.xml
очень важен, так как содержит местоположение репозитория Maven: ${OPENSHIFT_DATA_DIR}/m2/repository
.
В OpenShift права на запись находятся только в $ OPENSHIFT_DATA_DIR.
Конфигурация источника данных
Приложение использует Spring Data REST для экспорта репозиториев через REST. Требуемые зависимости:
- spring-boot-starter-data-jpa — конфигурация репозиториев
- spring-boot-starter-data-rest — отображение хранилищ над REST
- hsqldb — для поддержки встроенной базы данных
- postgresql — для поддержки PostgreSQL. Поскольку в настоящее время OpenShift использует PostgreSQL 9.2, используется соответствующая версия драйвера
Общие свойства — application.properties
По умолчанию (профиль по умолчанию, src/main/resources/application.properties
) приложение будет использовать встроенный HSQLDB и заполнит его src/main/resources/data.sql
. Файл данных будет работать как на HSQLDB, так и на PostrgeSQL, поэтому нам не нужно предоставлять файлы, специфичные для платформы (это возможно в Spring Boot).
-
spring.datasource.initialize = true
необходимо использовать, поэтому Spring Boot забирает файл данных и загружает его в базу данных. -
spring.jpa.generate-ddl = true
гарантирует, что схема будет экспортирована.
Свойства OpenShift — application-openshift.properties
Конкретная конфигурация OpenShift ( src/main/resources/application-openshift.properties
) позволяет использовать сервис PostgreSQL. Конфигурация использует переменные OpenShift env для настройки свойств соединения:
- $ OPENSHIFT_POSTGRESQL_DB_HOST — для хоста базы данных
- $ OPENSHIFT_POSTGRESQL_DB_PORT — для порта базы данных
- $ OPENSHIFT_APP_NAME — для имени базы данных
- $ OPENSHIFT_POSTGRESQL_DB_USERNAME — для имени пользователя базы данных
- $ OPENSHIFT_POSTGRESQL_DB_PASSWORD — для пароля базы данных
Spring позволяет использовать переменные env непосредственно в свойствах с синтаксисом ${}
, например:
1
|
spring.datasource.username = ${OPENSHIFT_POSTGRESQL_DB_USERNAME} |
Чтобы Spring Boot активировал профиль OpenShift, свойство spring.profiles.active
передается приложению при запуске: java -jar <name>.jar --spring.profiles.active=openshift
.
Вход в OpenShift
Файл журнала будет сохранен в $ OPENSHIFT_DATA_DIR:
1
|
logging.file=${OPENSHIFT_DATA_DIR}/logs/app.log |
Привод
Путь контекста управления по умолчанию для привода /
. Это изменилось на /manage
, потому что OpenShift предоставляет конечную точку /health
, которая покрывает конечную точку /health
привода.
1
|
management.context-path=/manage |
OpenShift action_hooks
OpenShift выполняет файлы сценариев хуков действия в определенных точках в процессе развертывания. Все хуки размещаются в .openshift/action_hooks
в хранилище приложений. Файлы должны быть исполняемыми. В Windows в Git Bash можно использовать следующую команду:
1
|
git update-index --chmod=+x .openshift/action_hooks/* |
Развертывание приложения
Сценарий deploy
загружает Java и Maven, создает несколько каталогов и экспортирует пару переменных среды, необходимых для правильного запуска сборки Java 8 / Maven.
Последняя команда развертывания — запуск целей Maven:
1
|
mvn -s settings.xml clean install |
Запуск приложения
Когда сценарий deploy
завершается успешно, target
каталог будет содержать один jar с собранным приложением Spring Boot. Приложение запускается и привязывается к адресу и порту сервера, предоставленным OpenShift. Кроме того, предоставляется имя профиля, поэтому будет создан действительный источник данных. Последняя команда, которая запускает приложение:
1
|
nohup java -Xms384m -Xmx412m -jar target/*.jar --server.port=${OPENSHIFT_DIY_PORT} --server.address=${OPENSHIFT_DIY_IP} --spring.profiles.active=openshift & |
Остановка приложения
Сценарий stop
ищет Java-процесс, и когда он его находит … вы знаете, что происходит.
Резюме
Я очень доволен оценкой OpenShift с картриджем Do It Yourself. Не все прошло гладко, как я ожидал, в основном из-за ограничений памяти на малых Gear. Я потратил некоторое время, чтобы понять это и иметь правильную конфигурацию. Но, тем не менее, OpenShift с DIY стоит того, чтобы попробовать и поиграть с ним некоторое время. Тем более, что начать работу совершенно бесплатно.
использованная литература
- Исходный код проекта, используемый в этой статье, можно найти на GitHub: https://github.com/kolorobot/openshift-diy-spring-boot-sample .
- Документация по Spring Boot: http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#cloud-deployment-openshift
- Некоторые ссылки OpenShift, использованные при создании этой статьи:
https://blog.openshift.com/run-gradle-builds-on-openshift
https://blog.openshift.com/tips-for-creating-openshift-apps-with-windows
Ссылка: | Spring Boot / Java 8 / Tomcat 8 на Openshift с DIY от нашего партнера JCG Рафаля Боровца в блоге Codeleak.pl . |