В этом сообщении в блоге мы собираемся развернуть классическое приложение Spring Boot для производства в Azure, уделяя особое внимание простоте использования как с точки зрения разработчика, так и с точки зрения операций.
Почему “легкий путь”?
Несмотря на то, что использовать Kubernetes нелегко , если ваша цель – развернуть и разместить приложение Spring Boot в рабочей среде, у вашего клиента, вероятно, нет времени и денег, чтобы позволить вам работать таким образом.
Здесь мы стремимся развернуть и поддерживать производственное приложение с минимальными затратами труда:
- Как разработчик, наша цель – просто
запустить git
в производство и не беспокоиться ни о чем другом. - Как инженер по эксплуатации, наша цель – выполнить максимально простую настройку и не выполнять никаких работ по техническому обслуживанию или масштабированию.
Образец заявления
Для этого поста в блоге мы будем использовать вилку знаменитой весенней Petclinic . Это хорошо известный и хорошо документированный образец приложения Spring Boot, и мы подробно расскажем о вариантах, которые были сделаны для его легкого развертывания.
В этом приложении нет ничего особенного, поэтому, если вы используете приложение Spring Boot (или даже лучше, приложение JHipster !), вы должны быть в состоянии выполнить следующие шаги и очень быстро оказаться в облаке.
Обзор службы приложений Azure
Существует множество способов развертывания приложения Spring Boot в Azure. Очевидно, что вы можете использовать виртуальную машину (VM): вам нужно будет все настроить вручную, позаботиться об обслуживании операционной системы и виртуальной машины, самостоятельно обрабатывать HTTPS и масштабируемость… Таким образом, хотя на первый взгляд это выглядит просто, это отнимает много времени, а техническое обслуживание будет большой проблемой.
Мы собираемся использовать Службу приложений Azure , которая представляет собой решение “Платформа как услуга”. Он поддерживает различные языки, а также изображения докеров, поэтому на нем можно эффективно размещать приложения любого типа. Это также очень экономично .
В качестве управляемой службы затраты на обслуживание намного меньше, чем в случае виртуальной машины, и масштабируемость уже включена, что делает ее отличным способом размещения монолитных приложений Spring Boot. Если у вас более сложные потребности, мы рекомендуем использовать Облако Azure Spring Cloud , которое разделяет многие схожие концепции, но нацелено на архитектуры микросервисов.
Банка или Докер?
Служба приложений Azure поддерживает как развертывания Jar, так и развертывания Docker, которые являются хорошо документированными и популярными способами развертывания приложений Spring Boot.
Мы рекомендуем использовать развертывание Jar здесь: и операционная система, и JVM будут управляться (и поддерживаться!) корпорацией Майкрософт, Что означает, что вам придется выполнять гораздо меньше работ по техническому обслуживанию. Например, если в виртуальной виртуальной машине обнаружена уязвимость в системе безопасности, она будет автоматически исправлена без какого-либо ручного вмешательства.
Настройка службы приложений Azure
Сначала мы создадим группу ресурсов Azure, в которой будем работать:
- Перейдите к Портал Azure .
- В поле поиска найдите “Группы ресурсов”.
- Создайте новую группу ресурсов под названием
spring-petclinic
.
Затем создайте экземпляр службы приложений Azure:
- В окне поиска портала Azure найдите “Службы приложений”.
- Создайте новое веб-приложение в группе ресурсов
spring-petclinic
, используя Java 11 в Linux, как показано на скриншоте ниже:
Настройка MySQL
Как и многие приложения Spring Boot, Spring Petclinic использует базу данных MySQL: если вы используете другую базу данных, например PostgreSQL, ваша настройка должна быть аналогичной.
Служба приложений Azure имеет функцию под названием “MySQL в приложении”, которую вы можете использовать для снижения затрат на хостинг, так как MySQL будет работать внутри вашего экземпляра службы приложений Azure. Хотя это можно использовать в разработке, оно имеет несколько важных ограничений и не является производственной базой данных, поэтому мы не собираемся использовать его здесь.
- Перейдите к Портал Azure .
- В поле поиска найдите “База данных Azure для MySQL”.
- Создайте сервер MySQL (и будьте осторожны, чтобы выбрать правильный ценовой уровень для вашего использования!).
- Запишите имя вашей базы данных, имя пользователя и пароль, так как они понадобятся нам позже.
В своей базе данных MySQL перейдите в раздел “Безопасность подключения” и выберите “Разрешить доступ к службам Azure”. Вам также следует нажать на кнопку “Добавить IP-адрес клиента”, чтобы автоматически добавить свой текущий IP-адрес в правила брандмауэра, чтобы вы могли получить к нему доступ со своего текущего компьютера.
Переменные среды
Spring Petclinic настраивается с помощью файлов свойств, которые находятся в каталоге src/main/ресурсы
. Один из них называется приложение-mysql.properties
, что означает, что оно будет использоваться, когда mysql
Будет активирован профиль весенней загрузки.
В Службе приложений Azure, которую мы создали выше, выберите меню Настройки > Конфигурация
слева.
Здесь нам нужно настроить два разных параметра:
- Установите Spring Boot для использования профиля
mysql
, используя ключ средыSPRING_PROFILES_ACTIVE
. - Переопределите конфигурацию базы данных с помощью переменных среды для
SPRING_DATASOURCE_URL
,ИМЯ_ИСТОЧНИКА_ДАННЫХ ИМЯ_ПОЛЬЗОВАТЕЛЯ
иПАРОЛЬ SPRING_DATASOURCE_PASSWORD
ключи.
Эта конфигурация должна выглядеть так, как показано на скриншоте ниже:
Поскольку мы здесь разбираемся с секретами, можно использовать другое решение Лазурное хранилище ключей . В Spring Boot это можно настроить с помощью Azure Key Vault Secrets Для запуска Spring Boot . Это добавляет некоторую сложность проекту и не более безопасно, чем переменные среды в нашем конкретном случае использования (в конце концов, оба становятся свойствами загрузки Spring и могут быть прочитаны из кода), поэтому для простого хранения одного секрета это выходит за рамки этой статьи “развернуть простой способ”.
Развертывание с помощью плагина Azure Webapp Maven
Теперь, когда наша служба приложений настроена, все, что нам нужно сделать, это развернуть наше приложение. В этом первом решении мы собираемся использовать плагин Azure Webapp Maven. Это то, что использовало бы большинство разработчиков, так как оно легко интегрируется в их идеи.
Внутри вашего pom.xml
файл, добавьте следующий плагин Maven:
com.microsoft.azure azure-webapp-maven-plugin 1.8.0 V2 spring-petclinic jdubois-petclinic westeurope B1 linux java11 java11 ${project.basedir}/target *.jar
Конечно, вам нужно будет настроить правильные параметры для вашей группы ресурсов
, Имя приложения
, регион
и ценовой уровень
.
Это решение очень простое в использовании для разработчиков, но у него есть несколько недостатков:
- Его конфигурация хранится внутри
проекта pom.xml
, включая конфигурацию, которая должна изменяться в зависимости от среды. - Для этого требуется локальная сборка и ручная работа разработчика.
Автоматизация развертывания с помощью действия GitHub
Более новой альтернативой плагину Azure Webapp Maven является использование действия GitHub.
Вам нужно будет авторизовать свое действие на GitHub для публикации приложений в Azure, вот как это сделать:
- На портале Azure выберите свою службу приложений и на панели обзора нажмите
Получить профиль публикации
. Вы будете загружать.Настройки публикации
файл. - В своем проекте на GitHub перейдите в
Настройки > Секреты
и создайте новый секрет под названиемПрофиль публикации веб-приложения azure
. Вставьте содержимое предыдущего.PublishSettings
файл в этот секрет.
Затем добавьте следующее действие GitHub в свой проект. Создайте файл с именем .github/рабочие процессы/сборка и развертывание.yml
и вставьте в него следующее содержимое:
name: Build and deploy to Azure App Service on: push: branches: - master jobs: build-and-deploy: runs-on: ubuntu-latest steps: - uses: actions/checkout@v1 - name: Set up JDK 11 uses: actions/setup-java@v1 with: java-version: 11 - name: Cache Maven archetypes uses: actions/cache@v1 with: path: ~/.m2/repository key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} restore-keys: | ${{ runner.os }}-maven- - name: Build with Maven run: mvn clean package - uses: azure/webapps-deploy@v1 with: app-name: spring-petclinic publish-profile: ${{ secrets.azureWebAppPublishProfile }} # See https://github.com/Azure/actions-workflow-samples/tree/master/AppService package: '${{ github.workspace }}/target/*.jar'
Вот краткое описание этого действия на GitHub:
- Он публикует обновленное приложение службы приложений Azure, как только код отправляется в ветку
master
. Вы можете выполнить аналогичное действие GitHub для других ветвей: вы можете настроить эту настройку для каждого разработчика проекта или для каждой среды. - Он проверяет последнюю версию кода и устанавливает Java 11.
- Он использует действие
actions/cache
GitHub для кэширования архетипов Maven: это значительно сокращает время сборки, поэтому настоятельно рекомендуется. - Он создает и тестирует приложение с помощью Maven.
- Он развертывает окончательное приложение с помощью действия
azure/webapps-развернуть
GitHub. Это развертывание также могло быть выполнено с помощью плагинаAzure Webapp Maven
, который мы подробно описали в предыдущем разделе, но это действие на GitHub позволяет лучше отделить код (pom.xml
не имеет какой-либо конкретной конфигурации или библиотеки Azure), а также быстрее выполняется.
Заключительные мысли
Две наши цели выполнены достигнуты:
- Разработчикам нужно всего лишь
git push
для развертывания своего приложения Spring Boot, даже не зная ничего о службах приложений Azure. - Инженерам-операторам пришлось выполнить минимальную настройку (создать экземпляры MySQL и службы приложений и настроить 4 переменные среды), но теперь приложение может работать в рабочей среде без особого обслуживания. Операционная система и JVM будут автоматически исправлены и поддерживаться Корпорацией Майкрософт, а также включена масштабируемость.
Для достижения этих целей нам не нужно было изменять какой-либо код в нашем приложении Spring Boot. Используя действия GitHub для развертывания, все, что нам нужно было сделать, это добавить скрытый файл в репозиторий .github
.
Если вы хотите поближе ознакомиться с окончательным приложением, моя вилка Spring Petclinic доступна здесь .
Оригинал: “https://dev.to/azure/the-easy-way-to-deploy-a-spring-boot-application-to-production-on-azure-2joi”