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

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

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

先决条件

登录 Azure CLI

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

通过使用 Azure CLI 登录到 Azure 帐户:

az login

按照说明完成登录过程。

从 MicroProfile Starter 创建示例应用

在本部分中,你将创建一个 Quarkus 应用程序并在本地测试它。

创建 Java SE 8 基本项目

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

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

  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 浏览器在本地浏览到 Web 应用程序,通过这种方式对其进行测试。 例如,如果有可用的 Curl,可以使用以下命令:

    对于 Java SE 8 项目:

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

    对于 Java SE 11 项目:

    curl 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.5.0</version>
    </plugin>
    
  3. 若要配置部署,请运行以下 Maven 命令:

    mvn azure-webapp:config
    

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

    输入字段 输入/选择值
    选择订阅 输入订阅 ID。
    定义 OS 的值(默认值:Linux): 2. linux
    定义 javaVersion 的值(默认值:Java 8): 2. Java 11
    定义 pricingTier 的值(默认值:P1v2): 9. 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.5.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: B1
       2: B2
       3: B3
       4: D1
       5: EP1
       6: EP2
       7: EP3
       8: F1
    *  9: P1v2
      10: P1v3
      11: P2v2
      12: P2v3
      13: P3v2
      14: P3v3
      15: S1
      16: S2
      17: S3
      18: Y1
    Enter your choice: 9
    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. 将节添加到 <configuration> WEBSITES_PORT/> <appSettings> 的节PORTWEBSITES_CONTAINER_START_TIME_LIMIT。 你的 azure-webapp-maven-plugin XML 条目将类似于以下示例:

       <plugin>
         <groupId>com.microsoft.azure</groupId>
         <artifactId>azure-webapp-maven-plugin</artifactId>
         <version>2.5.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 (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 应用程序。 在 Web 浏览器中导航到该 URL。 应该会看到以下屏幕。

Web 浏览器的屏幕截图,其中显示了 Quarkus 的首页。

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

Web 应用程序将列在 microprofile 资源组中

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

从正在运行的App 服务确认日志流

你可以查看(或“跟踪”)来自正在运行的应用服务的日志。 在站点代码中对 console.log 的任何调用都将显示在终端中。

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

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

清理资源

不再需要 Azure 资源时,请通过删除资源组来清理部署的资源。

  • 在 Azure 门户上的左侧菜单中选择“资源组” 。
  • 在“按名称筛选”字段中输入 microprofile,在本教程中创建的资源组应具有此前缀
  • 选择在本教程中创建的资源组。
  • 在顶部菜单中选择“删除资源组”。

后续步骤

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

其他资源

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