共用方式為


教學課程:手動在 Azure 虛擬機器 上安裝 JBoss EAP

本教學課程說明在 Red Hat Enterprise Linux 上安裝 Red Hat JBoss Enterprise Application Platform (EAP) 並在 Azure 虛擬機器 (VM) 上設定叢集的步驟。

在本教學課程中,您將瞭解如何執行下列工作:

  • 建立自定義虛擬網路,並在網路中建立 VM。
  • 手動使用命令行在 VM 上安裝所需的 JDK 和 Red Hat JBoss EAP。
  • 使用命令行介面 (CLI) 在網域模式中設定 Red Hat JBoss EAP 叢集。
  • 在叢集中設定 PostgreSQL 數據源連線。
  • 在叢集中部署和執行範例 Java EE 應用程式。
  • 透過 Azure 應用程式閘道 將應用程式公開至公用因特網。
  • 驗證成功的設定。

如果您偏好代表 GNU/Linux VM 執行上述所有步驟的完全自動化解決方案,請直接從 Azure 入口網站 參閱快速入門:在 Azure 虛擬機器 (VM) 上部署 JBoss EAP 叢集。

若您有興趣與開發 Azure 上 JBoss EAP 解決方案的工程團隊緊密合作以進行移轉,請填寫這份簡短的 JBoss EAP 移轉問卷,並附上您的連絡資訊。 由專案經理、結構設計師和工程師組成的小組會立即連絡您,以展開緊密合作。

注意

本文包含「從屬」一詞的參考,Microsoft 已不再使用該字詞。 從軟體中移除該字詞時,我們也會將其從本文中移除。

必要條件

  • Azure 訂用帳戶。 如果您沒有 Azure 訂用帳戶,請在開始前建立免費帳戶

  • 安裝 Azure CLI 2.51.0 版 或更高版本以執行 Azure CLI 命令。

    • 出現提示時,請在第一次使用時安裝 Azure CLI 擴充功能。 如需延伸模組詳細資訊,請參閱使用 Azure CLI 延伸模組
    • 執行 az version 以尋找已安裝的版本和相依程式庫。 若要升級至最新版本,請執行 az upgrade
  • 請確定您擁有必要的 Red Hat 授權。 您必須具備 Red Hat 訂用帳戶管理 (RHSM) Red Hat JBoss EAP 的 Red Hat 帳戶。 此權利可讓完全自動化的解決方案(在快速入門:在 Azure 虛擬機器 (VM)上部署 JBoss EAP 叢集),安裝經 Red Hat 測試和認證的 JBoss EAP 版本。

    注意

    如果您沒有 EAP 權利,您可以透過個人版 Red Hat 開發人員訂用帳戶註冊免費的開發人員訂用帳戶。 將帳戶詳細數據儲存在一邊,在下一節中做為 RHSM 用戶名稱和 RHSM 密碼

  • 如果您已註冊,或在完成註冊之後,您可以使用下列步驟找出必要的認證(集區標識符)。 這些 集區標識碼 也會作為後續步驟中的 RHSM 集區標識碼與 EAP 權利

    1. 登入您的 Red Hat 帳戶

    2. 第一次登入時,系統會提示您完成配置檔。 根據您的使用量,選取 [個人 ] 或 [公司 帳戶 類型],如下列螢幕快照所示:

      Red Hat 帳戶視窗的螢幕快照,其中顯示已選取 [個人] 的 [帳戶類型] 選項。

    3. 開啟 個人版的 Red Hat 開發人員訂用帳戶。 此連結會帶您前往帳戶中適用於適當 SKU 的所有訂用帳戶。

    4. 在 [所有已購買的訂閱] 數據表底下的控件數據列中,選取 [作用中]。

    5. 選取 [結束日期] 的可排序數據行標頭,直到未來最遠的值顯示為第一個數據列為止。

    6. 選取第一個數據列。 然後,從集區標識符複製並儲存下列主要集區的值。

  • Java 開發套件 (JDK) 第 11 版。 在本指南中,我們建議 使用 Red Hat Build of OpenJDK。 請確定您已在命令執行所在的殼層中正確設定 JAVA_HOME 環境變數。

  • Git;用來 git --version 測試是否 git 正常運作。 本教學課程已經過 2.25.1 版的測試。

  • Maven;用來 mvn -version 測試是否 mvn 正常運作。 本教學課程已經過 3.6.3 版的測試。

準備環境

在本節中,您會設定安裝 JDK、Red Hat JBoss EAP 和 PostgreSQL Java Database Connectivity (JDBC) 驅動程式的基礎結構。

假設

本教學課程會在網域模式中設定 Red Hat JBoss EAP 叢集,並在總共三部 VM 上設定兩部受管理伺服器。 若要設定叢集,您必須建立下列三個 Azure VM:

  • 系統管理 VM (VM 名稱 adminVM) 會以域控制器身分執行。
  • 兩個受控 VM (VM 名稱和 mspVM1 mspVM2) 會以主機控制器身分執行。

登入 Azure

如果您尚未登入,請使用 az login 命令登入您的 Azure 訂用帳戶,並遵循螢幕上的指示。

az login

注意

如果您有多個與 Azure 認證相關聯的 Azure 租使用者,您必須指定您要登入的租使用者。 您可以使用 選項來執行此動作 --tenant 。 例如: az login --tenant contoso.onmicrosoft.com

建立資源群組

使用 az group create 來建立資源群組。 資源群組名稱在訂用帳戶全域中必須是唯一的。 基於這個理由,請考慮將一些唯一標識符前面加上您建立的任何名稱,該名稱必須是唯一的。 實用的技巧是使用您的首字母,後面接著使用 mmdd 格式的今天日期。 此範例會在位置中westus建立名為 $RESOURCE_GROUP_NAME 的資源群組:

export SUBSCRIPTION=$(az account show --query id --output tsv)
export SUFFIX=$(date +%s)
export RESOURCE_GROUP_NAME=rg-$SUFFIX
echo "Resource group name: $RESOURCE_GROUP_NAME"
az group create \
    --name $RESOURCE_GROUP_NAME \
    --location westus

建立虛擬網路

組成 Red Hat JBoss EAP 叢集的資源必須使用虛擬網路彼此通訊,以及公用因特網。 如需規劃虛擬網路的完整指南,請參閱 Azure 指南規劃虛擬網路的 雲端採用架構。 如需詳細資訊,請參閱 Azure 虛擬網絡 常見問題

本節中的範例會建立具有位址空間 192.168.0.0/16 的虛擬網路,並建立用於 VM 的子網。

首先,使用 az network vnet create 建立虛擬網路。 下列範例會建立名為 myVNet的網路:

az network vnet create \
    --resource-group $RESOURCE_GROUP_NAME \
    --name myVNet \
    --address-prefixes 192.168.0.0/24

使用 az network vnet subnet create 建立 Red Hat JBoss EAP 叢集的子網。 下列範例會建立名為 mySubnet的子網:

az network vnet subnet create \
    --resource-group $RESOURCE_GROUP_NAME \
    --name mySubnet \
    --vnet-name myVNet \
    --address-prefixes 192.168.0.0/25

使用 az network vnet subnet create 建立 應用程式閘道 的子網。 下列範例會建立名為 jbossVMGatewaySubnet的子網:

az network vnet subnet create \
    --resource-group $RESOURCE_GROUP_NAME \
    --name jbossVMGatewaySubnet \
    --vnet-name myVNet \
    --address-prefixes 192.168.0.128/25

建立網路安全組,並將子網指派給它

建立具有公用IP的VM之前,請先建立網路安全組 (NSG),以保護先前建立的虛擬網路和子網。

使用 az network nsg create 建立網路安全組。 下列範例會建立名為 mynsg 的網路安全性群組:

az network nsg create \
    --resource-group $RESOURCE_GROUP_NAME \
    --name mynsg

使用 az network nsg rule create 建立網路安全組規則。 下列範例會建立名為 ALLOW_APPGWALLOW_HTTP_ACCESS的網路安全組規則。 這些規則可讓應用程式閘道在 Red Hat JBoss EAP 所使用的 HTTP 連接埠上接受輸入流量:

az network nsg rule create \
    --resource-group $RESOURCE_GROUP_NAME \
    --nsg-name mynsg \
    --name ALLOW_APPGW \
    --protocol Tcp \
    --destination-port-ranges 65200-65535 \
    --source-address-prefix GatewayManager \
    --destination-address-prefix '*' \
    --access Allow \
    --priority 500 \
    --direction Inbound

az network nsg rule create \
    --resource-group $RESOURCE_GROUP_NAME \
    --nsg-name mynsg \
    --name ALLOW_HTTP_ACCESS \
    --protocol Tcp \
    --destination-port-ranges 22 80 443 9990 8080 \
    --source-address-prefix Internet \
    --destination-address-prefix '*' \
    --access Allow \
    --priority 510 \
    --direction Inbound

使用 az network vnet subnet update 將先前建立的子網關聯至此網路安全組,如下列範例所示:

az network vnet subnet update \
    --resource-group $RESOURCE_GROUP_NAME \
    --vnet-name myVNet \
    --name mySubnet \
    --network-security-group mynsg

az network vnet subnet update \
    --resource-group $RESOURCE_GROUP_NAME \
    --vnet-name myVNet \
    --name jbossVMGatewaySubnet \
    --network-security-group mynsg

為系統管理員建立 Red Hat Enterprise Linux 計算機

產生 SSH 金鑰

使用下列命令來產生的 adminVMSSH 金鑰:

ssh-keygen -t rsa -b 4096 -f ~/.ssh/jbosseapvm
ssh-add ~/.ssh/jbosseapvm

建立系統管理 VM

您用來建立 VM 的 Marketplace 映像為 RedHat:rhel-raw:86-gen2:latest。 如需其他映像,請參閱 Azure 中提供的 Red Hat Enterprise Linux (RHEL) 映像。

注意

您可以使用 az vm image list 命令查詢 Red Hat 所提供的所有可用 Red Hat Enterprise Linux 映像,例如:az vm image list --offer RHEL --publisher RedHat --output table --all。 如需詳細資訊,請參閱 Red Hat Enterprise Linux 映像概觀

如果您使用不同的映像,您可能需要安裝額外的連結庫,才能啟用本指南中使用的基礎結構。

建立基本 VM、在上面安裝所有必要的工具、建立快照集,然後根據快照集建立複本。

使用 az vm create 建立 VM。 您會在此 VM 上執行系統管理伺服器。

下列範例會使用 TLS/SSL 驗證來建立 Azure 受控識別和 Red Hat Enterprise Linux VM。

az identity create \
    --name "passwordless-managed-identity" \
    --resource-group $RESOURCE_GROUP_NAME \
    --location westus

az vm create \
    --resource-group $RESOURCE_GROUP_NAME \
    --name adminVM \
    --image RedHat:rhel-raw:86-gen2:latest \
    --assign-identity "/subscriptions/$SUBSCRIPTION/resourceGroups/$RESOURCE_GROUP_NAME/providers/Microsoft.ManagedIdentity/userAssignedIdentities/passwordless-managed-identity" \
    --size Standard_DS1_v2  \
    --admin-username azureuser \
    --ssh-key-values ~/.ssh/jbosseapvm.pub \
    --public-ip-sku Standard \
    --nsg mynsg \
    --vnet-name myVnet \
    --subnet mySubnet

安裝 Red Hat JBoss EAP

使用下列步驟來安裝:

  1. 使用下列指令取得 的 adminVM公用IP:

    export ADMIN_VM_PUBLIC_IP=$(az vm show \
        --resource-group $RESOURCE_GROUP_NAME \
        --name adminVM \
        --show-details \
        --query publicIps | tr -d '"')
    
  2. 使用下列命令開啟終端機與 SSH 至 adminVM

    ssh -i ~/.ssh/jbosseapvm azureuser@$ADMIN_VM_PUBLIC_IP
    
  3. 使用下列命令設定埠的防火牆:

    sudo firewall-cmd --zone=public --add-port={9999/tcp,8443/tcp,8009/tcp,8080/tcp,9990/tcp,9993/tcp,45700/tcp,7600/tcp} --permanent
    sudo firewall-cmd --reload
    sudo iptables-save
    

    您應該會在前兩個命令之後看到這個字 success 。 您應該會在第三個命令之後看到類似下列範例的輸出:

    # Generated by iptables-save v1.8.4 on Wed Mar 29 22:39:23 2023
    *filter
    :INPUT ACCEPT [20:3546]
    :FORWARD ACCEPT [0:0]
    :OUTPUT ACCEPT [24:5446]
    COMMIT
    # Completed on Wed Mar 29 22:39:23 2023
    # Generated by iptables-save v1.8.4 on Wed Mar 29 22:39:23 2023
    *security
    :INPUT ACCEPT [19:3506]
    :FORWARD ACCEPT [0:0]
    :OUTPUT ACCEPT [5:492]
    -A OUTPUT -d 168.63.129.16/32 -p tcp -m tcp --dport 53 -j ACCEPT
    -A OUTPUT -d 168.63.129.16/32 -p tcp -m tcp --dport 53 -j ACCEPT
    -A OUTPUT -d 168.63.129.16/32 -p tcp -m owner --uid-owner 0 -j ACCEPT
    -A OUTPUT -d 168.63.129.16/32 -p tcp -m conntrack --ctstate INVALID,NEW -j DROP
    COMMIT
    # Completed on Wed Mar 29 22:39:23 2023
    # Generated by iptables-save v1.8.4 on Wed Mar 29 22:39:23 2023
    *raw
    :PREROUTING ACCEPT [20:3546]
    :OUTPUT ACCEPT [24:5446]
    COMMIT
    # Completed on Wed Mar 29 22:39:23 2023
    # Generated by iptables-save v1.8.4 on Wed Mar 29 22:39:23 2023
    *mangle
    :PREROUTING ACCEPT [20:3546]
    :INPUT ACCEPT [20:3546]
    :FORWARD ACCEPT [0:0]
    :OUTPUT ACCEPT [24:5446]
    :POSTROUTING ACCEPT [24:5446]
    COMMIT
    # Completed on Wed Mar 29 22:39:23 2023
    # Generated by iptables-save v1.8.4 on Wed Mar 29 22:39:23 2023
    *nat
    :PREROUTING ACCEPT [1:40]
    :INPUT ACCEPT [0:0]
    :POSTROUTING ACCEPT [4:240]
    :OUTPUT ACCEPT [4:240]
    COMMIT
    # Completed on Wed Mar 29 22:39:23 2023
    

注意

RHSM_USER RHSM_PASSWORD 值必須安裝 Red Hat JBoss EAP。 建議您使用具有有限許可權的服務帳戶來存取 Red Hat 客戶入口網站。

  1. 使用下列命令,將系統管理員主機註冊到您的 Red Hat 訂用帳戶管理 (RHSM) 帳戶:

    export RHSM_USER=<your-rhsm-username>
    export RHSM_PASSWORD='<your-rhsm-password>'
    export EAP_POOL=<your-rhsm-pool-ID>
    
    sudo subscription-manager register --username ${RHSM_USER} --password ${RHSM_PASSWORD} --force
    

    您應該會看到類似下列範例的結果:

    Registering to: subscription.rhsm.redhat.com:443/subscription
    The system has been registered with ID: redacted
    The registered system name is: adminVM
    
  2. 使用下列命令將系統管理員主機附加至 Red Hat JBoss EAP 集區:

    sudo subscription-manager attach --pool=${EAP_POOL}
    

    注意

    如果您使用簡單內容存取模式,則會忽略此命令。

  3. 使用下列命令來安裝 Red Hat JBoss EAP :

    sudo subscription-manager repos --enable=jb-eap-7.4-for-rhel-8-x86_64-rpms
    sudo yum update -y --disablerepo='*' --enablerepo='*microsoft*'
    sudo yum groupinstall -y jboss-eap7
    

針對第二和第三個命令,您應該會看到許多輸出行,結尾為 Complete!

  1. 使用下列命令來設定權限與網路組態:

    sudo sed -i 's/PermitRootLogin yes/PermitRootLogin no/g' /etc/ssh/sshd_config
    echo 'AllowTcpForwarding no' | sudo tee -a /etc/ssh/sshd_config
    sudo systemctl restart sshd
    
  2. 使用下列命令來設定環境變數:

    echo 'export EAP_RPM_CONF_DOMAIN="/etc/opt/rh/eap7/wildfly/eap7-domain.conf"' >> ~/.bash_profile
    echo 'export EAP_HOME="/opt/rh/eap7/root/usr/share"' >> ~/.bash_profile
    source ~/.bash_profile
    sudo touch /etc/profile.d/eap_env.sh
    echo 'export EAP_HOME="/opt/rh/eap7/root/usr/share"' | sudo tee -a /etc/profile.d/eap_env.sh
    
  3. 輸入 exit 以結束 SSH 連線。

建立受管理伺服器的機器

您已在上 adminVM安裝 Red Hat JBoss EAP,其會以域控制器伺服器的形式執行。 您仍然需要準備機器以執行兩部主機控制器伺服器。 接下來,您會建立的 adminVM 快照集,併為兩個受控分機 mspVM1mspVM2準備機器。

本節介紹使用 快照 adminVM集準備機器的方法。 返回已登入 Azure CLI 的終端機,然後使用下列步驟:

  1. 使用下列命令來停止 adminVM

    az vm stop --resource-group $RESOURCE_GROUP_NAME --name adminVM
    
  2. 使用 az snapshot create 來擷取 OS 磁碟的 adminVM 快照集,如下列範例所示:

    export ADMIN_OS_DISK_ID=$(az vm show \
        --resource-group $RESOURCE_GROUP_NAME \
        --name adminVM \
        --query storageProfile.osDisk.managedDisk.id \
        --output tsv)
    az snapshot create \
        --resource-group $RESOURCE_GROUP_NAME \
        --name myAdminOSDiskSnapshot \
        --source ${ADMIN_OS_DISK_ID}
    
  3. 使用下列指令啟動 adminVM

    az vm start --resource-group $RESOURCE_GROUP_NAME --name adminVM
    
  4. 使用下列步驟來建立 mspVM1

    1. 首先,使用 az disk create 建立 的mspVM1受控磁碟:

      #Get the snapshot ID
      export SNAPSHOT_ID=$(az snapshot show \
          --name myAdminOSDiskSnapshot \
          --resource-group $RESOURCE_GROUP_NAME \
          --query '[id]' \
          --output tsv)
      
      #Create a new Managed Disks using the snapshot Id
      #Note that managed disk is created in the same location as the snapshot
      az disk create \
          --resource-group $RESOURCE_GROUP_NAME \
          --name mspVM1_OsDisk_1 \
          --source ${SNAPSHOT_ID}
      
    2. 接下來,使用下列命令來建立 VM mspVM1,並連結 OS 磁碟 mspVM1_OsDisk_1

      #Get the resource Id of the managed disk
      export MSPVM1_DISK_ID=$(az disk show \
          --name mspVM1_OsDisk_1 \
          --resource-group $RESOURCE_GROUP_NAME \
          --query '[id]' \
          --output tsv)
      
      #Create VM by attaching existing managed disks as OS
      az vm create \
          --resource-group $RESOURCE_GROUP_NAME \
          --name mspVM1 \
          --assign-identity "/subscriptions/$SUBSCRIPTION/resourceGroups/$RESOURCE_GROUP_NAME/providers/Microsoft.ManagedIdentity/userAssignedIdentities/passwordless-managed-identity" \
          --attach-os-disk ${MSPVM1_DISK_ID} \
          --os-type linux \
          --public-ip-sku Standard \
          --nsg mynsg \
          --vnet-name myVnet \
          --subnet mySubnet
      
    3. 您已使用已安裝 Red Hat JBoss EAP 所建立 mspVM1 。 由於 VM 是從 OS 磁碟的 adminVM 快照集建立,因此這兩個 VM 具有相同的主機名。 使用 az vm run-command invoke 將主機名變更為 值 mspVM1

      az vm run-command invoke \
          --resource-group $RESOURCE_GROUP_NAME \
          --name mspVM1 \
          --command-id RunShellScript \
          --scripts "sudo hostnamectl set-hostname mspVM1"
      

      當命令順利完成時,您會看到類似下列範例的輸出:

      {
          "value": [
              {
              "code": "ProvisioningState/succeeded",
              "displayStatus": "Provisioning succeeded",
              "level": "Info",
              "message": "Enable succeeded: \n[stdout]\n\n[stderr]\n",
              "time": null
              }
          ]
      }
      
  5. 使用相同的指令來建立 mspVM2

    #Create a new Managed Disks for mspVM2
    az disk create \
        --resource-group $RESOURCE_GROUP_NAME \
        --name mspVM2_OsDisk_1 \
        --source ${SNAPSHOT_ID}
    
    #Get the resource Id of the managed disk
    export MSPVM2_DISK_ID=$(az disk show \
        --name mspVM2_OsDisk_1 \
        --resource-group $RESOURCE_GROUP_NAME \
        --query '[id]' \
        --output tsv)
    
    #Create VM by attaching existing managed disks as OS
    az vm create \
        --resource-group $RESOURCE_GROUP_NAME \
        --name mspVM2 \
        --assign-identity "/subscriptions/$SUBSCRIPTION/resourceGroups/$RESOURCE_GROUP_NAME/providers/Microsoft.ManagedIdentity/userAssignedIdentities/passwordless-managed-identity" \
        --attach-os-disk ${MSPVM2_DISK_ID} \
        --os-type linux \
        --public-ip-sku Standard \
        --nsg mynsg \
        --vnet-name myVnet \
        --subnet mySubnet
    
    #Set hostname
    az vm run-command invoke \
        --resource-group $RESOURCE_GROUP_NAME \
        --name mspVM2 \
        --command-id RunShellScript \
        --scripts "sudo hostnamectl set-hostname mspVM2"
    

使用下列命令來取得並顯示您在後續章節中使用的私人 IP 位址:

export ADMINVM_NIC_ID=$(az vm show \
    --resource-group ${RESOURCE_GROUP_NAME} \
    --name adminVM \
    --query networkProfile.networkInterfaces'[0]'.id \
    --output tsv)
export ADMINVM_IP=$(az network nic show \
    --ids ${ADMINVM_NIC_ID} \
    --query ipConfigurations'[0]'.privateIPAddress \
    --output tsv)
export MSPVM1_NIC_ID=$(az vm show \
    --resource-group ${RESOURCE_GROUP_NAME} \
    --name mspVM1 \
    --query networkProfile.networkInterfaces'[0]'.id \
    --output tsv)
export MSPVM1_IP=$(az network nic show \
    --ids ${MSPVM1_NIC_ID} \
    --query ipConfigurations'[0]'.privateIPAddress \
    --output tsv)
export MSPVM2_NIC_ID=$(az vm show \
    --resource-group ${RESOURCE_GROUP_NAME} \
    --name mspVM2 \
    --query networkProfile.networkInterfaces'[0]'.id \
    --output tsv)
export MSPVM2_IP=$(az network nic show \
    --ids ${MSPVM2_NIC_ID} \
    --query ipConfigurations'[0]'.privateIPAddress \
    --output tsv)
echo "Private IP of adminVM: ${ADMINVM_IP}"
echo "Private IP of mspVM1: ${MSPVM1_IP}"
echo "Private IP of mspVM2: ${MSPVM2_IP}"

現在,這三部機器都已就緒。 接下來,您會在受控網域模式中設定 Red Hat JBoss EAP 叢集。

設定受控網域和叢集

設定已啟用會話復寫的叢集。 如需詳細資訊,請參閱 會話複寫

若要啟用會話複寫,請使用叢集的 Red Hat JBoss EAP 高可用性。 Microsoft Azure 不支援以多播為基礎的 JGroups 探索通訊協定。 雖然您可以使用其他 JGroups 探索通訊協定(例如靜態組態(TCPPING)、共用資料庫 (JDBC_PING)、共用檔系統型 Ping (FILE_PING), 或 TCPGOSSIP),但強烈建議您使用針對 Azure 開發的共用檔案探索通訊協定: AZURE_PING。 如需詳細資訊,請參閱 在 Microsoft Azure 中使用 JBoss EAP 高可用性。

建立適用於AZURE_PING的 Azure 記憶體帳戶和 Blob 容器

使用下列命令來建立記憶體帳戶和 Blob 容器:

# Define your storage account name
export STORAGE_ACCOUNT_NAME=azurepingstgabc1111rg
# Define your Blob container name
export CONTAINER_NAME=azurepingcontainerabc1111rg

# Create storage account
az storage account create \
    --resource-group $RESOURCE_GROUP_NAME \
    --name ${STORAGE_ACCOUNT_NAME} \
    --location westus \
    --sku Standard_LRS \
    --kind StorageV2 \
    --access-tier Hot

然後,使用下列命令擷取記憶體帳戶密鑰以供稍後使用。 如果您看到錯誤,請稍候幾分鐘,然後再試一次。 尚未完成建立記憶體帳戶的上一個命令。

export STORAGE_ACCESS_KEY=$(az storage account keys list \
    --resource-group $RESOURCE_GROUP_NAME \
    --account-name ${STORAGE_ACCOUNT_NAME} \
    --query "[0].value" \
    --output tsv)

# Create blob container
az storage container create \
    --name ${CONTAINER_NAME} \
    --account-name ${STORAGE_ACCOUNT_NAME} \
    --account-key ${STORAGE_ACCESS_KEY}

您應該會看見下列輸出:

{
  "created": true
}

設定網域控制器 (管理員節點)

本教學課程使用 Red Hat JBoss EAP 管理 CLI 命令來設定域控制器。 如需詳細資訊,請參閱 管理 CLI 指南

下列步驟在 上 adminVM設定域控制器組態。 使用 SSH 以使用者身分azureuser連線到 adminVM 。 回想一下,先前已將的 adminVM 公用IP位址擷取到 ADMIN_VM_PUBLIC_IP 環境變數中。

ssh -i ~/.ssh/jbosseapvm azureuser@$ADMIN_VM_PUBLIC_IP

首先,使用下列命令來使用 AZURE_PING 通訊協議來設定HA設定檔和 JGroups:

export HOST_VM_IP=$(hostname -I)
export STORAGE_ACCOUNT_NAME=azurepingstgabc1111rg
export CONTAINER_NAME=azurepingcontainerabc1111rg
export STORAGE_ACCESS_KEY=<the-value-from-before-you-connected-with-SSH>


#-Configure the HA profile and JGroups using AZURE_PING protocol
sudo -u jboss $EAP_HOME/wildfly/bin/jboss-cli.sh --echo-command \
'embed-host-controller --std-out=echo --domain-config=domain.xml --host-config=host-master.xml',\
':write-attribute(name=name,value=domain1)',\
'/profile=ha/subsystem=jgroups/stack=tcp:remove',\
'/profile=ha/subsystem=jgroups/stack=tcp:add()',\
'/profile=ha/subsystem=jgroups/stack=tcp/transport=TCP:add(socket-binding=jgroups-tcp,properties={ip_mcast=false})',\
"/profile=ha/subsystem=jgroups/stack=tcp/protocol=azure.AZURE_PING:add(properties={storage_account_name=\"${STORAGE_ACCOUNT_NAME}\", storage_access_key=\"${STORAGE_ACCESS_KEY}\", container=\"${CONTAINER_NAME}\"})",\
'/profile=ha/subsystem=jgroups/stack=tcp/protocol=MERGE3:add',\
'/profile=ha/subsystem=jgroups/stack=tcp/protocol=FD_SOCK:add(socket-binding=jgroups-tcp-fd)',\
'/profile=ha/subsystem=jgroups/stack=tcp/protocol=FD_ALL:add',\
'/profile=ha/subsystem=jgroups/stack=tcp/protocol=VERIFY_SUSPECT:add',\
'/profile=ha/subsystem=jgroups/stack=tcp/protocol=pbcast.NAKACK2:add(properties={use_mcast_xmit=false,use_mcast_xmit_req=false})',\
'/profile=ha/subsystem=jgroups/stack=tcp/protocol=UNICAST3:add',\
'/profile=ha/subsystem=jgroups/stack=tcp/protocol=pbcast.STABLE:add',\
'/profile=ha/subsystem=jgroups/stack=tcp/protocol=pbcast.GMS:add',\
'/profile=ha/subsystem=jgroups/stack=tcp/protocol=MFC:add',\
'/profile=ha/subsystem=jgroups/stack=tcp/protocol=FRAG3:add',\
'/profile=ha/subsystem=jgroups/channel=ee:write-attribute(name="stack", value="tcp")',\
'/server-group=main-server-group:write-attribute(name="profile", value="ha")',\
'/server-group=main-server-group:write-attribute(name="socket-binding-group", value="ha-sockets")',\
"/host=master/subsystem=elytron/http-authentication-factory=management-http-authentication:write-attribute(name=mechanism-configurations,value=[{mechanism-name=DIGEST,mechanism-realm-configurations=[{realm-name=ManagementRealm}]}])",\
"/host=master/interface=unsecure:add(inet-address=${HOST_VM_IP})",\
"/host=master/interface=management:write-attribute(name=inet-address, value=${HOST_VM_IP})",\
"/host=master/interface=public:add(inet-address=${HOST_VM_IP})"

# Save a copy of the domain.xml, later you need to share it with all host controllers
cp $EAP_HOME/wildfly/domain/configuration/domain.xml /tmp/domain.xml

輸出的最後一節看起來應該類似下列範例。 如果沒有,請先進行疑難解答並解決問題,再繼續進行。

[domain@embedded /] /host=master/interface=public:add(inet-address=192.168.0.4 )
{
    "outcome" => "success",
    "result" => undefined,
    "server-groups" => undefined,
    "response-headers" => {"process-state" => "reload-required"}
}
02:05:55,019 INFO  [org.jboss.as] (MSC service thread 1-1) WFLYSRV0050: JBoss EAP 7.4.10.GA (WildFly Core 15.0.25.Final-redhat-00001) stopped in 28ms

然後,使用下列命令來設定 JBoss 伺服器並設定 EAP 服務:

注意

JBOSS_EAP_USERJBOSS_EAP_PASSWORD 值必須設定 JBoss EAP 管理使用者。

# Configure the JBoss server and setup EAP service
echo 'WILDFLY_HOST_CONFIG=host-master.xml' | sudo tee -a $EAP_RPM_CONF_DOMAIN

# Configure JBoss EAP management user
export JBOSS_EAP_USER=jbossadmin
export JBOSS_EAP_PASSWORD=Secret123456
sudo $EAP_HOME/wildfly/bin/add-user.sh  -u $JBOSS_EAP_USER -p $JBOSS_EAP_PASSWORD -g 'guest,mgmtgroup'

輸出應類似下列範例:

Added user 'jbossadmin' to file '/etc/opt/rh/eap7/wildfly/standalone/mgmt-users.properties'
Added user 'jbossadmin' to file '/etc/opt/rh/eap7/wildfly/domain/mgmt-users.properties'
Added user 'jbossadmin' with groups guest,mgmtgroup to file '/etc/opt/rh/eap7/wildfly/standalone/mgmt-groups.properties'
Added user 'jbossadmin' with groups guest,mgmtgroup to file '/etc/opt/rh/eap7/wildfly/domain/mgmt-groups.properties'

最後,使用下列命令啟動 EAP 服務:

# Start the JBoss server and setup EAP service
sudo systemctl enable eap7-domain.service

# Edit eap7-domain.services
sudo sed -i 's/After=syslog.target network.target/After=syslog.target network.target NetworkManager-wait-online.service/' /usr/lib/systemd/system/eap7-domain.service
sudo sed -i 's/Before=httpd.service/Wants=NetworkManager-wait-online.service \nBefore=httpd.service/' /usr/lib/systemd/system/eap7-domain.service

# Reload and restart EAP service
sudo systemctl daemon-reload
sudo systemctl restart eap7-domain.service

# Check the status of EAP service
systemctl status eap7-domain.service

輸出應類似下列範例:

● eap7-domain.service - JBoss EAP (domain mode)
   Loaded: loaded (/usr/lib/systemd/system/eap7-domain.service; enabled; vendor>
   Active: active (running) since Thu 2023-03-30 02:11:44 UTC; 5s ago
 Main PID: 3855 (scl)
    Tasks: 82 (limit: 20612)
   Memory: 232.4M
   CGroup: /system.slice/eap7-domain.service
           ├─3855 /usr/bin/scl enable eap7 -- /opt/rh/eap7/root/usr/share/wildf>
           ├─3856 /bin/bash /var/tmp/sclfYu7yW
           ├─3858 /bin/sh /opt/rh/eap7/root/usr/share/wildfly/bin/launch.sh /us>
           ├─3862 /bin/sh /opt/rh/eap7/root/usr/share/wildfly/bin/domain.sh --h>
           ├─3955 /usr/lib/jvm/jre/bin/java -D[Process Controller] -server -Xms>
           └─3967 /usr/lib/jvm/jre/bin/java -D[Host Controller] -Dorg.jboss.boo>

Mar 30 02:11:44 adminVM systemd[1]: Started JBoss EAP (domain mode).

輸入 q 以結束呼叫器。 輸入 exit 以結束 SSH 連線。

啟動 Red Hat JBoss EAP 服務之後,您可以在網頁瀏覽器中透過 http://$ADMIN_VM_PUBLIC_IP:9990 存取管理主控台。 使用已設定的使用者 jbossadmin 名稱和密碼 Secret123456登入。

Red Hat JBoss Enterprise Application Platform 域控制器管理控制台的螢幕快照。

選取 [執行階段] 索引標籤。在瀏覽窗格中,選取 [拓撲]。 您現在應該會看到叢集只包含一個域控制器:

設定主機控制器 (背景工作節點)

使用 SSH 以使用者身azureuser分連線至 mspVM1 。 使用下列指令取得 VM 的公用 IP 位址:

MSPVM_PUBLIC_IP=$(az vm show \
    --resource-group $RESOURCE_GROUP_NAME \
    --name mspVM1 \
    --show-details \
    --query publicIps | tr -d '"' )

ssh -A -i ~/.ssh/jbosseapvm azureuser@$MSPVM_PUBLIC_IP

使用下列命令在 上 mspVM1設定主機控制器:

# environment variables
export DOMAIN_CONTROLLER_PRIVATE_IP=<adminVM-private-IP>
export HOST_VM_NAME=$(hostname)
export HOST_VM_NAME_LOWERCASE=$(echo "${HOST_VM_NAME,,}")
export HOST_VM_IP=$(hostname -I)

export JBOSS_EAP_USER=jbossadmin
export JBOSS_EAP_PASSWORD=Secret123456

# Save default domain configuration as backup
sudo -u jboss mv $EAP_HOME/wildfly/domain/configuration/domain.xml $EAP_HOME/wildfly/domain/configuration/domain.xml.backup

# Fetch domain.xml from domain controller
scp azureuser@${DOMAIN_CONTROLLER_PRIVATE_IP}:/tmp/domain.xml /tmp/domain.xml
sudo mv /tmp/domain.xml $EAP_HOME/wildfly/domain/configuration/domain.xml
sudo chown jboss:jboss $EAP_HOME/wildfly/domain/configuration/domain.xml

使用下列命令將主機控制器變更套用至 mspVM1

# Setup host controller
sudo -u jboss $EAP_HOME/wildfly/bin/jboss-cli.sh --echo-command \
"embed-host-controller --std-out=echo --domain-config=domain.xml --host-config=host-slave.xml",\
"/host=${HOST_VM_NAME_LOWERCASE}/server-config=server-one:remove",\
"/host=${HOST_VM_NAME_LOWERCASE}/server-config=server-two:remove",\
"/host=${HOST_VM_NAME_LOWERCASE}/server-config=${HOST_VM_NAME_LOWERCASE}-server0:add(group=main-server-group)",\
"/host=${HOST_VM_NAME_LOWERCASE}/subsystem=elytron/authentication-configuration=slave:add(authentication-name=${JBOSS_EAP_USER}, credential-reference={clear-text=${JBOSS_EAP_PASSWORD}})",\
"/host=${HOST_VM_NAME_LOWERCASE}/subsystem=elytron/authentication-context=slave-context:add(match-rules=[{authentication-configuration=slave}])",\
"/host=${HOST_VM_NAME_LOWERCASE}:write-attribute(name=domain-controller.remote.username, value=${JBOSS_EAP_USER})",\
"/host=${HOST_VM_NAME_LOWERCASE}:write-attribute(name=domain-controller.remote, value={host=${DOMAIN_CONTROLLER_PRIVATE_IP}, port=9990, protocol=remote+http, authentication-context=slave-context})",\
"/host=${HOST_VM_NAME_LOWERCASE}/core-service=discovery-options/static-discovery=primary:write-attribute(name=host, value=${DOMAIN_CONTROLLER_PRIVATE_IP})",\
"/host=${HOST_VM_NAME_LOWERCASE}/interface=unsecured:add(inet-address=${HOST_VM_IP})",\
"/host=${HOST_VM_NAME_LOWERCASE}/interface=management:write-attribute(name=inet-address, value=${HOST_VM_IP})",\
"/host=${HOST_VM_NAME_LOWERCASE}/interface=public:write-attribute(name=inet-address, value=${HOST_VM_IP})"

輸出的最後一節看起來應該類似下列範例。 如果沒有,請先進行疑難解答並解決問題,再繼續進行。

[domain@embedded /] /host=mspvm1/interface=public:write-attribute(name=inet-address, value=192.168.0.5 )
{
    "outcome" => "success",
    "result" => undefined,
    "server-groups" => undefined,
    "response-headers" => {"process-state" => "reload-required"}
}
02:58:59,388 INFO  [org.jboss.as] (MSC service thread 1-2) WFLYSRV0050: JBoss EAP 7.4.10.GA (WildFly Core 15.0.25.Final-redhat-00001) stopped in 58ms

然後,使用下列命令來設定 JBoss 伺服器並設定 EAP 服務:

echo 'WILDFLY_HOST_CONFIG=host-slave.xml' | sudo tee -a $EAP_RPM_CONF_DOMAIN

# Enable the JBoss server and setup EAP service
sudo systemctl enable eap7-domain.service

# Edit eap7-domain.services
sudo sed -i 's/After=syslog.target network.target/After=syslog.target network.target NetworkManager-wait-online.service/' /usr/lib/systemd/system/eap7-domain.service
sudo sed -i 's/Before=httpd.service/Wants=NetworkManager-wait-online.service \nBefore=httpd.service/' /usr/lib/systemd/system/eap7-domain.service

# Reload and restart EAP service
sudo systemctl daemon-reload
sudo systemctl restart eap7-domain.service

# Check the status of EAP service
systemctl status eap7-domain.service

輸出應類似下列範例:

● eap7-domain.service - JBoss EAP (domain mode)
   Loaded: loaded (/usr/lib/systemd/system/eap7-domain.service; enabled; vendor>
   Active: active (running) since Thu 2023-03-30 03:02:15 UTC; 7s ago
 Main PID: 9699 (scl)
    Tasks: 51 (limit: 20612)
   Memory: 267.6M
   CGroup: /system.slice/eap7-domain.service
           ├─9699 /usr/bin/scl enable eap7 -- /opt/rh/eap7/root/usr/share/wildf>
           ├─9700 /bin/bash /var/tmp/sclgJ1hRD
           ├─9702 /bin/sh /opt/rh/eap7/root/usr/share/wildfly/bin/launch.sh /us>
           ├─9706 /bin/sh /opt/rh/eap7/root/usr/share/wildfly/bin/domain.sh --h>
           ├─9799 /usr/lib/jvm/jre/bin/java -D[Process Controller] -server -Xms>
           └─9811 /usr/lib/jvm/jre/bin/java -D[Host Controller] -Dorg.jboss.boo>

Mar 30 03:02:15 mspVM1 systemd[1]: Started JBoss EAP (domain mode).

輸入 q 以結束呼叫器。 輸入 exit 以結束 SSH 連線。

使用 SSH 以使用者身azureuser分連線至 mspVM2 。 使用下列指令取得 VM 的公用 IP 位址:

az vm show \
    --resource-group $RESOURCE_GROUP_NAME \
    --name mspVM2 \
    --show-details \
    --query publicIps | tr -d '"'

在上 mspVM2重複上述步驟,然後輸入 exit以結束 SSH 連線。

線上到 adminVM兩個主機控制器之後,您應該可以看到叢集拓撲,如下列螢幕快照所示:

使用 Azure 應用程式閘道 公開 Red Hat JBoss EAP 叢集

既然您已在 Azure VM 上建立叢集,本節將逐步引導您使用 Azure 應用程式閘道 將 JBoss EAP 公開至因特網。

建立 Azure 應用程式閘道

若要將 Red Hat JBoss EAP 公開至因特網,則需要公用 IP 位址。 建立公用IP位址,然後將Azure 應用程式閘道與其產生關聯。 使用 az network public-ip create 建立它,如下列範例所示:

az network public-ip create \
    --resource-group $RESOURCE_GROUP_NAME \
    --name myAGPublicIPAddress \
    --allocation-method Static \
    --sku Standard

接下來,將後端伺服器新增至 應用程式閘道 後端集區。 使用下列命令查詢後端IP位址。 您只將主機控制器(工作節點)設定為後端伺服器。

export MSPVM1_NIC_ID=$(az vm show \
    --resource-group $RESOURCE_GROUP_NAME \
    --name mspVM1 \
    --query networkProfile.networkInterfaces'[0]'.id \
    --output tsv)
export MSPVM1_IP=$(az network nic show \
    --ids ${MSPVM1_NIC_ID} \
    --query ipConfigurations'[0]'.privateIPAddress \
    --output tsv)
export MSPVM2_NIC_ID=$(az vm show \
    --resource-group $RESOURCE_GROUP_NAME \
    --name mspVM2 \
    --query networkProfile.networkInterfaces'[0]'.id \
    --output tsv)
export MSPVM2_IP=$(az network nic show \
    --ids ${MSPVM2_NIC_ID} \
    --query ipConfigurations'[0]'.privateIPAddress \
    --output tsv)

接下來,建立 Azure 應用程式閘道。 下列範例會在預設後端集區中建立具有主機控制器的應用程式閘道:

az network application-gateway create \
    --resource-group $RESOURCE_GROUP_NAME \
    --name myAppGateway \
    --public-ip-address myAGPublicIPAddress \
    --location westus \
    --capacity 2 \
    --http-settings-port 8080 \
    --http-settings-protocol Http \
    --frontend-port 80 \
    --sku Standard_V2 \
    --subnet jbossVMGatewaySubnet \
    --vnet-name myVNet \
    --priority 1001 \
    --servers ${MSPVM1_IP} ${MSPVM2_IP}

注意

此範例會設定使用 HTTP 對 Red Hat JBoss EAP 伺服器的簡單存取。 如果您想要安全存取,請依照使用 應用程式閘道 的端對端 TLS 中的指示來設定 TLS/SSL 終止。

此範例會在埠 8080 公開主機控制器。 您可以在後續步驟中,使用資料庫連線至叢集部署範例應用程式。

線上 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器

本節說明如何建立 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器實例,並在 Red Hat JBoss EAP 叢集上設定 PostgreSQL 的連線。

建立 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器實例

使用下列步驟來建立資料庫實例:

  1. 使用 az postgres flexible-server create 來布建 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器實例,如下列範例所示:

    export DATA_BASE_USER=jboss
    
    DB_SERVER_NAME="jbossdb$(date +%s)"
    echo "DB_SERVER_NAME=${DB_SERVER_NAME}"
    az postgres flexible-server create \
        --active-directory-auth Enabled \
        --resource-group $RESOURCE_GROUP_NAME \
        --name ${DB_SERVER_NAME}  \
        --location westus \
        --version 16 \
        --public-access 0.0.0.0 \
        --tier Burstable \
        --sku-name Standard_B1ms \
        --yes
    objectId=$(az identity show --name passwordless-managed-identity --resource-group $RESOURCE_GROUP_NAME --query principalId -o tsv)
    az postgres flexible-server ad-admin create \
      --resource-group $RESOURCE_GROUP_NAME \
      --server-name ${DB_SERVER_NAME}  \
      --display-name "passwordless-managed-identity"  \
      --object-id $objectId \
      --type ServicePrincipal 
    
  2. 使用下列命令來允許從 Azure 服務存取:

    # Save aside the following names for later use
    export fullyQualifiedDomainName=$(az postgres flexible-server show \
        --resource-group $RESOURCE_GROUP_NAME \
        --name ${DB_SERVER_NAME} \
        --query "fullyQualifiedDomainName" \
        --output tsv)
    export name=$(az postgres flexible-server show \
        --resource-group $RESOURCE_GROUP_NAME \
        --name ${DB_SERVER_NAME} \
        --query "name" \
        --output tsv)
    
    az postgres flexible-server firewall-rule create \
        --resource-group $RESOURCE_GROUP_NAME \
        --name ${DB_SERVER_NAME} \
        --rule-name "AllowAllWindowsAzureIps" \
        --start-ip-address "0.0.0.0" \
        --end-ip-address "0.0.0.0"
    
  3. 使用下列命令來建立資料庫:

    az postgres flexible-server db create \
        --resource-group $RESOURCE_GROUP_NAME \
        --server-name ${DB_SERVER_NAME} \
        --database-name testdb
    

安裝驅動程式

使用下列步驟搭配 JBoss 管理 CLI 安裝 JDBC 驅動程式:

  1. 使用下列命令透過 SSH 連線至 adminVM 。 如果您已開啟連線,則可以略過此步驟。

    ssh -A -i ~/.ssh/jbosseapvm azureuser@$ADMIN_VM_PUBLIC_IP
    
  2. 使用下列命令在 adminVM 上下載 JDBC 驅動程式:

    # Create JDBC driver and module directory
    jdbcDriverModuleDirectory="$EAP_HOME"/wildfly/modules/com/postgresql/main
    
    sudo mkdir -p "$jdbcDriverModuleDirectory"
    
    # Download JDBC driver and passwordless extensions
    
    extensionJarName=azure-identity-extensions-1.1.20.jar
    extensionPomName=azure-identity-extensions-1.1.20.pom
    sudo curl --retry 5 -Lo ${jdbcDriverModuleDirectory}/${extensionJarName} https://repo1.maven.org/maven2/com/azure/azure-identity-extensions/1.1.20/$extensionJarName
    sudo curl --retry 5 -Lo ${jdbcDriverModuleDirectory}/${extensionPomName} https://repo1.maven.org/maven2/com/azure/azure-identity-extensions/1.1.20/$extensionPomName
    
    sudo yum install maven -y
    sudo mvn dependency:copy-dependencies  -f ${jdbcDriverModuleDirectory}/${extensionPomName} -Ddest=${jdbcDriverModuleDirectory}
    
    # Create module for JDBC driver
    jdbcDriverModule=module.xml
    sudo cat <<EOF >${jdbcDriverModule}
    <?xml version="1.0" ?>
    <module xmlns="urn:jboss:module:1.1" name="com.postgresql">
      <resources>
        <resource-root path="${extensionJarName}"/>
    EOF
    
    # Add all jars from target/dependency
    for jar in ${jdbcDriverModuleDirectory}/target/dependency/*.jar; do
    if [ -f "$jar" ]; then
    # Extract just the filename from the path
    jarname=$(basename "$jar")
    echo "    <resource-root path=\"target/dependency/${jarname}\"/>" >> ${jdbcDriverModule}
    fi
    done
    
    # Add the closing tags
    cat <<EOF >> ${jdbcDriverModule}
    </resources>
    <dependencies>
    <module name="javaee.api"/>
    <module name="sun.jdk"/>
    <module name="ibm.jdk"/>
    <module name="javax.api"/>
    <module name="javax.transaction.api"/>
    </dependencies>
    </module>
    EOF
    
    chmod 644 $jdbcDriverModule
    sudo mv $jdbcDriverModule $jdbcDriverModuleDirectory/$jdbcDriverModule
    
  3. 使用下列命令將 JDBC 驅動程式複製到主機控制器:

    scp -rp $EAP_HOME/wildfly/modules/com/postgresql azureuser@mspvm1:/tmp/
    ssh azureuser@mspvm1 "sudo mkdir -p $EAP_HOME/wildfly/modules/com/postgresql && sudo cp -rp /tmp/postgresql/* $EAP_HOME/wildfly/modules/com/postgresql && sudo rm -rf /tmp/postgresql"
    
    scp -rp $EAP_HOME/wildfly/modules/com/postgresql azureuser@mspvm2:/tmp/
    ssh azureuser@mspvm2 "sudo mkdir -p $EAP_HOME/wildfly/modules/com/postgresql && sudo cp -rp /tmp/postgresql/* $EAP_HOME/wildfly/modules/com/postgresql && sudo rm -rf /tmp/postgresql"
    

    伺服器記錄位於和 mspVM2mspVM1/var/opt/rh/eap7/lib/wildfly/domain/servers/mspvm1-server0/log/server.log。 如果部署失敗,請檢查此記錄檔並解決問題,然後再繼續。


  1. 使用下列命令來註冊 JDBC 驅動程式:

    # Register JDBC driver
    sudo -u jboss $EAP_HOME/wildfly/bin/jboss-cli.sh --connect --controller=$(hostname -I) --echo-command \
    "/profile=ha/subsystem=datasources/jdbc-driver=postgresql:add(driver-name=postgresql,driver-module-name=com.postgresql,driver-xa-datasource-class-name=org.postgresql.xa.PGXADataSource)"
    

設定 Red Hat JBoss EAP 叢集的資料庫連線

您已啟動資料庫伺服器、取得必要的資源識別碼,並安裝 JDBC 驅動程式。 接下來,本節中的步驟會示範如何使用 JBoss CLI 來設定與先前建立之 PostgreSQL 實例的數據源聯機。

  1. 使用下列命令開啟終端機與 SSH 至 adminVM

    ssh -i ~/.ssh/jbosseapvm azureuser@$ADMIN_VM_PUBLIC_IP
    
  2. 使用下列指令建立資料來源:

    # Replace the following values with your own
    export DATA_SOURCE_CONNECTION_STRING="jdbc:postgresql://<database-fully-qualified-domain-name>:5432/testdb?sslmode=require&user=passwordless-managed-identity&authenticationPluginClassName=com.azure.identity.extensions.jdbc.postgresql.AzurePostgresqlAuthenticationPlugin"
    export JDBC_DATA_SOURCE_NAME=dataSource-postgresql
    export JDBC_JNDI_NAME=java:jboss/datasources/JavaEECafeDB
    
    sudo -u jboss $EAP_HOME/wildfly/bin/jboss-cli.sh --connect --controller=$(hostname -I) --echo-command \
    "data-source add --driver-name=postgresql --profile=ha --name=${JDBC_DATA_SOURCE_NAME} --jndi-name=${JDBC_JNDI_NAME} --connection-url=${DATA_SOURCE_CONNECTION_STRING} "
    

您已成功設定名為 java:jboss/datasources/JavaEECafeDB的數據來源。

部署 Java EE Cafe 範例應用程式

使用下列步驟將 Java EE Cafe 範例應用程式部署至 Red Hat JBoss EAP 叢集:

  1. 使用下列步驟來建置 Java EE Cafe。 這些步驟假設您已安裝 Git 和 Maven 的本機環境:

    1. 使用下列命令從 GitHub 複製原始碼:

      git clone https://github.com/Azure/rhel-jboss-templates.git --branch 20240904 --single-branch
      
    2. 使用下列命令建置原始程式碼:

      mvn clean install --file rhel-jboss-templates/eap-coffee-app/pom.xml
      

      此命令會建立 eap-coffee-app/target/javaee-café.war 檔案。 您會在下一個步驟中上傳此檔案。

  2. 開啟網頁瀏覽器,然後移至的 http://<adminVM-public-IP>:9990管理主控台,然後使用使用者 jbossadmin 名稱和密碼 Secret123456登入。

  3. 使用下列步驟將javaee-café.war 上傳內容存放庫

    1. 從 Red Hat JBoss EAP 管理控制台的 [部署] 索引卷標中,選取瀏覽窗格中的內容存放庫

    2. 選取 [ 新增] 按鈕,然後選取 [ 上傳內容]。

      Red Hat JBoss 企業應用程式平臺部署索引標籤的螢幕快照,其中已醒目提示 [上傳內容] 功能表選項。

    3. 使用瀏覽器檔案選擇器以選取 javaee-cafe.war 檔案。

    4. 選取 [下一步]。

    5. 接收下一個畫面的預設值,然後選取 [完成]

    6. 選取 [檢視內容]

  4. 使用下列步驟將應用程式部署至 main-server-group

    1. 從 [內容存放庫] 中,選取 [javaee-cafe.war]

    2. 在下拉功能表中,選取 [ 部署]。

    3. 選取 main-server-group 作為部署 javaee-café.war的伺服器群組。

    4. 選取 [部署] 以開始部署。 您應該會看到類似下列螢幕擷取畫面的通知:

      成功部署通知的螢幕擷取畫面。

測試 Red Hat JBoss EAP 叢集設定

您已設定 JBoss EAP 叢集,並將應用程式部署至其中。 使用下列步驟來存取應用程式,以驗證所有設定:

  1. 使用下列命令取得 Azure 應用程式閘道 的公用 IP 位址:

    az network public-ip show \
        --resource-group $RESOURCE_GROUP_NAME \
        --name myAGPublicIPAddress \
        --query '[ipAddress]' \
        --output tsv
    
  2. 開啟網頁瀏覽器。

  3. 使用 URL http://<gateway-public-ip-address>/javaee-cafe/ 瀏覽至應用程式。 別忘了尾端斜線。

  4. 嘗試新增和移除 coffee。

清除資源

若要避免 Azure 費用,您應該清除不必要的資源。 當您不再需要部署在 Azure VM 上的 Red Hat JBoss EAP 叢集時,請取消註冊 Red Hat JBoss EAP 伺服器,並移除 Azure 資源。

使用下列命令,從 Red Hat 訂用帳戶管理取消註冊 Red Hat JBoss EAP 伺服器和 VM:

# Unregister domain controller
az vm run-command invoke \
    --resource-group $RESOURCE_GROUP_NAME \
    --name adminVM \
    --command-id RunShellScript \
    --scripts "sudo subscription-manager unregister"

# Unregister host controllers
az vm run-command invoke \
    --resource-group $RESOURCE_GROUP_NAME \
    --name mspVM1 \
    --command-id RunShellScript \
    --scripts "sudo subscription-manager unregister"
az vm run-command invoke \
    --resource-group $RESOURCE_GROUP_NAME \
    --name mspVM2 \
    --command-id RunShellScript \
    --scripts "sudo subscription-manager unregister"

使用下列命令來移除資源群組 $RESOURCE_GROUP_NAME

az group delete --name $RESOURCE_GROUP_NAME --yes --no-wait

下一步

繼續探索在 Azure 上執行 JBoss EAP 的選項。