Рубрики
Без рубрики

Учебное пособие: Развертывание приложений Java EE в Azure (Часть 1)

Существует множество вариантов разработки облачных приложений, начиная от традиционного Iaa… С тегами azure, java, show dev, tutorial.

Существует множество вариантов разработки облачных приложений, начиная от традиционных 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 со значением полное доменное имя для экземпляра Postgres
  • AZURE_POSTGRES_ADMIN_USER с именем пользователя администратора, используемым для предоставления PG
  • AZURE_POSTGRES_SERVER_NAME с именем сервера, используемого для предоставления PG
  • AZURE_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”