练习 - 将 Web 应用部署到 Azure 应用服务

已完成

在本单元中,你将 Java Tomcat Web 应用部署到 Azure 应用服务。

Azure 应用服务的 Maven 插件

Microsoft 提供了 Azure 应用服务 Maven 插件,使 Java 开发人员可以更轻松地将应用程序部署到 Azure。 通过使用此插件,你可以轻松地配置应用程序并将其部署到 Azure。 使用以下部分中的步骤配置插件、编译源代码和部署应用。

配置 Azure 应用服务的 Maven 插件

若要为 Azure 应用服务配置 Maven 插件,请使用以下步骤:

  1. 使用以下命令开始配置:

    mvn com.microsoft.azure:azure-webapp-maven-plugin:2.10.0:config
    
  2. 使用命令后,提示中会显示一些问题,使你能够配置各种选项。 根据下表中的信息配置选项和值:

    条目 输入值
    订阅 选择自己的 Azure 订阅。
    定义 OS 的值 Linux
    定义定价层的值 B1
    定义 Java 版本的值 Java 21
    定义运行时堆栈的值 TOMCAT 10.0
    确认(是/否) Y

    配置选项后,以下输出是典型的:

    mvn com.microsoft.azure:azure-webapp-maven-plugin:2.10.0:config
    [INFO] Scanning for projects...
    [INFO]
    [INFO] -------------------< com.example:simple-tomcat-app >--------------------
    [INFO] Building simple-tomcat-app 1.0-SNAPSHOT
    [INFO]   from pom.xml
    [INFO] --------------------------------[ war ]---------------------------------
    [INFO]
    [INFO] --- azure-webapp:2.10.0:config (default-cli) @ simple-tomcat-app ---
    Downloading from central: https://repo.maven.apache.org/maven2/net/minidev/json-smart/maven-metadata.xml
    Downloading from ossrh: https://oss.sonatype.org/content/repositories/snapshots/net/minidev/json-smart/maven-metadata.xml
    Downloading from shibboleth-repo: https://build.shibboleth.net/nexus/content/repositories/releases/net/minidev/json-smart/maven-metadata.xml
    Downloaded from central: https://repo.maven.apache.org/maven2/net/minidev/json-smart/maven-metadata.xml (1.3 kB at 6.3 kB/s)
    Please choose which part to config [Application]:
    * 1: Application
      2: Runtime
      3: DeploymentSlot
    Enter your choice: 1
    Define value for appName [simple-tomcat-app]: tomcatmavendemo
    Define value for resourceGroup [tomcatmavendemo-rg]: MyResourceGroup
    Define value for region [{azure.region}]: centralus
    Define value for pricingTier [B1]:
    *  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: 1
    Please confirm webapp properties
    AppName : tomcatmavendemo
    ResourceGroup : MyResourceGroup
    Region : centralus
    PricingTier : B1
    OS : Linux
    Java Version: 21
    Web server stack: Tomcat 10.1
    Deploy to slot : false
    Confirm (Y/N) [Y]: Y
    [INFO] Saving configuration to pom.
    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD SUCCESS
    [INFO] ------------------------------------------------------------------------
    [INFO] Total time:  01:49 min
    [INFO] Finished at: 2024-11-07T09:54:55-08:00
    [INFO] ------------------------------------------------------------------------
    
  3. pom.xml 文件现在在<plugins>节中包含一个新部分。 如果要更改资源组名称、实例名称或部署位置,请更改或元素中的<resourceGroup><appName><region>值。 以下示例演示典型的 pom.xml 文件:

          <!-- Azure Web App Maven Plugin -->
    <plugin>
        <groupId>com.microsoft.azure</groupId>
        <artifactId>azure-webapp-maven-plugin</artifactId>
        <version>2.10.0</version>
        <configuration>
            <resourceGroup>MyResourceGroup</resourceGroup>
            <appName>tomcatmavendemo</appName>
            <region>centralus</region>
            <pricingTier>B1</pricingTier>
            <runtime>
                <os>linux</os>
                <javaVersion>21</javaVersion>
                <webContainer>Tomcat 10.1</webContainer>
            </runtime>
            <deployment>
                <resources>
                    <resource>
                        <directory>${project.build.directory}</directory>
                        <includes>
                            <include>*.war</include>
                        </includes>
                    </resource>
                </resources>
            </deployment>
        </configuration>
    </plugin>
    

编译并部署到 Azure 应用服务

完成配置部署到 Azure 应用服务的设置后,请使用以下步骤编译源代码并将应用部署到 Azure 应用服务:

  1. 使用以下命令再次编译源代码:

    mvn clean package
    
  2. 编译源代码后,使用以下命令部署应用程序:

    mvn azure-webapp:deploy
    

部署完成后,以下输出是典型的:

[INFO] Successfully deployed the artifact to https://tomcatmavendemo.azurewebsites.net
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  06:55 min
[INFO] Finished at: 2024-11-07T10:05:19-08:00
[INFO] ------------------------------------------------------------------------

可以看到,该输出提供已部署应用程序的公共 URL: Successfully deployed the artifact to https://tomcatmavendemo.azurewebsites.net

导航到应用程序时,它应类似于以下屏幕截图:

显示浏览器中已部署的 Web 应用的屏幕截图。

确认日志流

若要访问日志流,请使用以下命令:

az webapp log tail \
    --resource-group <your-resource-group> \
    --name <your-app-name>

以下输出是典型的:

2024-11-07T18:14:37  Welcome, you are now connected to log-streaming service.
Starting Log Tail -n 10 of existing logs ----
/appsvctmp/volatile/logs/runtime/container.log
2024-11-07T18:06:05.3874260Z  java.base/java.lang.Thread.run(Thread.java:1583)
2024-11-07T18:06:05.5635356Z Nov 07, 2024 6:06:05 PM org.apache.coyote.AbstractProtocol stop
2024-11-07T18:06:05.5636042Z INFO: Stopping ProtocolHandler ["http-nio-127.0.0.1-80"]
2024-11-07T18:06:05.6020767Z Nov 07, 2024 6:06:05 PM org.apache.coyote.AbstractProtocol stop
2024-11-07T18:06:05.6021438Z INFO: Stopping ProtocolHandler ["http-nio-169.254.129.3-80"]
2024-11-07T18:06:05.6423756Z Nov 07, 2024 6:06:05 PM org.apache.coyote.AbstractProtocol destroy
2024-11-07T18:06:05.6424403Z INFO: Destroying ProtocolHandler ["http-nio-127.0.0.1-80"]
2024-11-07T18:06:05.6893602Z Nov 07, 2024 6:06:05 PM org.apache.coyote.AbstractProtocol destroy
2024-11-07T18:06:05.6894311Z INFO: Destroying ProtocolHandler ["http-nio-169.254.129.3-80"]
2024-11-07T18:06:05.7849816Z Done processing signal SIGTERM. Exiting now!
Ending Log Tail of existing logs ---
Starting Live Log Stream ---

练习摘要

在本单元中,你学习了如何使用 Maven 创建 Tomcat Web 应用。 你还了解了如何创建 servlet 及其工作原理。 接下来,使用 Tomcat 在本地部署 Web 应用。 最后,已部署到 Azure 应用服务,供世界上任何人访问。