Öğretici: JBoss EAP'yi Azure Sanal Makineler'ye (VM) el ile yükleme

Bu öğreticide Red Hat JBoss Enterprise Application Platform'u (EAP) yükleme ve Azure Sanal Makineler'da (VM) Red Hat Enterprise Linux(RHEL) üzerinde etki alanı modunda bir küme yapılandırma adımları gösterilmektedir.

Bu öğreticide, aşağıdaki görevlerin nasıl yapılacağını öğreneceksiniz:

  • Özel bir sanal ağ oluşturun ve ağ içindeki VM'leri oluşturun.
  • Komut satırını el ile kullanarak VM'lere istenen JDK ve Red Hat JBoss EAP'yi yükleyin.
  • Komut satırı arabirimini (CLI) kullanarak etki alanı modunda Red Hat JBoss EAP kümesi yapılandırın.
  • Kümede PostgreSQL veri kaynağı bağlantısı yapılandırın.
  • Kümede örnek bir Java EE uygulaması dağıtın ve çalıştırın.
  • uygulamayı Azure Uygulaması lication Gateway aracılığıyla genel İnternet'te kullanıma sunma.
  • Başarılı yapılandırmayı doğrulayın.

Bu adımların tümünü doğrudan Azure portalından GNU/Linux VM'lerinde sizin yerinize uygulayan tam otomatik bir çözüm tercih ediyorsanız bkz. Hızlı Başlangıç: Azure Sanal Makineler'de JBoss EAP kümesi dağıtma (VM).

Azure çözümleri üzerinde JBoss EAP geliştiren mühendislik ekibiyle geri bildirim sağlamak veya geçiş senaryolarınız üzerinde yakından çalışmak istiyorsanız JBoss EAP geçişiyle ilgili bu kısa anketi doldurun ve iletişim bilgilerinizi ekleyin. Program yöneticileri, mimarlar ve mühendislerden oluşan ekip, yakın işbirliği başlatmak için sizinle hemen iletişime geçecektir.

Not

Bu makalede, Microsoft'un artık kullanmadığı köle terimi geçmektedir. Terim yazılımdan kaldırıldığında, bu makaleden kaldıracağız.

Önkoşullar

  • Azure aboneliği. Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun.

  • Azure CLI komutlarını çalıştırmak için Azure CLI sürüm 2.51.0 veya üzerini yükleyin.

    • İstendiğinde, ilk kullanımda Azure CLI uzantılarını yükleyin. Uzantılar hakkında daha fazla bilgi için bkz. Azure CLI ile uzantıları kullanma.
    • Yüklü sürümü ve bağımlı kitaplıkları bulmak için az version komutunu çalıştırın. En son sürüme yükseltmek için az upgrade komutunu çalıştırın.
  • Gerekli Red Hat lisanslarına sahip olduğunuzdan emin olun. Red Hat JBoss EAP için Red Hat Abonelik Yönetimi (RHSM) yetkilendirmesine sahip bir Red Hat Hesabınız olmalıdır. Bu yetkilendirme, tam otomatik çözümün (Hızlı Başlangıç: Azure Sanal Makineler'de JBoss EAP kümesi dağıtma (VM)) red hat test edilmiş ve sertifikalı JBoss EAP sürümünü yüklemesine olanak tanır.

    Not

    EAP yetkilendirmeniz yoksa, Red Hat Bireysel Geliştirici Aboneliği aracılığıyla ücretsiz geliştirici aboneliğine kaydolabilirsiniz. Sonraki bölümde RHSM kullanıcı adı ve RHSM parolası olarak kullanılan hesap ayrıntılarını bir kenara kaydedin.

  • Zaten kayıtlıysanız veya kaydı tamamladıktan sonra aşağıdaki adımları kullanarak gerekli kimlik bilgilerini (Havuz Kimlikleri) bulabilirsiniz. Bu Havuz Kimlikleri, sonraki adımlarda EAP yetkilendirmesi değeri olan RHSM Havuz Kimliği olarak da kullanılır.

    1. Red Hat hesabınızda oturum açın.

    2. İlk kez oturum açtığınızda profilinizi tamamlamanız istenir. Kullanımınıza bağlı olarak, aşağıdaki ekran görüntüsünde gösterildiği gibi Hesap Türü için Kişisel veya Kurumsal'ı seçin:

      Kişisel'in seçili olduğu Hesap Türü seçeneklerini gösteren Red Hat hesap penceresinin ekran görüntüsü.

    3. Bireyler için Red Hat Geliştirici Aboneliğini açın. Bu bağlantı sizi uygun SKU için hesabınızdaki tüm aboneliklere götürür.

    4. Tüm satın alınan Abonelikler tablosunun altındaki denetimler satırında Etkin'i seçin.

    5. Gelecekteki en uzak değer ilk satır olarak gösterilene kadar Bitiş Tarihi için sıralanabilir sütun başlığını seçin.

    6. İlk satırı seçin. Ardından, havuz kimliklerinden aşağıdaki Ana Havuzlar değerini kopyalayıp bir kenara kaydedin.

  • Java Geliştirme Seti (JDK), sürüm 11. Bu kılavuzda, OpenJDK'nin Red Hat Derlemesini öneririz. Ortam değişkeninizin JAVA_HOME komutları çalıştırdığınız kabuklarda doğru ayarlandığından emin olun.

  • Git; çalışıp çalışmadığını git --version test etmek için kullanıngit. Bu öğretici 2.25.1 sürümüyle test edilmiştir.

  • Maven; çalışıp çalışmadığını mvn -version test etmek için kullanınmvn. Bu öğretici 3.6.3 sürümüyle test edilmiştir.

Ortamı hazırlama

Bu bölümde JDK, Red Hat JBoss EAP ve PostgreSQL Java Veritabanı Bağlantısı (JDBC) sürücüsünü yüklediğiniz altyapıyı ayarlarsınız.

Varsayımlar

Bu öğreticide, bir yönetim sunucusu ve toplam üç VM üzerinde iki yönetilen sunucu ile etki alanı modunda bir Red Hat JBoss EAP kümesi yapılandırılır. Kümeyi yapılandırmak için aşağıdaki üç Azure VM'sini oluşturmanız gerekir:

  • Etki alanı denetleyicisi olarak bir yönetici VM (VM adı adminVM) çalışır.
  • İki yönetilen VM (VM adları mspVM1 ve mspVM2) konak denetleyicisi olarak çalışır.

Azure'da oturum açma

Henüz yapmadıysanız az login komutunu kullanarak ve ekrandaki yönergeleri izleyerek Azure aboneliğinizde oturum açın.

az login

Not

Azure kimlik bilgilerinizle ilişkilendirilmiş birden çok Azure kiracınız varsa, hangi kiracıda oturum açmak istediğinizi belirtmeniz gerekir. Bunu seçeneğiyle --tenant yapabilirsiniz. Örneğin, az login --tenant contoso.onmicrosoft.com.

Kaynak grubu oluşturma

az group create ile bir kaynak grubu oluşturun. Kaynak grubu adları bir abonelik içinde genel olarak benzersiz olmalıdır. Bu nedenle, oluşturduğunuz ve benzersiz olması gereken tüm adlara bazı benzersiz tanımlayıcılar eklemeyi göz önünde bulundurun. Yararlı bir teknik, baş harflerinizi ve ardından bugünün tarihini mmdd biçiminde kullanmaktır. Bu örnek, konumunda adlı $RESOURCE_GROUP_NAMEwestus bir kaynak grubu oluşturur:

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

Sanal ağ oluşturma

Red Hat JBoss EAP kümenizi oluşturan kaynakların bir sanal ağ kullanarak birbirleriyle ve genel internetle iletişim kurması gerekir. Sanal ağınızı planlamaya yönelik eksiksiz bir kılavuz için Bkz. Azure için Bulut Benimseme Çerçevesi Sanal ağları planlama. Daha fazla bilgi için bkz. Azure Sanal Ağ sık sorulan sorular.

Bu bölümdeki örnek, adres alanı 192.168.0.0/16 olan bir sanal ağ oluşturur ve VM'ler için kullanılan bir alt ağ oluşturur.

İlk olarak az network vnet create komutunu kullanarak bir sanal ağ oluşturun. Aşağıdaki örnek adlı myVNetbir ağ oluşturur:

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

az network vnet subnet create komutunu kullanarak Red Hat JBoss EAP kümesi için bir alt ağ oluşturun. Aşağıdaki örnek adlı mySubnetbir alt ağ oluşturur:

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 komutunu kullanarak Application Gateway için bir alt ağ oluşturun. Aşağıdaki örnek adlı jbossVMGatewaySubnetbir alt ağ oluşturur:

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

Ağ güvenlik grubu oluşturma ve alt ağlar atama

Genel IP'lerle VM'ler oluşturmadan önce, daha önce oluşturulan sanal ağın ve alt ağların güvenliğini sağlamak için bir ağ güvenlik grubu (NSG) oluşturun.

az network nsg create komutunu kullanarak bir ağ güvenlik grubu oluşturun. Aşağıdaki örnek adlı mynsgbir ağ güvenlik grubu oluşturur:

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

az network nsg rule create komutunu kullanarak ağ güvenlik grubu kuralları oluşturun. Aşağıdaki örnekte ve ALLOW_APPGWadlı ALLOW_HTTP_ACCESS ağ güvenlik grubu kuralları oluşturulur. Bu kurallar, App Gateway'in Red Hat JBoss EAP tarafından kullanılan HTTP bağlantı noktalarında gelen trafiği kabul etmesine olanak tanır:

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

Aşağıdaki örnekte gösterildiği gibi az network vnet subnet update komutunu kullanarak daha önce oluşturulan alt ağları bu ağ güvenlik grubuyla ilişkilendirin:

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

Yönetici için Red Hat Enterprise Linux makinesi oluşturma

SSH anahtarları oluşturma

için SSH anahtarları oluşturmak için adminVMaşağıdaki komutu kullanın:

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

Yönetici VM'sini oluşturma

VM'leri oluşturmak için kullandığınız Market görüntüsü şeklindedir RedHat:rhel-raw:86-gen2:latest. Diğer görüntüler için bkz . Azure'da kullanılabilen Red Hat Enterprise Linux (RHEL) görüntüleri.

Not

Az vm image list komutuyla Daha fazla bilgi için bkz . Red Hat Enterprise Linux görüntülerine genel bakış.

Farklı bir görüntü kullanıyorsanız, bu kılavuzda kullanılan altyapıyı etkinleştirmek için ek kitaplıklar yüklemeniz gerekebilir.

Temel bir VM oluşturun, gerekli tüm araçları yükleyin, anlık görüntüsünü alın ve anlık görüntüye göre çoğaltmalar oluşturun.

az vm create kullanarak VM oluşturun. Yönetim Sunucusu'nu bu VM'de çalıştırırsınız.

Aşağıdaki örnek, TLS/SSL kimlik doğrulaması kullanarak bir Azure Yönetilen Kimliği ve Red Hat Enterprise Linux VM oluşturur.

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'yi yükleme

Yüklemek için aşağıdaki adımları kullanın:

  1. genel IP'sini adminVMalmak için aşağıdaki komutu kullanın:

    export ADMIN_VM_PUBLIC_IP=$(az vm show \
        --resource-group $RESOURCE_GROUP_NAME \
        --name adminVM \
        --show-details \
        --query publicIps | tr -d '"')
    
  2. Aşağıdaki komutu kullanarak için bir terminal ve SSH adminVM açın:

    ssh -i ~/.ssh/jbosseapvm azureuser@$ADMIN_VM_PUBLIC_IP
    
  3. Aşağıdaki komutu kullanarak bağlantı noktaları için güvenlik duvarını yapılandırın:

    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
    

    İlk iki komut sonrasında sözcüğü success görmeniz gerekir. Üçüncü komut sonrasında aşağıdaki örneğe benzer bir çıktı görmeniz gerekir:

    # 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
    

Not

RHSM_USER Red Hat JBoss EAP'yi yüklemek için ve RHSM_PASSWORD değerleri gereklidir. Red Hat Müşteri Portalı'na erişmek için sınırlı izinlere sahip bir hizmet hesabı kullanmanızı öneririz.

  1. Yönetici ana bilgisayarını Red Hat Abonelik Yönetimi (RHSM) hesabınıza kaydetmek için aşağıdaki komutları kullanın:

    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
    

    Not

    Microsoft, kullanılabilir en güvenli kimlik doğrulama akışının kullanılmasını önerir. Veritabanları, önbellekler, mesajlaşma veya yapay zeka hizmetleri gibi bu yordamda açıklanan kimlik doğrulama akışı, uygulamaya çok yüksek düzeyde güven gerektirir ve diğer akışlarda mevcut olmayan riskler taşır. Bu akışı yalnızca parolasız veya anahtarsız bağlantılar için yönetilen kimlikler gibi daha güvenli seçenekler uygun olmadığında kullanın. Yerel makine işlemleri için parolasız veya anahtarsız bağlantılar için kullanıcı kimliklerini tercih edin.

    Aşağıdaki örneğe benzer bir çıktı görmeniz gerekir:

    Registering to: subscription.rhsm.redhat.com:443/subscription
    The system has been registered with ID: redacted
    The registered system name is: adminVM
    
  2. Yönetici ana bilgisayarını Red Hat JBoss EAP havuzuna eklemek için aşağıdaki komutu kullanın:

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

    Not

    Basit İçerik Erişimi modu kullanıyorsanız bu komut yoksayılır.

  3. Red Hat JBoss EAP'yi yüklemek için aşağıdaki komutları kullanın:

    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
    

İkinci ve üçüncü komutlar için şununla biten birçok çıkış satırı görmeniz gerekir: Complete!

  1. İzin ve ağ yapılandırmalarını ayarlamak için aşağıdaki komutları kullanın:

    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. Ortam değişkenlerini yapılandırmak için aşağıdaki komutları kullanın:

    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/wildfly"' >> ~/.bash_profile
    source ~/.bash_profile
    sudo touch /etc/profile.d/eap_env.sh
    echo 'export EAP_HOME="/opt/rh/eap7/root/usr/share/wildfly"' | sudo tee -a /etc/profile.d/eap_env.sh
    
  3. Exit yazarak SSH bağlantısından çıkın.

Yönetilen sunucular için makine oluşturma

Etki alanı denetleyicisi sunucusu olarak çalışan Red Hat JBoss EAP'yi üzerine adminVMyüklemişsiniz. Yine de iki konak denetleyicisi sunucusunu çalıştırmak için makineleri hazırlamanız gerekir. Ardından, iki yönetilen sunucu ve için makinelerin adminVM anlık görüntüsünü oluşturup hazırlarsınız mspVM1mspVM2.

Bu bölümde, anlık görüntüsüyle adminVMmakineleri hazırlamaya yönelik bir yaklaşım sunulur. Azure CLI'nın oturum açtığı terminalinize dönün ve aşağıdaki adımları kullanın:

  1. Durdurmak adminVMiçin aşağıdaki komutu kullanın:

    az vm stop --resource-group $RESOURCE_GROUP_NAME --name adminVM
    
  2. Aşağıdaki örnekte gösterildiği gibi işletim sistemi diskinin anlık görüntüsünü almak için az snapshot createadminVM:

    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. başlatmak adminVMiçin aşağıdaki komutu kullanın:

    az vm start --resource-group $RESOURCE_GROUP_NAME --name adminVM
    
  4. Oluşturmak mspVM1için aşağıdaki adımları kullanın:

    1. İlk olarak, az disk create ile için mspVM1 bir yönetilen disk oluşturun:

      #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. Ardından, işletim sistemi diskini mspVM1ekleyen VM mspVM1_OsDisk_1oluşturmak için aşağıdaki komutları kullanın:

      #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 yüklü olarak oluşturdunuz mspVM1 . VM, işletim sistemi diskinin adminVM anlık görüntüsünden oluşturulduğundan, iki VM aynı konak adına sahiptir. konak adını değerine dönüştürmek için az vm run-command invokemspVM1:

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

      Komut başarıyla tamamlandığında aşağıdaki örneğe benzer bir çıktı görürsünüz:

      {
          "value": [
              {
              "code": "ProvisioningState/succeeded",
              "displayStatus": "Provisioning succeeded",
              "level": "Info",
              "message": "Enable succeeded: \n[stdout]\n\n[stderr]\n",
              "time": null
              }
          ]
      }
      
  5. oluşturmak mspVM2için aynı komutları kullanın:

    #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"
    

Sonraki bölümlerde kullandığınız özel IP adreslerini almak ve göstermek için aşağıdaki komutları kullanın:

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}"

Şimdi, üç makine de hazır. Ardından, yönetilen etki alanı modunda bir Red Hat JBoss EAP kümesi yapılandıracaksınız.

Yönetilen etki alanını ve kümeyi yapılandırma

Kümeyi oturum çoğaltma etkinleştirilmiş olarak yapılandırın. Daha fazla bilgi için bkz . Oturum Çoğaltma.

Oturum çoğaltmayı etkinleştirmek için küme için Red Hat JBoss EAP Yüksek Kullanılabilirliği'ni kullanın. Microsoft Azure, çok noktaya yayına dayalı JGroup bulma protokollerini desteklemez. Diğer JGroup bulma protokollerini (statik yapılandırma (), paylaşılan veritabanı (TCPPINGJDBC_PING), paylaşılan dosya sistemi tabanlı ping ()FILE_PING veya TCPGOSSIP) kullanabilirsiniz ancak Azure için geliştirilen paylaşılan dosya bulma protokollerini kullanmanızı kesinlikle öneririz: AZURE_PING. Daha fazla bilgi için bkz . Microsoft Azure'da JBoss EAP Yüksek Kullanılabilirliğini Kullanma.

AZURE_PING için Azure depolama hesabı ve Blob kapsayıcısı oluşturma

Depolama hesabı ve Blob kapsayıcısı oluşturmak için aşağıdaki komutları kullanın:

# 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

Ardından aşağıdaki komutu kullanarak depolama hesabı anahtarını daha sonra kullanmak üzere alın. Hata görürseniz birkaç dakika bekleyip yeniden deneyin. Depolama hesabını oluşturmak için önceki komut henüz yapılmamış olabilir.

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}

Aşağıdaki çıkışı görmeniz gerekir:

{
  "created": true
}

Etki alanı denetleyicisini yapılandırma (yönetici düğümü)

Bu öğreticide, etki alanı denetleyicisini yapılandırmak için Red Hat JBoss EAP yönetim CLI komutları kullanılır. Daha fazla bilgi için bkz . Yönetim CLI Kılavuzu.

Aşağıdaki adımlar üzerinde adminVMetki alanı denetleyicisi yapılandırmasını ayarlar. kullanıcı olarak adminVM bağlanmak için azureuser SSH kullanın. Genel IP adresinin adminVM daha önce ortam değişkenine ADMIN_VM_PUBLIC_IP yakalandığını hatırlayın.

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

İlk olarak, protokolü kullanarak AZURE_PING HA profilini ve JGroup'ları yapılandırmak için aşağıdaki komutları kullanın:

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/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/domain/configuration/domain.xml /tmp/domain.xml

Çıktının son duruşu aşağıdaki örneğe benzer olmalıdır. Aksi takdirde devam etmeden önce sorunu giderin ve çözün.

[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

Ardından JBoss sunucusunu yapılandırmak ve EAP hizmetini ayarlamak için aşağıdaki komutları kullanın:

Not

JBOSS_EAP_USER JBoss EAP yönetim kullanıcısını yapılandırmak için ve JBOSS_EAP_PASSWORD değerleri gereklidir.

# 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/bin/add-user.sh  -u $JBOSS_EAP_USER -p $JBOSS_EAP_PASSWORD -g 'guest,mgmtgroup'

Not

Microsoft, kullanılabilir en güvenli kimlik doğrulama akışının kullanılmasını önerir. Veritabanları, önbellekler, mesajlaşma veya yapay zeka hizmetleri gibi bu yordamda açıklanan kimlik doğrulama akışı, uygulamaya çok yüksek düzeyde güven gerektirir ve diğer akışlarda mevcut olmayan riskler taşır. Bu akışı yalnızca parolasız veya anahtarsız bağlantılar için yönetilen kimlikler gibi daha güvenli seçenekler uygun olmadığında kullanın. Yerel makine işlemleri için parolasız veya anahtarsız bağlantılar için kullanıcı kimliklerini tercih edin.

Çıkış aşağıdaki örneğe benzer görünmelidir:

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'

Son olarak, EAP hizmetini başlatmak için aşağıdaki komutları kullanın:

# 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

Çıkış aşağıdaki örneğe benzer görünmelidir:

● 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).

Çağrıdan çıkmak için q yazın. Exit yazarak SSH bağlantısından çıkın.

Red Hat JBoss EAP hizmetini başlattıktan sonra yönetim konsoluna http://$ADMIN_VM_PUBLIC_IP:9990 web tarayıcınızdan erişebilirsiniz. Yapılandırılan kullanıcı adı jbossadmin ve parola Secret123456ile oturum açın.

Red Hat JBoss Enterprise Application Platform etki alanı denetleyicisi yönetim konsolunun ekran görüntüsü.

Çalışma Zamanı sekmesini seçin. Gezinti bölmesinde Topoloji'yi seçin. Kümenizin şimdilik yalnızca bir etki alanı denetleyicisi içerdiğini görmeniz gerekir:

Konak denetleyicilerini yapılandırma (çalışan düğümleri)

Kullanıcı olarak mspVM1 bağlanmak azureuser için SSH kullanın. Aşağıdaki komutla VM'nin genel IP adresini alın:

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

üzerinde mspVM1konak denetleyicisini ayarlamak için aşağıdaki komutları kullanın:

# 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/domain/configuration/domain.xml $EAP_HOME/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/domain/configuration/domain.xml
sudo chown jboss:jboss $EAP_HOME/domain/configuration/domain.xml

Not

Microsoft, kullanılabilir en güvenli kimlik doğrulama akışının kullanılmasını önerir. Veritabanları, önbellekler, mesajlaşma veya yapay zeka hizmetleri gibi bu yordamda açıklanan kimlik doğrulama akışı, uygulamaya çok yüksek düzeyde güven gerektirir ve diğer akışlarda mevcut olmayan riskler taşır. Bu akışı yalnızca parolasız veya anahtarsız bağlantılar için yönetilen kimlikler gibi daha güvenli seçenekler uygun olmadığında kullanın. Yerel makine işlemleri için parolasız veya anahtarsız bağlantılar için kullanıcı kimliklerini tercih edin.

konak denetleyicisi değişikliklerini mspVM1uygulaması için aşağıdaki komutları kullanın:

# Setup host controller
sudo -u jboss $EAP_HOME/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})"

Çıktının son duruşu aşağıdaki örneğe benzer olmalıdır. Aksi takdirde devam etmeden önce sorunu giderin ve çözün.

[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

Ardından, JBoss sunucusunu yapılandırmak ve EAP hizmetini ayarlamak için aşağıdaki komutları kullanın:

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

Çıkış aşağıdaki örneğe benzer görünmelidir:

● 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).

Çağrıdan çıkmak için q yazın. Exit yazarak SSH bağlantısından çıkın.

Kullanıcı olarak mspVM2 bağlanmak azureuser için SSH kullanın. Aşağıdaki komutla VM'nin genel IP adresini alın:

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

üzerinde mspVM2önceki adımları yineleyin ve ardından exit yazarak SSH bağlantısından çıkın.

öğesine iki konak denetleyicisi bağlandıktan adminVMsonra, aşağıdaki ekran görüntüsünde gösterildiği gibi küme topolojisini görebilmeniz gerekir:

Red Hat JBoss EAP kümesini Azure Uygulaması lication Gateway ile kullanıma sunma

Kümeyi Azure VM'lerinde oluşturduğunuza göre, bu bölüm JBoss EAP'yi Azure Uygulaması lication Gateway ile İnternet'e sunma konusunda size yol gösterir.

Azure Uygulaması lication Ağ Geçidi oluşturma

Red Hat JBoss EAP'yi İnternet'te kullanıma açmak için bir genel IP adresi gerekir. Genel IP adresini oluşturun ve ardından bir Azure Uygulaması lication ağ geçidini onunla ilişkilendirin. Aşağıdaki örnekte gösterildiği gibi oluşturmak için az network public-ip create komutunu kullanın:

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

Ardından arka uç sunucularını Application Gateway arka uç havuzuna ekleyin. Aşağıdaki komutları kullanarak arka uç IP adreslerini sorgula. Yalnızca arka uç sunucuları olarak yapılandırılmış konak denetleyicileriniz (iş düğümleri) vardır.

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)

Ardından bir Azure Uygulaması Lication Gateway oluşturun. Aşağıdaki örnek, varsayılan arka uç havuzunda konak denetleyicileriyle bir uygulama ağ geçidi oluşturur:

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}

Not

Bu örnek, HTTP ile Red Hat JBoss EAP sunucularına basit erişim ayarlar. Güvenli erişim istiyorsanız, Application Gateway ile uçtan uca TLS'deki yönergeleri izleyerek TLS/SSL sonlandırmayı yapılandırın.

Bu örnek, 8080 numaralı bağlantı noktasındaki konak denetleyicilerini kullanıma sunar. Sonraki adımlarda kümeye veritabanı bağlantısı olan örnek bir uygulama dağıtacaksınız.

esnek PostgreSQL için Azure Veritabanı sunucuya bağlanma

Bu bölümde, Red Hat JBoss EAP kümenizde PostgreSQL için Azure Veritabanı Esnek Sunucu örneği oluşturma ve PostgreSQL bağlantısı yapılandırma işlemleri gösterilmektedir.

PostgreSQL için Azure Veritabanı Esnek Sunucu örneği oluşturma

Veritabanı örneğini oluşturmak için aşağıdaki adımları kullanın:

  1. Aşağıdaki örnekte gösterildiği gibi PostgreSQL için Azure Veritabanı Esnek Sunucu örneği sağlamak için az postgres flexible-server create komutunu kullanın:

    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 hizmetlerinden erişime izin vermek için aşağıdaki komutları kullanın:

    # 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. Veritabanını oluşturmak için aşağıdaki komutu kullanın:

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

Sürücüyü yükleme

JBoss yönetim CLI'sı ile JDBC sürücüsünü yüklemek için aşağıdaki adımları kullanın:

  1. SSH için adminVM aşağıdaki komutu kullanın. Zaten açık bir bağlantınız varsa bu adımı atlayabilirsiniz.

    ssh -A -i ~/.ssh/jbosseapvm azureuser@$ADMIN_VM_PUBLIC_IP
    
  2. adminVM'de JDBC sürücüsünü indirmek için aşağıdaki komutları kullanın:

    # Create JDBC driver and module directory
    jdbcDriverModuleDirectory=$EAP_HOME/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 sürücüsünü konak denetleyicilerine kopyalamak için aşağıdaki komutları kullanın:

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

    Sunucu günlüğü ve mspVM1mspVM2 konumunda /var/opt/rh/eap7/lib/wildfly/domain/servers/mspvm1-server0/log/server.logbulunur. Dağıtım başarısız olursa devam etmeden önce bu günlük dosyasını inceleyin ve sorunu çözün.


  1. JDBC sürücüsünü kaydetmek için aşağıdaki komutları kullanın:

    # Register JDBC driver
    sudo -u jboss $EAP_HOME/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,driver-class-name=org.postgresql.Driver)"
    

Red Hat JBoss EAP kümesi için veritabanı bağlantısını yapılandırma

Veritabanı sunucusunu başlattınız, gerekli kaynak kimliğini edindiyseniz ve JDBC sürücüsünü yüklediyseniz. Ardından, bu bölümdeki adımlarda JBoss CLI kullanarak daha önce oluşturduğunuz PostgreSQL örneğiyle bir veri kaynağı bağlantısı yapılandırma adımları gösterilmektedir.

  1. Aşağıdaki komutu kullanarak bir terminali ve SSH'yi adminVM açın:

    ssh -i ~/.ssh/jbosseapvm azureuser@$ADMIN_VM_PUBLIC_IP
    
  2. Aşağıdaki komutları kullanarak veri kaynağı oluşturun:

    # 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/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} "
    

adlı java:jboss/datasources/JavaEECafeDBbir veri kaynağını başarıyla yapılandırmışsınız.

Java EE Cafe örnek uygulamasını dağıtma

Java EE Cafe örnek uygulamasını Red Hat JBoss EAP kümesine dağıtmak için aşağıdaki adımları kullanın:

  1. Java EE Cafe'yi oluşturmak için aşağıdaki adımları kullanın. Bu adımlarda Git ve Maven yüklü yerel bir ortamınız olduğu varsayılır:

    1. GitHub'dan kaynak kodu kopyalamak için aşağıdaki komutu kullanın:

      git clone https://github.com/Azure/rhel-jboss-templates.git --branch 20240904 --single-branch
      
    2. Kaynak kodu oluşturmak için aşağıdaki komutu kullanın:

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

      Bu komut eap-coffee-app/target/javaee-café.war dosyasını oluşturur. Bu dosyayı sonraki adımda karşıya yüklersiniz.

  2. Bir web tarayıcısı açın ve adresinde http://<adminVM-public-IP>:9990yönetim konsoluna gidin, ardından kullanıcı adı jbossadmin ve parola Secret123456ile oturum açın.

  3. javaee-café.war dosyasını İçerik Deposu'na yüklemek için aşağıdaki adımları kullanın:

    1. Red Hat JBoss EAP yönetim konsolunun Dağıtımlar sekmesinden gezinti bölmesinde İçerik Deposu'nu seçin.

    2. Ekle düğmesini ve ardından İçeriği Karşıya Yükle'yi seçin.

      Red Hat JBoss Kurumsal Uygulama Platformu Dağıtımları sekmesinin İçerik Yükle menü seçeneğinin vurgulandığı ekran görüntüsü.

    3. Javaee-café.war dosyasını seçmek için tarayıcı dosya seçicisini kullanın.

    4. İleri'yi seçin.

    5. Sonraki ekranda varsayılanları kabul edin ve ardından Son'u seçin.

    6. İçeriği görüntüle'yi seçin.

  4. Bir uygulamayı main-server-groupuygulamasına dağıtmak için aşağıdaki adımları kullanın:

    1. İçerik Deposu'ndan javaee-café.war öğesini seçin.

    2. Açılan menüde Dağıt'ı seçin.

    3. javaee-café.warmain-server-groupiçin sunucu grubu olarak seçin.

    4. Dağıtımı başlatmak için Dağıt'ı seçin. Aşağıdaki ekran görüntüsüne benzer bir bildirim görmeniz gerekir:

      Başarılı dağıtım bildiriminin ekran görüntüsü.

Red Hat JBoss EAP küme yapılandırmasını test edin

JBoss EAP kümesini yapılandırıp uygulamayı ona dağıttınız. Tüm ayarları doğrulamak üzere uygulamaya erişmek için aşağıdaki adımları kullanın:

  1. Azure Uygulaması lication Gateway'in genel IP adresini almak için aşağıdaki komutu kullanın:

    az network public-ip show \
        --resource-group $RESOURCE_GROUP_NAME \
        --name myAGPublicIPAddress \
        --query '[ipAddress]' \
        --output tsv
    
  2. Bir web tarayıcısı açın.

  3. URL'si http://<gateway-public-ip-address>/javaee-cafe/ile uygulamaya gidin. Sondaki eğik çizgiyi unutmayın.

  4. Kahve eklemeyi ve kaldırmayı deneyin.

Kaynakları temizleme

Azure ücretlerinden kaçınmak için gereksiz kaynakları temizlemeniz gerekir. Azure VM'de Red Hat JBoss EAP kümesinin dağıtılmaya ihtiyacı kalmadığında Red Hat JBoss EAP sunucularının kaydını kaldırın ve Azure kaynaklarını kaldırın.

Red Hat JBoss EAP sunucularının ve VM'lerinin kaydını Red Hat abonelik yönetiminden kaldırmak için aşağıdaki komutları kullanın:

# 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"

Kaynak grubunu $RESOURCE_GROUP_NAMEsilmek için aşağıdaki komutu kullanın:

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

Sonraki adımlar

Azure'da JBoss EAP çalıştırma seçeneklerini keşfetmeye devam edin.