将 Java JBoss EAP 应用部署到Azure App 服务

本文介绍如何使用 Microsoft Entra 帐户登录的 JBoss EAP 应用部署到Azure App 服务。

本文假定你仅使用“ 本地 运行”选项卡完成了以下文章之一,现在想要部署到 Azure。 这些说明与以下文章中的 “部署到 Azure ”选项卡中的说明相同:

先决条件

配置 Maven 插件

部署到 Azure 应用服务的过程会自动使用 Azure CLI 中的 Azure 凭据。 如果未在本地安装 Azure CLI,则 Maven 插件会使用 OAuth 或设备登录来进行身份验证。 有关详细信息,请参阅 Maven 插件的身份验证

使用以下步骤配置插件:

  1. 运行接下来显示的 Maven 命令来配置部署。 此命令将帮助你设置应用服务操作系统、Java 版本和 Tomcat 版本。

    mvn com.microsoft.azure:azure-webapp-maven-plugin:2.12.0:config
    
  2. 对于 “创建新的运行配置”,请按 Y,然后按 Enter

  3. 对于 OS 的“定义”值,请按 2 表示 Linux,然后按 Enter

  4. 对于 javaVersion 的定义值,请按 2 for Java 11,然后按 Enter

  5. 对于 WebContainer 的 Define 值,请按 1 表示 JBosseap7,然后按 Enter

  6. 对于 “定义 pricingTier”值,请按 Enter 选择默认 的 P1v3 层。

  7. 对于 “确认”,请按 Y,然后按 Enter

以下示例显示了部署过程的输出:

Please confirm webapp properties
AppName : msal4j-servlet-auth-1707220080695
ResourceGroup : msal4j-servlet-auth-1707220080695-rg
Region : centralus
PricingTier : P1v3
OS : Linux
Java Version: Java 11
Web server stack: JBosseap 7
Deploy to slot : false
Confirm (Y/N) [Y]:
[INFO] Saving configuration to pom.
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  26.196 s
[INFO] Finished at: 2024-02-06T11:48:16Z
[INFO] ------------------------------------------------------------------------

确认选择后,该插件会将插件配置和所需的设置添加到项目的pom.xml文件中,以将应用配置为在Azure App 服务中运行。

pom.xml文件的相关部分应类似于以下示例:

<build>
    <plugins>
        <plugin>
            <groupId>com.microsoft.azure</groupId>
            <artifactId>>azure-webapp-maven-plugin</artifactId>
            <version>x.xx.x</version>
            <configuration>
                <schemaVersion>v2</schemaVersion>
                <resourceGroup>your-resourcegroup-name</resourceGroup>
                <appName>your-app-name</appName>
            ...
            </configuration>
        </plugin>
    </plugins>
</build>

可以直接在pom.xml中修改App 服务的配置。 下表列出了一些常见配置:

properties 必选 说明 版本
schemaVersion false 配置架构的版本。 支持的值为 v1v2 1.5.2
subscriptionId false 订阅的 ID。 0.1.0+
resourceGroup 应用的 Azure 资源组。 0.1.0+
appName 应用的名称。 0.1.0+
region false 托管应用的区域。 默认值为 centralus。 有关有效区域,请参阅 支持的区域 0.1.0+
pricingTier false 应用的定价层。 生产工作负荷的默认值为 P1v2 。 Java 开发和测试的建议最小值是 B2。 有关详细信息,请参阅应用服务定价 0.1.0+
runtime false 运行时环境配置。 有关详细信息,请参阅配置详细信息 0.1.0+
deployment false 部署配置。 有关详细信息,请参阅配置详细信息 0.1.0+

有关配置的完整列表,请参阅插件参考文档。 所有 Azure Maven 插件共享一组常见的配置。 有关这些配置,请参阅 常见配置。 有关特定于Azure App 服务的配置,请参阅 Azure 应用:配置详细信息

请务必保存保留这些 appName 值, resourceGroup 供以后使用。

准备应用进行部署

将应用程序部署到App 服务时,重定向 URL 将更改为已部署的应用实例的重定向 URL。 使用以下步骤更改属性文件中的这些设置:

  1. 导航到应用的 authentication.properties 文件并更改已部署应用的域名的值 app.homePage ,如以下示例所示。 例如,如果在example-domain上一步中选择了应用名称,则现在必须用于https://example-domain.azurewebsites.netapp.homePage该值。 请确保也已将协议从 http 此更改为 https

    # app.homePage is by default set to dev server address and app context path on the server
    # for apps deployed to azure, use https://your-sub-domain.azurewebsites.net
    app.homePage=https://<your-app-name>.azurewebsites.net
    
  2. 保存此文件后,使用以下命令重新生成应用:

    mvn clean package
    

更新 Microsoft Entra ID 应用注册

由于重定向 URI 更改为已部署的应用Azure App 服务,因此还需要更改 Microsoft Entra ID 应用注册中的重定向 URI。 若要进行此更改,请使用以下步骤:

  1. 导航到面向开发人员的 Microsoft 标识平台应用注册页

  2. 使用搜索框搜索应用注册 ,例如 java-servlet-webapp-authentication

  3. 通过选择应用名称打开应用注册。

  4. 从菜单中选择“身份验证”。

  5. “Web - 重定向 URI”部分中,选择“添加 URI”。

  6. 填写应用的 URI,追加 /auth/redirect - 例如。 https://<your-app-name>.azurewebsites.net/auth/redirect

  7. 选择“保存”。

部署应用

现在可以将应用部署到Azure App 服务。 使用以下命令确保登录到 Azure 环境以执行部署:

az login

在pom.xml文件中准备好所有配置后,现在可以使用以下命令将 Java 应用部署到 Azure:

mvn package azure-webapp:deploy

部署完成后,应用程序已 http://<your-app-name>.azurewebsites.net/准备就绪。 使用本地 Web 浏览器打开 URL,此时应会看到应用程序的起始页 msal4j-servlet-auth

删除机密值

应用程序的 authentication.properties 文件当前在参数中aad.secret保存客户端机密的值。 最好将此值保存在此文件中。 如果将其提交到 Git 存储库,则也可能面临风险。

作为一个安全额外步骤,可以将此值存储在 Azure 密钥库中,并使用密钥库引用在应用程序中可用。

使用以下步骤将值aad.secret移动到密钥库并在代码中使用:

  1. 使用以下命令创建 Azure 密钥库 实例:

    export RESOURCE_GROUP=<your-resource-group-name>
    export KEY_VAULT=<your-key-vault-name>
    az keyvault create \
        --resource-group $RESOURCE_GROUP \
        --name $KEY_VAULT
    
  2. 使用以下命令将密钥保管库的 aad.secret 机密值添加为新机密:

    az keyvault secret set \
        --vault-name $KEY_VAULT \
        --name "AADSECRET" \
        --value "<the-value-of-your-client-secret>"
    
  3. 现在,需要授予应用对密钥保管库的访问权限。 若要执行此任务,请先使用以下命令为应用创建新的标识:

    export WEB_APP_NAME=<your-web-app-name>
    az webapp identity assign \
        --resource-group $RESOURCE_GROUP \
        --name $WEB_APP_NAME
    
  4. 使用以下命令为密钥库中的机密提供此标识getlist权限:

    export IDENTITY=$(az webapp identity show \
        --resource-group $RESOURCE_GROUP \
        --name $WEB_APP_NAME \
        --query principalId \
        --output tsv)
    az keyvault set-policy \
        --resource-group $RESOURCE_GROUP \
        --name $KEY_VAULT \
        --secret-permissions get list \
        --object-id $IDENTITY
    
  5. 使用以下命令在应用中创建应用程序设置,该设置使用密钥保管库中对密钥保管库中的机密的引用。 此设置将机密的值作为环境变量提供给应用。

    az webapp config appsettings set \
        --resource-group $RESOURCE_GROUP \
        --name $WEB_APP_NAME \
        --settings AADSECRET='@Microsoft.KeyVault(VaultName=$KEY_VAULT;SecretName=AADSECRET)'
    
  6. 使用以下代码从环境变量加载此值。 在 \src\main\java\com\microsoft\azuresamples\msal4j\helpers\Config.java 文件中,第 41 行将当前语句更改为以下行:

    public static final String SECRET = System.getenv("AADSECRET");
    
  7. 现在可以从 authentication.properties 文件中删除aad.secret密钥和值。

  8. 使用以下命令重新生成代码:

    mvn clean package
    
  9. 使用以下命令重新部署应用程序:

    mvn package azure-webapp:deploy
    

部署现已完成。

详细信息