Руководство. Создание веб-приложения Quarkus с помощью Службы приложений Azure в Linux и PostgreSQL
В этом руководстве показано, как создать, настроить и развернуть безопасное приложение Quarkus в службе приложение Azure, подключенной к базе данных PostgreSQL (с помощью База данных Azure для PostgreSQL). Служба приложений Azure — это высокомасштабируемая веб-служба с поддержкой самостоятельного исправления, которая позволяет легко развертывать приложения в Windows или Linux. По завершении вы получите приложение Quarkus, работающее в службе приложение Azure в Linux.
Чтобы завершить работу с этим руководством, вам потребуется:
- Учетная запись Azure с активной подпиской. Если у вас нет учетной записи Azure, ее можно создать бесплатно.
- Знание Java с разработкой Quarkus .
1. Запустите пример
Для удобства пример репозитория Hibernate ORM с Panache и RESTEasy включает конфигурацию контейнера разработки. Контейнер разработки имеет все необходимое для разработки приложения, включая базу данных, кэш и все переменные среды, необходимые образцу приложения. Контейнер разработки может выполняться в пространстве кода GitHub, что означает, что вы можете запустить пример на любом компьютере с веб-браузером.
Шаг 1. В новом окне браузера:
- Войдите в свою учетную запись GitHub.
- Перейдите к https://github.com/Azure-Samples/msdocs-quarkus-postgresql-sample-app.
- Выберите Создать вилку.
- Щелкните Создать вилку.
Шаг 2. В вилке GitHub выберите пространство кода Create codespace>on main.
Шаг 3. В терминале пространства кода:
- Запустите
mvn quarkus:dev
. - Когда появится уведомление
Your application running on port 8080 is available.
, нажмите кнопку "Открыть в браузере". Если вы видите уведомление с портом 5005, пропустите его. Пример приложения должен отображаться на новой вкладке браузера. Чтобы остановить сервер разработки Quarkus, введитеCtrl
+C
.
Дополнительные сведения о создании примера приложения Quarkus см. в документации Quarkus по упрощению Hibernate ORM с помощью Panache и настройке источников данных в Quarkus.
2. Создание Служба приложений и PostgreSQL
Сначала вы создадите ресурсы Azure. Действия, используемые в этом руководстве, создают набор безопасных ресурсов по умолчанию, включающих Служба приложений и База данных Azure для PostgreSQL. В процессе создания вы укажете следующее:
- Имя веб-приложения. Это имя используется в составе DNS-имени вашего веб-приложения в виде
https://<app-name>.azurewebsites.net
. - Регион для физического запуска приложения.
- Стек среды выполнения для приложения. Здесь вы выбираете версию Java, используемую для вашего приложения.
- План размещения для приложения. Это ценовая категория, которая включает набор функций и емкость масштабирования для вашего приложения.
- Группа ресурсов для приложения. Группа ресурсов позволяет группировать (в логическом контейнере) все ресурсы Azure, необходимые для приложения.
Войдите на портал Azure и выполните следующие действия, чтобы создать ресурсы Службы приложений Azure.
Шаг 1. В портал Azure:
- Введите "веб-приложение база данных" в строке поиска в верхней части портала Azure.
- Выберите элемент с меткой Веб-приложение и база данных под заголовком Marketplace. Вы также можете перейти напрямую к мастеру создания.
Шаг 2. На странице "Создание веб-приложения + база данных " заполните форму следующим образом.
- Группа ресурсов → Выбрать создать и использовать имя msdocs-quarkus-postgres-tutorial.
- Регион → любой ближайший к вам регион Azure.
- Имя → msdocs-quarkus-postgres-XYZ, где XYZ является тремя случайными символами. Это имя должно быть уникальным в Azure.
- Стек среды выполнения → Java 17.
- Стек веб-серверов Java → Java SE (внедренный веб-сервер).
- База данных → PostgreSQL — гибкий сервер. Имя сервера и имя базы данных задаются по умолчанию соответствующими значениями.
- План размещения — Базовый. Позже, когда все будет готово, вы сможете вертикально увеличить масштаб до рабочей ценовой категории.
- Выберите Review + create (Просмотреть и создать).
- После завершения проверки щелкните Создать.
Шаг 3. Развертывание занимает несколько минут. После завершения развертывания нажмите кнопку Перейти к ресурсу. Вы перейдете непосредственно в приложение Службы приложений, но будут созданы следующие ресурсы:
- Группа ресурсов — Контейнер для всех созданных ресурсов.
- План службы приложений — определяет вычислительные ресурсы для Службы приложений. Создается план Linux на уровне Базовый.
- Служба приложений — представляет приложение и выполняется в плане службы приложений.
- Виртуальная сеть — интегрирована с приложением Службы приложений и изолирует внутренний сетевой трафик.
- База данных Azure для PostgreSQL гибкий сервер → доступен только из виртуальной сети. База данных и пользователь создаются на этом сервере.
- Частная зона DNS зона → включает разрешение DNS сервера PostgreSQL в виртуальной сети.
3. Проверка параметров подключения
Мастер создания создал переменные подключения для вас уже в качестве параметров приложения. Параметры приложения — это один из способов сохранения секретов подключения из репозитория кода. Когда вы будете готовы переместить секреты в более безопасное расположение, вы можете использовать ссылки На Key Vault.
Шаг 1. На странице Служба приложений в меню слева выберите "Конфигурация".
Шаг 2. На вкладке "Параметры приложения" на странице "Конфигурация" убедитесь, что AZURE_POSTGRESQL_CONNECTIONSTRING
он присутствует. Он внедряется во время выполнения в качестве переменной среды.
Шаг 4. На вкладке "Параметры приложения" на странице "Конфигурация" выберите новый параметр приложения. Присвойте параметру PORT
имя и задайте для нее значение 8080
, которое является портом по умолчанию приложения Quarkus. Нажмите ОК.
Шаг 5. Выберите "Сохранить".
Возникли проблемы? Ознакомьтесь с разделом "Устранение неполадок".
4. Развертывание примера кода
На этом шаге вы настроите развертывание GitHub с помощью GitHub Actions. Это всего лишь один из множества способов развертывания в Службе приложений, но это также отличный способ обеспечения непрерывной интеграции в процессе развертывания. По умолчанию каждая команда git push
из репозитория GitHub запускает действие сборки и развертывания.
Обратите внимание на следующее:
- Развернутый пакет Java должен быть Uber-Jar.
- Для простоты руководства вы отключите тесты во время процесса развертывания. GitHub Actions runners не имеют доступа к базе данных PostgreSQL в Azure, поэтому все тесты интеграции, требующие доступа к базе данных, завершаются сбоем, например с примером приложения Quarkus.
Шаг 1. Вернитесь на страницу Служба приложений в меню слева выберите Центр развертывания.
Шаг 2. На странице Центра развертывания:
- В поле Источник выберите GitHub. По умолчанию в качестве поставщика сборки выбрано GitHub Actions.
- Войдите в свою учетную запись GitHub и следуйте инструкциям по авторизации Azure.
- В поле Организация выберите свою учетную запись.
- В репозитории выберите msdocs-quarkus-postgresql-sample-app.
- В поле Ветвь выберите main.
- В типе проверки подлинности выберите назначаемое пользователем удостоверение (предварительная версия).
- В меню сверху выберите Сохранить. Служба приложений фиксирует файл рабочего процесса в выбранном репозитории GitHub в каталоге
.github/workflows
.
Шаг 3. Вернитесь в пространство кода GitHub примера вилки, выполните команду git pull origin main
.
Это извлекает только что зафиксированный файл рабочего процесса в пространство кода.
Шаг 4.
- Откройте src/main/resources/application.properties в обозревателе. Quarkus использует этот файл для загрузки свойств Java.
- Добавьте производственное свойство
%prod.quarkus.datasource.jdbc.url=${AZURE_POSTGRESQL_CONNECTIONTRING}
. Это свойство задает URL-адрес источника данных рабочей среды для параметра приложения, созданного мастером создания.
Шаг 5.
- Откройте github/workflows/main_msdocs-quarkus-postgres-XYZ.yml в обозревателе. Этот файл был создан мастером создания Служба приложений.
- На шаге измените
Build with Maven
командуmvn clean install -DskipTests -Dquarkus.package.type=uber-jar
Maven на .-DskipTests
пропускает тесты в проекте Quarkus и-Dquarkus.package.type=uber-jar
создает Uber-Jar, который Служба приложений потребностей.
Шаг 6.
- Выберите расширение Система управления версиями.
- В текстовом поле введите сообщение фиксации, например
Configure DB and deployment workflow
. - Нажмите кнопку "Зафиксировать", а затем подтвердите значение "Да".
- Нажмите кнопку "Синхронизировать изменения 2", а затем нажмите кнопку "ОК".
Шаг 7. Назад на странице Центра развертывания в портал Azure:
- Выберите Журналы. Новый запуск развертывания уже запущен из зафиксированных изменений.
- В элементе журнала для запуска развертывания выберите запись "Сборка и развертывание журналов " с последней меткой времени.
Шаг 8. Вы перейдете в репозиторий GitHub и увидите, что действие GitHub выполняется. Файл рабочего процесса определяет два отдельных этапа: сборку и развертывание. Дождитесь, пока в выполнении действия GitHub не будет показано состояние Завершено. Это занимает около 5 минут.
Возникли проблемы? Ознакомьтесь с разделом "Устранение неполадок".
5. Перейдите к приложению
Шаг 1. На странице Служба приложений:
- В меню слева выберите Обзор.
- Выберите URL-адрес своего приложения. Также можно перейти непосредственно по адресу
https://<app-name>.azurewebsites.net
.
Шаг 2. Добавьте несколько фруктов в список. Поздравляем, вы запускаете веб-приложение в службе приложение Azure с безопасным подключением к База данных Azure для PostgreSQL.
6. Потоковая передача журналов диагностики
Служба приложений Azure захватывает все сообщения, выводимые на консоль, чтобы помочь в диагностике проблем с приложением. Пример приложения включает стандартные инструкции ведения журнала JBoss, чтобы продемонстрировать эту возможность, как показано ниже.
private static final Logger LOGGER = Logger.getLogger(FruitEntityResource.class.getName());
@GET
public List<FruitEntity> get() {
LOGGER.info("In FruitEntityResource.get()");
return FruitEntity.listAll(Sort.by("name"));
}
Шаг 1. На странице Служба приложений:
- В меню слева выберите Журналы службы приложений.
- Под элементом Ведение журнала приложения выберите Файловая система.
- В меню сверху выберите Сохранить.
Шаг 2. В меню слева выберите поток журналов. Вы увидите журналы для своего приложения, включая журналы платформы и журналы из контейнера.
Узнайте больше о ведении журнала в приложениях Java в серии о включении Azure Monitor OpenTelemetry для приложений .NET, Node.js, Python и Java.
7. Очистка ресурсов
По завершении работы можно удалить все ресурсы из вашей подписки Azure, удалив соответствующую группу ресурсов.
Шаг 1. В строке поиска в верхней части портал Azure:
- Введите имя группы ресурсов.
- Выберите группу ресурсов.
Шаг 2. На странице группы ресурсов выберите "Удалить группу ресурсов".
Шаг 3.
- Введите имя группы ресурсов для подтверждения удаления.
- Выберите команду Удалить.
- Подтвердите еще раз с помощью удаления .
Устранение неполадок
Я вижу журнал ошибок "ERROR [org.acm.hib.orm.pan.ent.FruitEntityResource] (vert.x-eventloop-thread-0) Не удалось обработать запрос: jakarta.ws.rs.NotFoundException: HTTP 404 Not Found.
Это ошибка Vert.x (см . quarkus Reactive Architecture), указывающая, что клиент запрашивал неизвестный путь. Эта ошибка возникает при каждом запуске приложения, так как Служба приложений проверяет, начинается ли приложение, отправляя GET
запрос /robots933456.txt
в .
Приложение не удалось запустить и отображает следующую ошибку в журнале: "Классы моделей определены для единицы сохраняемости <по умолчанию по умолчанию> , но настроенный источник <данных не найден: объект EntityManagerFactory по умолчанию> не будет создан".
Эта ошибка Quarkus, скорее всего, связана с тем, что приложение не может подключиться к базе данных Azure. Убедитесь, что параметр AZURE_POSTGRESQL_CONNECTIONSTRING
приложения не был изменен и что application.properties правильно использует параметр приложения.
Часто задаваемые вопросы
- Сколько стоит такая конфигурация?
- Разделы справки подключиться к серверу PostgreSQL, защищенному за виртуальной сетью с другими средствами?
- Как осуществляется разработка локальных приложений с использованием GitHub Actions?
- Что делать, если нужно выполнить тесты с PostgreSQL во время рабочего процесса GitHub?
Сколько стоит такая конфигурация?
Цены на созданные ресурсы приведены следующим образом:
- План службы приложений создается на уровне Базовый, и его можно масштабировать вверх или вниз. См. цены на Службу приложений.
- Гибкий сервер PostgreSQL создается на самом низком уровне с максимальным объемом памяти Standard_B1ms с минимальным размером хранилища, который можно масштабировать вверх или вниз. Цены на Базу данных Azure для PostgreSQL.
- Плата за виртуальную сеть не взимается, если только вы не настроите дополнительные функциональные возможности, такие как пиринг. См. цены на виртуальные сети Azure.
- За частную зону DNS взимается небольшая плата. См. цены на Azure DNS.
Разделы справки подключиться к серверу PostgreSQL, защищенному за виртуальной сетью с другими средствами?
- Для базового доступа из программы командной строки можно запустить
psql
из терминала SSH приложения. - Чтобы подключиться из классического средства, компьютер должен находиться в виртуальной сети. Например, это может быть виртуальная машина Azure в одной из подсетей или компьютер в локальной сети с VPN-подключением типа "сеть — сеть" с виртуальной сетью Azure.
- Вы также можете интегрировать Azure Cloud Shell с виртуальной сетью.
Как осуществляется разработка локальных приложений с использованием GitHub Actions?
Используя автоматически созданный файл рабочего процесса из Служба приложений в качестве примера, каждый git push
запускает новую сборку и развертывание. Из локального клона репозитория GitHub необходимо внести необходимые обновления и отправить их в GitHub. Например:
git add .
git commit -m "<some-message>"
git push origin main
Что делать, если нужно выполнить тесты с PostgreSQL во время рабочего процесса GitHub?
Пример приложения Quarkus по умолчанию включает тесты с подключением к базе данных. Чтобы избежать ошибок подключения, добавлено -skipTests
свойство. Если вы хотите, можно выполнить тесты в контейнере службы PostgreSQL. Например, в автоматически созданном файле рабочего процесса в GitHub fork (.github/workflows/main_cephalin-quarkus.yml), внесите следующие изменения:
Добавьте в задание код YAML для контейнера
build
PostgreSQL, как показано в следующем фрагменте кода.... jobs: build: runs-on: ubuntu-latest # BEGIN CODE ADDITION container: ubuntu services: # Hostname for the PostgreSQL container postgresdb: image: postgres env: POSTGRES_PASSWORD: postgres POSTGRES_USER: postgres POSTGRES_DB: postgres # Set health checks to wait until postgres has started options: >- --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5 # END CODE ADDITION steps: - uses: actions/checkout@v4 ...
container: ubuntu
сообщает GitHub запуститьbuild
задание в контейнере. Таким образом, строка подключения в средеjdbc:postgresql://postgresdb:5432/postgres
разработки может работать как во время выполнения рабочего процесса. Дополнительные сведения о подключении PostgreSQL в GitHub Actions см. в разделе "Создание контейнеров служб PostgreSQL".На шаге
Build with Maven
удалите-DskipTests
. Например:- name: Build with Maven run: mvn clean install -Dquarkus.package.type=uber-jar
Следующие шаги
Дополнительные сведения о запуске приложений Java на Служба приложений см. в руководстве разработчика.
Узнайте, как защитить приложение с помощью личного домена и сертификата.