Существует множество вариантов разработки облачных приложений, начиная от традиционных IaaS (Инфраструктура как услуга), PaaS (Платформа как услуга) и CaaS (Контейнеры как услуга) вплоть до Kubernetes и бессерверных (и, возможно, еще некоторых, которые я может отсутствовать!). Думайте об этом как о спектре, а не как о модели “один размер подходит всем”, где каждый вариант имеет свои плюсы и минусы. В конечном счете, каждый сценарий уникален, и окончательный выбор определяется требованиями, но всегда приятно знать, что в вашем распоряжении есть “варианты”!
Это первый из серии блогов, в которых вы познакомитесь с одним из вариантов запуска приложений Java EE в Azure. Мы будем следовать самому базовому подходу к развертыванию вашего приложения Java EE на сервере приложений, который настроен на виртуальной машине в Microsoft Azure вместе со службой Azure Database for PostgreSQL в качестве серверной базы данных. По сути, это комбинация IaaS (Azure VM) и PaaS (управляемый PostgreSQL в Azure).
Другие варианты, такие как контейнеры и Kubernetes, будут рассмотрены в следующих сообщениях
Пример, используемый в сообщении в блоге, представляет собой простое трехуровневое приложение, которое использует спецификации Java EE 8, такие как JAX-RS, EJB, CDI, JPA, JSF, Bean Validation. Мы будем использовать Сервер Payara для развертывания приложения и использования PostgreSQL как реляционная база данных.
В ходе урока мы рассмотрим:
- Postgres и настройка виртуальной машины в Azure
- Настройка сервера Payara на виртуальной машине
- Настройте и установите приложение Java EE
- Изучите его функциональность
За исключением незначительных изменений, приложение, используемое в этом руководстве, было адаптировано из this project by Реза Рахман
Пред- реквизиты
Вам понадобится учетная запись |/Microsoft Azure и Azure CLI для работы с учебным пособием.
Если у вас нет учетной записи Microsoft Azure, продолжайте и подпишитесь на бесплатную учетную запись! . Azure CLI – это кроссплатформенный интерфейс командной строки для управления ресурсами Azure. Пожалуйста, установите его, используя эти инструкции .
Сначала о главном…
Задайте идентификатор подписки Azure с помощью интерфейса командной строки Azure, который будет использоваться в этом руководстве.
Чтобы задать идентификатор подписки Azure
export AZURE_SUBSCRIPTION_ID=[to be filled] az account set --subscription $AZURE_SUBSCRIPTION_ID
Создайте группу ресурсов, которая будет содержать все службы (ресурсы), которые вы создадите в рамках этого руководства. Группа ресурсов подобна логическому контейнеру, в котором хранятся связанные ресурсы для решения Azure. Группа ресурсов включает в себя те ресурсы, которыми вы хотите управлять как группой.
Чтобы создать группу ресурсов
export AZURE_RESOURCE_GROUP_NAME=[to be filled] export AZURE_LOCATION=[to be filled] az group create --name $AZURE_RESOURCE_GROUP_NAME --location $AZURE_LOCATION
Установите Postgres в Azure
База данных Azure для PostgreSQL представляет собой службу реляционных баз данных, основанную на с открытым исходным кодом Движок базы данных Postgres . Это полностью управляемое предложение database-as-a-service, которое доступно в двух вариантах развертывания, как единый сервер и как Гипермасштабируемый (Citus) кластер
Для целей этого руководства мы будем использовать вариант с одним сервером
Мы будем использовать команду az postgres server create/| для создания экземпляра сервера Postgres в Azure. Сначала настройте некоторые свойства сервера, такие как имя, пользователь-администратор и т.д.
export AZURE_POSTGRES_SERVER_NAME=[to be filled] export AZURE_POSTGRES_ADMIN_USER=[to be filled] export AZURE_POSTGRES_ADMIN_PASSWORD=[to be filled] export SKU=B_Gen5_1 export STORAGE=5120
Для получения информации о хранении и вариантах артикула, пожалуйста, обратитесь к документация
А затем вызовите команду, чтобы инициировать создание экземпляра базы данных:
az postgres server create --resource-group $AZURE_RESOURCE_GROUP_NAME --name $AZURE_POSTGRES_SERVER_NAME --location $AZURE_LOCATION --admin-user $AZURE_POSTGRES_ADMIN_USER --admin-password $AZURE_POSTGRES_ADMIN_PASSWORD --storage-size $STORAGE --sku-name $SKU
Процесс подготовки займет несколько минут.
Чтобы проверить сведения о только что подготовленном экземпляре базы данных Postgres, вызовите команду az postgres server show
az postgres server show --resource-group $AZURE_RESOURCE_GROUP_NAME --name $AZURE_POSTGRES_SERVER_NAME
Вы должны получить ответ в формате JSON. Пожалуйста, запишите значение атрибута полное доменное имя
, поскольку позже вы будете использовать его для подключения к экземпляру Postgres.
Он должен иметь формат: [AZURE_POSTGRES_DB_NAME].postgres.database.azure.com
Установка виртуальной машины в Azure
Мы будем использовать Виртуальную машину в Azure для размещения сервера приложений Payara Java EE
Если быть точным, это будет виртуальная машина Linux на базе Ubuntu
Давайте начнем с настройки необходимой информации для виртуальной машины
export AZURE_VM_NAME=[to be filled] export AZURE_VM_USER=[to be filled] export AZURE_VM_PASSWORD=[to be filled] export VM_IMAGE=UbuntuLTS
Мы будем использовать az vm create
команда для создания экземпляра виртуальной машины
az vm create --resource-group $AZURE_RESOURCE_GROUP_NAME --name $AZURE_VM_NAME --image $VM_IMAGE --admin-username $AZURE_VM_USER --admin-password $AZURE_VM_PASSWORD
Подготовка виртуальной машины займет несколько минут.
Вам нужно получить общедоступный IP-адрес виртуальной машины. Сделайте это с помощью команды список виртуальных машин az-ip-адреса
az vm list-ip-addresses --resource-group $AZURE_RESOURCE_GROUP_NAME --name $AZURE_VM_NAME
Вы увидите ответ в формате JSON – взгляните на общедоступные Ip-адреса раздел и запишите значение свойства
IPAddress
. Настройте его как переменную среды, поскольку вы будете использовать его на последующих шагах
export VM_IP=[to be filled]
Разрешить виртуальной машине доступ к базе данных Postgres
База данных Postgres по умолчанию недоступна. Используйте команду az postgres server firewall-rule create |/, чтобы создать правило брандмауэра, явно разрешающее виртуальной машине доступ к экземпляру Postgres. Это позволит приложению Java EE, развернутому внутри виртуальной машины, взаимодействовать с Postgres.
export FIREWALL_RULE_NAME=AllowJavaEECafeAppOnVM az postgres server firewall-rule create --resource-group $AZURE_RESOURCE_GROUP_NAME --server $AZURE_POSTGRES_SERVER_NAME --name $FIREWALL_RULE_NAME --start-ip-address $VM_IP --end-ip-address $VM_IP
Установите сервер Payara на виртуальную машину
Payara Server – это сервер приложений с открытым исходным кодом, производный от GlassFish , который поддерживает надежное и безопасное развертывание приложений Java EE ( Jakarta EE ) и MicroProfile в любой среде: локальной, облачной или гибридной. Ознакомьтесь с проектом на GitHub или погрузитесь в его документацию , чтобы узнать больше!
SSH в виртуальную машину Linux, которую вы только что подготовили, используя указанное вами имя пользователя вместе с IP-адресом виртуальной машины
ssh $AZURE_VM_USER@$VM_IP
Введите пароль после запроса. Как только вы войдете в виртуальную машину, перейдите к следующим шагам.
Установите необходимый набор инструментов
Перед установкой сервера Payara нам нужно настроить несколько вещей, таких как JDK и т.д.
sudo apt-get update sudo apt install openjdk-8-jdk sudo apt install maven
Настройка сервера Payara
Мы используем серверную версию Payara 5.193.1
который является последним на момент написания этого руководства. Установка просто включает в себя загрузку и извлечение zip-файла сервера.
export PAYARA_VERSION=5.193.1 wget https://s3-eu-west-1.amazonaws.com/payara.fish/Payara+Downloads/$PAYARA_VERSION/payara-$PAYARA_VERSION.zip sudo apt install unzip unzip payara-$PAYARA_VERSION.zip
Для подтверждения запустите ls ~/payara5/
Запустите сервер с помощью |/asadmin
~/payara5/bin/asadmin start-domain
Загрузка сервера займет несколько минут. Вы должны увидеть следующие журналы:
Waiting for domain1 to start .................. Successfully started the domain : domain1 domain Location: /home/abhishgu/payara5/glassfish/domains/domain1 Log File: /home/abhishgu/payara5/glassfish/domains/domain1/logs/server.log Admin Port: 4848 Command start-domain executed successfully.
Настройка и развертывание приложения
Теперь, когда у нас есть виртуальная машина, а также сервер Payara, мы можем развернуть наше приложение! Клонируйте репозиторий git
git clone https://github.com/abhirockzz/javaee-on-azure-iaas export APP_FOLDER_NAME=javaee-on-azure-iaas
В web.xml
файл (в javaee-on-azure-iaas/src/main/webapp/WEB-INF
) необходимо обновить с помощью URL-адреса JDBC для базы данных Postgres в Azure.
Это присутствует в атрибуте раздела
<источник данных
, и его формат выглядит следующим образом:
jdbc:postgresql://POSTGRES_FQDN:5432/postgres?user=AZURE_POSTGRES_ADMIN_USER@=AZURE_POSTGRES_SERVER_NAME&password=AZURE_POSTGRES_ADMIN_PASSWORD&sslmode=require
Вот список заполнителей, которые являются частью URL-адреса JDBC:
POSTGRES_FQDN
со значениемполное доменное имя
для экземпляра PostgresAZURE_POSTGRES_ADMIN_USER
с именем пользователя администратора, используемым для предоставления PGAZURE_POSTGRES_SERVER_NAME
с именем сервера, используемого для предоставления PGAZURE_POSTGRES_ADMIN_PASSWORD
с паролем администратора, используемым для предоставления PG
Установите необходимые значения
export POSTGRES_FQDN=[to be filled] export AZURE_POSTGRES_ADMIN_USER=[to be filled] export AZURE_POSTGRES_SERVER_NAME=[to be filled] export AZURE_POSTGRES_ADMIN_PASSWORD=[to be filled]
Просто используйте эти команды для замены
export FILE_NAME=javaee-on-azure-iaas/src/main/webapp/WEB-INF/web.xml sed -i 's/POSTGRES_FQDN/'"$POSTGRES_FQDN"'/g' $FILE_NAME sed -i 's/AZURE_POSTGRES_SERVER_NAME/'"$AZURE_POSTGRES_SERVER_NAME"'/g' $FILE_NAME sed -i 's/AZURE_POSTGRES_ADMIN_USER/'"$AZURE_POSTGRES_ADMIN_USER"'/g' $FILE_NAME sed -i 's/AZURE_POSTGRES_ADMIN_PASSWORD/'"$AZURE_POSTGRES_ADMIN_PASSWORD"'/g' $FILE_NAME
Вот пример того, как будет выглядеть раздел <источник данных>
:
java:global/JavaEECafeDB org.postgresql.ds.PGPoolingDataSource jdbc:postgresql://foobar-pg.postgres.database.azure.com:5432/postgres?user=foobar@foobar-pg&password=foobarbaz&sslmode=require
Теперь приложение настроено. Давайте построим его!
mvn clean install -f $APP_FOLDER_NAME/pom.xml
У вас должен быть доступен файл WAR. Подтверждать
ls -lrt $APP_FOLDER_NAME/target | grep javaee-cafe.war
В качестве последнего шага в процессе настройки приложения давайте загрузим драйвер Java для Postgres и добавим его в Payara
Мы используем версию драйвера 42.2.8
export PG_DRIVER_JAR=postgresql-42.2.8.jar wget https://jdbc.postgresql.org/download/$PG_DRIVER_JAR
Добавьте JAR в Payara, просто вызовите asadmin add-library
~/payara5/glassfish/bin/asadmin add-library $PG_DRIVER_JAR
Наконец, чтобы развернуть файл WAR, просто скопируйте его в папку domain autodeploy
cp $APP_FOLDER_NAME/target/javaee-cafe.war ~/payara5/glassfish/domains/domain1/autodeploy
Развертывание займет некоторое время. В то же время вы можете отслеживать журналы с помощью:
tail -f ~/payara5/glassfish/domains/domain1/logs/server.log
Вы должны увидеть сообщения журнала, указывающие на успешное развертывание приложения javaee-cafe |/
[2019-11-18T13:34:21.317+0000] [Payara 5.193] [INFO] [NCLS-DEPLOYMENT-02035] [javax.enterprise.system.tools.deployment.autodeploy] [tid: _ThreadID=104 _ThreadName=payara-executor-service-scheduled-task] [timeMillis: 1574084061317] [levelValue: 800] [[ [AutoDeploy] Successfully autodeployed : /home/abhishgu/payara5/glassfish/domains/domain1/autodeploy/javaee-cafe.war.]]
Изучите приложение
Пришло время протестировать наше приложение Java EE! Для начала мы можем получить доступ к приложению с помощью веб-браузера. Но, как и экземпляр Postgres, виртуальная машина, на которой размещен сервер Payara вместе с приложением, также защищена по умолчанию, т.е. вы не можете получить к ней доступ из общедоступного Интернета.
Нам нужно создать правило брандмауэра, используя az vm open-port
, чтобы получить к нему доступ с нашего локального компьютера. Нам просто нужно открыть порт 8080
поскольку это HTTP-порт по умолчанию, который использует сервер Payara
az vm open-port --port 8080 --resource-group $AZURE_RESOURCE_GROUP_NAME --name $AZURE_VM_NAME
Доступ к интерфейсу JSF
Используйте свой браузер для доступа к http://[ENTER_VM_IP]:8080/javaee-cafe
. Вы можете использовать пользовательский интерфейс для создания, удаления и просмотра кофе.
Используйте REST API
Приложение также предоставляет REST API для создания, удаления и перечисления кофе.
export VM_IP=[to be filled]
Создавайте кофе
curl -X POST $VM_IP:8080/javaee-cafe/rest/coffees -d '{"name":"cappuccino","price":"10"}' -H "Content-Type: application/json" curl -X POST $VM_IP:8080/javaee-cafe/rest/coffees -d '{"name":"caffe-latte","price":"15"}' -H "Content-Type: application/json"
Принеси всем кофе
curl -H "Accept: application/json" $VM_IP:8080/javaee-cafe/rest/coffees
Вы должны увидеть ответ в формате JSON, в котором перечислены оба варианта кофе вы только что добавили
Получите кофе по удостоверению личности
curl -H "Accept: application/json" $VM_IP:8080/javaee-cafe/rest/coffees/1
Удалить кофе по идентификатору
curl -X DELETE $VM_IP:8080/javaee-cafe/rest/coffees/1 curl -H "Accept: application/json" $VM_IP:8080/javaee-cafe/rest/coffees
Обратите внимание, что капучино
теперь удален
Очистка ресурсов
Как только вы закончите изучение приложения, вы можете удалить ресурсы. Поскольку мы использовали группу ресурсов, легко выполнить одну команду.
Пожалуйста, имейте в виду, что при этом будут удалены все ресурсы в группе, включая те, которые вы создали в рамках руководства (виртуальная машина, Postgres и т.д.), А также любые другие экземпляры служб, Которые у вас могут быть, если вы использовали уже существующую группу ресурсов
az group delete --name $AZURE_RESOURCE_GROUP_NAME
Резюме
Вы узнали, как развернуть стандартное приложение Java EE в Azure, используя сервер приложений, развернутый на виртуальной машине, а также управляемую базу данных, обеспечивающую долгосрочное сохранение.
Как упоминалось ранее, у каждого варианта есть свои плюсы и минусы. В этом случае у вас есть полный контроль над вашим приложением, его инфраструктурой развертывания, способом его масштабирования и т.д. С другой стороны, помните, что управление инфраструктурой, ее настройка для вашего приложения, ее защита и т.д. – это набор обязанностей, которые вы должны взять на себя наряду с предоставлением основной бизнес-логики как части функциональности приложения.
В следующей части будет рассказано о том, как использовать контейнерную платформу Docker для развертывания ваших приложений Java EE. Быть в курсе!
Оригинал: “https://dev.to/itnext/deploying-java-ee-apps-to-azure-part-1-217e”