Azure에서 Spring Boot 애플리케이션을 운영 환경에 배포하는 간단한 방법

12951 단어 springjavaazure
이 블로그에서 우리는 Azure에 고전적인 Spring Boot 응용 프로그램을 배치하여 개발자와 운영자의 측면에서 출발하여 용이성을 중점적으로 주목할 것이다.

왜'쉬운 방법'인가요?


use Kubernetes the hard way은 흥미롭지만, 생산 과정에서 Spring Boot 응용 프로그램을 배치하고 관리하는 것이 목표라면 고객이 이렇게 일할 시간과 돈이 없을 수도 있습니다.
운영 애플리케이션을 최대한 적게 배포하고 유지하는 것이 목표입니다.
  • 은 개발자로서 우리의 목표는 git push을 생산에 투입하는 것일 뿐, 다른 어떤 일도 걱정할 필요가 없다.
  • 은ops엔지니어로서 우리의 목표는 가능한 한 가장 간단한 설정을 하는 것이며, 어떠한 유지보수나 확장성 작업도 필요하지 않습니다.
  • 예제 응용 프로그램


    이 박문에 대해 우리는 a fork of the famous Spring Petclinic을 사용할 것이다.이것은 모두가 알고 있고 상세한 문서 기록이 있는 예시적인 스프링 안내 응용 프로그램입니다. 우리는 그것을 배치하기 편리하도록 선택한 것을 상세하게 소개할 것입니다.
    이 응용 프로그램은 특별한 곳이 없기 때문에 Spring 안내 응용 프로그램을 사용하면(또는 더 좋은 것은 JHipster application!),너는 다음 절차에 따라 구름 위로 빠르게 들어갈 수 있을 것이다.

    Azure 애플리케이션 서비스 개요


    Spring Boot 응용 프로그램을 Azure에 배포할 수 있는 여러 가지 방법이 있습니다.분명히 가상 머신(VM)을 사용할 수 있습니다. 모든 것을 수동으로 설정하고 운영체제와 JVM의 유지 보수를 책임지며 HTTPS와 확장성을 스스로 처리해야 합니다...따라서 언뜻 보기는 쉽지만 시간이 걸리고 유지보수가 큰 문제가 될 것이다.
    우리는 Azure App Service을 사용할 것이다. 이것은 일종의 플랫폼 즉 서비스 해결 방안이다.다른 언어와 Docker 이미지를 지원하기 때문에 모든 종류의 프로그램을 효과적으로 불러올 수 있습니다.그것도 very cost-efficient입니다.
    관리형 서비스로서 가상 시스템에 비해 유지 보수 비용이 훨씬 적고 확장성이 포함되어 있어 단일 Spring 부트 응용 프로그램을 관리하는 좋은 방법이 되었다.만약 더 복잡한 수요가 있다면, 우리는 Azure Spring Cloud을 사용하는 것을 권장합니다. 이것은 유사한 개념이 많지만, 마이크로서비스 구조를 목표로 합니다.

    Jar입니까, Docker입니까?


    Azure App Service은 Jar배치와 Docker배치를 지원합니다. 이 두 가지 스프링부트 응용 프로그램을 배치하는 방법은 모두 좋은 문서 기록을 가지고 유행합니다.
    여기에서 Jar 배포를 사용하는 것이 좋습니다. 운영 체제와 JVM은 모두 관리됩니다(및 지원됩니다!).이것은 네가 해야 할 유지 보수 업무가 훨씬 적다는 것을 의미한다.예를 들어, JVM에서 보안 취약점이 발견되면 수동 개입 없이 자동으로 패치됩니다.

    Azure 애플리케이션 서비스 설치 프로그램


    우선, 우리는 Azure 자원 그룹을 만들 것이다. 우리는 그 중에서 일할 것이다.
  • 에서 Azure portal으로 넘어갑니다.
  • 검색 상자에서 리소스 그룹을 찾습니다.
  • spring-petclinic이라는 새로운 자원 그룹을 만듭니다.
  • 그런 다음 Azure 애플리케이션 서비스 인스턴스를 만듭니다.
  • Azure 포털 검색 상자에서 "응용 서비스"를 찾습니다.
  • Linux에서 Java11을 사용하여 spring-petclinic 리소스 그룹에 새 웹 응용 프로그램을 만듭니다. 아래 화면 캡처와 같이:

  • MySQL 설치 프로그램


    많은 Spring Boot 응용 프로그램과 마찬가지로 Spring Petclinic은 MySQL 데이터베이스를 사용합니다. PostgreSQL과 같은 다른 데이터베이스를 사용한다면 설정과 유사해야 합니다.
    Azure 응용 프로그램 서비스에는'응용 프로그램의 MySQL'이라는 기능이 있습니다. 이 기능을 사용하면 관리 비용을 낮출 수 있습니다. 왜냐하면 MySQL은 당신의 Azure 응용 프로그램 서비스 실례에서 실행되기 때문입니다.비록 이것은 개발에 사용할 수 있지만 몇 가지 중요한 한계가 있고 생산급 데이터베이스가 아니기 때문에 우리는 이곳에서 그것을 사용할 생각은 없다.
  • 에서 Azure portal으로 넘어갑니다.
  • 검색 상자에서 "Azure Database for MySQL"을 찾습니다.
  • 에서 MySQL 서버를 생성합니다(사용 상황에 따라 정확한 가격 레이어를 선택하십시오!).
  • 데이터베이스 이름, 사용자 이름, 비밀번호를 주의하십시오. 잠시 후에 데이터베이스가 필요합니다.
  • MySQL 데이터베이스에서 연결 보안으로 이동하여 Azure 서비스 액세스 허용을 선택합니다.또한 클라이언트 IP 추가 버튼을 클릭하여 현재 IP를 방화벽 규칙에 자동으로 추가하여 현재 컴퓨터에서 액세스할 수 있도록 해야 합니다.

    환경 변수


    Spring Petclinic은 src/main/resources 디렉토리에 있는 속성 파일을 사용하여 구성됩니다.이 중 하나는 application-mysql.properties입니다. 이것은 mysql 스프링 가이드 프로필을 터치할 때 사용할 것을 의미합니다.
    위에서 만든 Azure 응용 프로그램 서비스에서 왼쪽에 있는 Settings > Configuration 메뉴를 선택하십시오.
    두 가지 다른 설정을 구성해야 합니다.
  • 환경 키를 사용하여 Spring Boot을 mysql 구성 파일로 설정합니다.
  • SPRING_PROFILES_ACTIVE, SPRING_DATASOURCE_URLSPRING_DATASOURCE_USERNAME키의 환경 변수를 사용하여 데이터베이스 설정을 덮어씁니다.
  • 이 구성은 다음 화면 캡처와 같습니다.

    우리가 이곳에서 비밀을 처리하기 때문에, 또 다른 해결 방안은 Azure Key Vault을 사용하는 것이다.Spring Boot을 사용하여 Azure Key Vault Secrets Spring Boot Starter으로 구성할 수 있습니다.이것은 프로젝트에 약간의 복잡성을 증가시켰고 우리의 특정 용례의 환경 변수보다 안전하지 않다. (결국, 둘 다 스프링 가이드 속성이 되고 코드에서 읽을 수 있기 때문에) 이것은 비밀 하나만 저장하는 데 있어서 이'쉽게 배치'문장의 범위를 넘어섰다.

    Azure Webapp Maven 플러그인 배포 사용


    현재 우리의 응용 프로그램 서비스는 이미 설정되어 있으며, 우리가 해야 할 일은 우리의 응용 프로그램을 배치하는 것이다.첫 번째 솔루션에서는 Azure Webapp Maven 플러그인을 사용합니다.이것은 대부분의 개발자들이 사용할 것이다. 왜냐하면 그것은 그들의 IDE에 집적하기 쉽기 때문이다.SPRING_DATASOURCE_PASSWORD 파일에 다음 Maven 플러그인을 추가합니다.
          <plugin>
            <groupId>com.microsoft.azure</groupId>
            <artifactId>azure-webapp-maven-plugin</artifactId>
            <version>1.8.0</version>
              <configuration>
                <schemaVersion>V2</schemaVersion>
                <resourceGroup>spring-petclinic</resourceGroup>
                <appName>jdubois-petclinic</appName>
                <region>westeurope</region>
                <pricingTier>B1</pricingTier>
                <runtime>
                  <os>linux</os>
                  <javaVersion>java11</javaVersion>
                  <webContainer>java11</webContainer>
                </runtime>
                <deployment>
                  <resources>
                    <resource>
                      <directory>${project.basedir}/target</directory>
                      <includes>
                        <include>*.jar</include>
                      </includes>
                    </resource>
                  </resources>
                </deployment>
              </configuration>
          </plugin>
    
    물론 pom.xml, resourceGroup, appNameregion에 정확한 매개 변수를 설정해야 합니다.
    이 솔루션은 개발자에게 매우 사용하기 쉽지만 다음과 같은 단점이 있습니다.
  • 의 설정은 프로젝트의 pricingTier에 저장되며 환경 변화에 따라 설정해야 하는 것을 포함한다.
  • 은 로컬 구축과 개발자의 수동 작업이 필요합니다.
  • GitHub를 통한 자동화된 배포


    Azure Webapp Maven 플러그인의 새로운 대안은 GitHub 작업을 사용하는 것입니다.
    애플리케이션을 Azure에 게시하려면 GitHub 작업을 승인해야 합니다.
  • 에서 Azure 포털에서 응용 프로그램 서비스를 선택한 다음 개요 패널에서 pom.xml을 누르십시오.Get publish profile 파일을 다운로드할 것입니다.
  • GitHub 프로젝트에서 .PublishSettings으로 넘어가 Settings > Secrets이라는 새로운 비밀을 만듭니다.이전 azureWebAppPublishProfile 파일의 내용을 이 기밀에 붙여넣습니다.
  • 그런 다음 프로젝트에 다음 GitHub 작업을 추가합니다..PublishSettings이라는 파일을 만들고 다음 내용을 붙여넣습니다.
    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 작업에 대한 간략한 설명입니다.
  • 코드가 .github/workflows/build-and-deploy.yml 지점으로 전송되면 업데이트된 Azure 응용 프로그램 서비스 응용 프로그램을 발표합니다.다른 지점에서 GitHub와 유사한 작업을 수행할 수 있습니다. 프로젝트 개발자나 환경별로 설정할 수 있습니다.
  • 최신 코드를 확인하고 Java 11을 설치합니다.
  • master GitHub 작업을 사용하여 Maven 원형을 캐시합니다. 이것은 구축 시간을 크게 단축시켰기 때문에 사용하는 것을 강력히 권장합니다.
  • 은 Maven을 사용하여 응용 프로그램을 구축하고 테스트합니다.
  • actions/cache GitHub를 사용하여 최종 어플리케이션을 배포합니다.또한 이전 섹션에서 자세히 설명한 azure/webapps-deploy을 사용하여 배포할 수도 있지만 이 GitHub 작업은 코드(Azure Webapp Maven plugin에 특정한 Azure 구성이나 라이브러리가 없음)를 더 잘 풀 수 있고 실행 속도가 더 빠릅니다.
  • 마지막 생각


    우리는 두 가지 목표를 실현했다.
  • 개발자는 pom.xml만 있으면 그들의 Spring Boot 응용 프로그램을 배치할 수 있으며, 심지어는 Azure 응용 프로그램 서비스에 대한 정보를 알 필요가 없다.
  • 운영 엔지니어는 최소한의 설정(MySQL과 응용 프로그램 서비스 실례를 만들고 4개의 환경 변수를 설정해야 함)을 해야 하지만 현재 응용 프로그램은 생산 과정에서 실행할 수 있으며 너무 많은 유지 보수가 필요하지 않습니다.OS 및 JVM은 Microsoft에서 자동으로 패치하고 지원하며 확장성이 포함됩니다.
  • 이러한 목표를 달성하기 위해서는 Spring Boot 응용 프로그램의 코드를 수정할 필요가 없습니다.GitHub 작업을 사용하여 배포하려면 git push 저장소에 숨겨진 파일을 추가하기만 하면 됩니다.
    최종 신청을 자세히 보고 싶다면, my fork of Spring Petclinic is available here.

    좋은 웹페이지 즐겨찾기