使用 Maven 将 Quarkus Web 应用部署到 Azure 应用服务

在本快速入门中,你将使用适用于 Azure 应用服务 Web 应用的 Maven 插件 将 Quarkus 应用程序部署到 Linux上的 Azure 应用服务 。 如果要将应用的依赖项、运行时和配置合并到单个可部署项目中,请通过 Tomcat 和 WAR 文件 选择 Java SE 部署。

如果没有 Azure 订阅,请在开始之前创建一个免费帐户

先决条件

登录到 Azure CLI

让 Maven 插件部署 Quarkus 应用程序的最简单方法是使用 Azure CLI

使用 Azure CLI 登录到 Azure 帐户:

az login

按照说明完成登录过程。

从 MicroProfile Starter 创建示例应用

在本部分中,将创建 Quarkus 应用程序并将其在本地测试。

创建 Java SE 8 基本项目

  1. 打开 Web 浏览器,并导航到 MicroProfile Starter 网站。

    屏幕截图显示了选择了 Quarkus 运行时的 MicroProfile Starter。

  2. 为指示的字段提供以下值:

    字段
    groupId com.microsoft.azure.samples.quarkus
    artifactId quarkus-hello-azure
    MicroProfile 版本 MP 3.2
    Java SE 版本 Java 8
    MicroProfile 运行时 Quarkus
    规范示例 指标,OpenAPI
  3. 选择下载,下载项目。

  4. 使用以下命令解压缩存档文件:

    unzip Quarkus-hello-azure.zip
    

创建 Java SE 11 基本项目

若要创建 Java 11 基本项目,请使用以下命令:

mvn io.quarkus:quarkus-maven-plugin:2.6.1.Final:create \
  -DprojectGroupId=com.microsoft.azure.samples.quarkus \
  -DprojectArtifactId=quarkus-hello-azure \
  -DclassName="com.microsoft.azure.samples.quarkus.App" \
  -Dpath="/hello"

在本地环境中运行应用程序

  1. 使用以下命令将目录更改为已完成的项目:

    cd quarkus-hello-azure/
    
  2. 使用以下 Maven 命令生成并运行项目:

    mvn quarkus:dev
    
  3. 使用 Web 浏览器在本地打开网页应用以进行测试。 例如,如果 curl 可用,则可以使用以下命令:

    对于 Java SE 8 项目:

    curl http://localhost:8080/data/hello
    

    对于 Java SE 11 项目:

    curl http://localhost:8080/hello
    
  4. 应看到以下消息:Hello Worldhello

为 Azure 应用服务配置 Maven 插件

在本部分中,将配置 Quarkus 项目 pom.xml 文件,以便 Maven 可以将应用部署到 Linux 上的 Azure 应用服务。

  1. 在代码编辑器中打开 pom.xml 文件。

  2. pom.xml 文件的 <build> 部分中,在 maven-surefire-plugin 后,在 <plugins> 标记中插入以下 <plugin> 条目。

    <plugin>
      <groupId>com.microsoft.azure</groupId>
      <artifactId>azure-webapp-maven-plugin</artifactId>
      <version>2.13.0</version>
    </plugin>
    
  3. 若要配置部署,请运行以下 Maven 命令:

    mvn azure-webapp:config
    

    出现提示时选择以下选项:

    输入字段 输入/选择值
    选择订阅 输入订阅 ID。
    定义 OS 的值(默认值:Linux): 2. linux
    定义 javaVersion 的值(默认值:Java 8): 2. Java 11
    定义 pricingTier 的值(默认值:P1v2): 3. P1v2
    确认(是/否) y

    此命令会生成类似于以下示例的输出:

    [INFO] Scanning for projects...
    [INFO]
    [INFO] ------< com.microsoft.azure.samples.quarkus:quarkus-hello-azure >-------
    [INFO] Building quarkus-hello-azure 1.0-SNAPSHOT
    [INFO] --------------------------------[ jar ]---------------------------------
    [INFO]
    [INFO] --- azure-webapp-maven-plugin:2.13.0:config (default-cli) @ quarkus-hello-azure ---
    [INFO] Auth type: OAUTH2
    Username: abc@xyz.com
    Available subscriptions:
    *  1: Subscription1(xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx)
       2: Subscription2(yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyy)
    Please choose a subscription [xxx]: 1
    [INFO] Subscription: Subscription1(xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx)
    Define value for OS [Linux]:
      1: Windows
    * 2: Linux
      3: Docker
    Enter your choice: 2
    Define value for javaVersion [Java 8]:
    * 1: Java 8
      2: Java 11
      3: Java 17
    Enter your choice: 2
    Define value for pricingTier [P1v2]:
      1: D1
      2: B3
    * 3: P1v2
      4: P1v3
      5: P2v2
      6: P2v3
      7: P3v2
      8: P3v3
      9: B1
     10: B2
     11: F1
     12: S1
     13: S2
     14: S3
     15: EP3
     16: EP2
     17: EP1
     18: Y1
     19: FC1
    Enter your choice: 3
    Please confirm webapp properties
    Subscription Id : xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx
    AppName : quarkus-hello-azure-1601011883156
    ResourceGroup : quarkus-hello-azure-1601011883156-rg
    Region : centralus
    PricingTier : P1v2
    OS : Linux
    Java : Java 11
    Web server stack: Java SE
    Deploy to slot : false
    Confirm (Y/N) [Y]:
    [INFO] Saving configuration to pom.
    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD SUCCESS
    [INFO] ------------------------------------------------------------------------
    [INFO] Total time:  16.502 s
    [INFO] Finished at: 2020-09-25T14:31:34+09:00
    [INFO] ------------------------------------------------------------------------
    
  4. <appSettings> 部分添加到 PORTWEBSITES_PORTWEBSITES_CONTAINER_START_TIME_LIMIT<configuration> 部分。 azure-webapp-maven-plugin 的 XML 条目应类似于以下示例:

    <plugin>
      <groupId>com.microsoft.azure</groupId>
      <artifactId>azure-webapp-maven-plugin</artifactId>
      <version>2.13.0</version>
      <configuration>
        <schemaVersion>V2</schemaVersion>
        <resourceGroup>microprofile</resourceGroup>
        <appName>quarkus-hello-azure-1591836715762</appName>
        <pricingTier>P1v2</pricingTier>
        <region>centralus</region>
        <runtime>
          <os>linux</os>
          <javaVersion>java 11</javaVersion>
          <webContainer>java SE</webContainer>
        </runtime>
        <appSettings>
          <property>
            <name>PORT</name>
            <value>8080</value>
          </property>
          <property>
            <name>WEBSITES_PORT</name>
            <value>8080</value>
          </property>
          <property>
            <name>WEBSITES_CONTAINER_START_TIME_LIMIT</name>
            <value>600</value>
          </property>
        </appSettings>
        <deployment>
          <resources>
            <resource>
              <directory>${project.basedir}/target</directory>
              <includes>
                <include>*.jar</include>
              </includes>
            </resource>
          </resources>
        </deployment>
      </configuration>
    </plugin>
    
  5. 将以下条目添加到 src/main/resources/application.properties 文件中,以创建 uber-jar,也称为 fat Jar

    quarkus.package.type=uber-jar
    

将应用部署到 Azure

在本文前面部分配置所有设置后,即可将 Web 应用程序部署到 Azure。 为此,请按照以下步骤操作:

  1. 如果对 pom.xml 文件进行了任何更改,请使用以下命令重新生成 JAR 文件:

    mvn clean package
    
  2. 使用以下命令将 Web 应用部署到 Azure:

    mvn azure-webapp:deploy
    

如果部署成功,则会看到以下输出:

[INFO] Successfully deployed the artifact to https://quarkus-hello-azure-1591836715762.azurewebsites.net
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  02:20 min
[INFO] Finished at: 2020-06-11T10:06:51+09:00
[INFO] ------------------------------------------------------------------------

Maven 将 Web 应用程序部署到 Azure。 如果 Web 应用程序或 Web 应用程序计划尚不存在,我们会为你创建一个。 在输出中显示的 URL 上显示 Web 应用程序可能需要几分钟时间。 在网页浏览器中打开网页地址。 应看到以下屏幕:

显示 Quarkus 首页的 Web 浏览器的屏幕截图。

部署 Web 应用程序后,您可以通过 Azure 门户对其进行管理。

您的 Web 应用程序被列入 MicroProfile 资源组。

可以通过在 Web 应用的概述页中选择浏览来访问 Web 应用程序。 验证部署是否成功且正在运行。

检查正在运行的应用服务中的日志流数据

可以使用以下命令查看正在运行的应用程序服务中的日志,或者使用 tail 命令进行查看。 对站点代码中 console.log 的任何调用都会显示在终端中。

az webapp log tail 
    --resource-group microprofile \
    --name quarkus-hello-azure-1601011883156

显示日志流的终端窗口的屏幕截图。

清理资源

不再需要 Azure 资源时,请通过删除资源组来清理部署的资源。 为此,请按照以下步骤操作:

  1. 在 Azure 门户中,从菜单中选择 资源组
  2. 按名称筛选字段中输入 microprofile。 在本教程中创建的资源组应具有此前缀。
  3. 选择本教程中创建的资源组。
  4. 从菜单中选择 删除资源组

后续步骤

若要了解有关 MicroProfile 和 Azure 的详细信息,请继续访问“Azure 上的 MicroProfile”文档中心。

其他资源

有关本文中讨论的各种技术的详细信息,请参阅以下文章: