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

Простой способ развертывания приложения Spring Boot в рабочей среде Azure

В этом сообщении показано, как развернуть образец приложения Spring Petclinic в службе приложений Azure с помощью действий GitHub. Помечен как spring, azure, java.

В этом сообщении в блоге мы собираемся развернуть классическое приложение 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”