JBoss EAP uygulamalarını Azure App Service’teki JBoss EAP’ye geçirme

Bu kılavuzda, mevcut bir JBoss EAP uygulamasını bir Azure Uygulaması Hizmeti örneğindeki JBoss EAP üzerinde çalışacak şekilde geçirmek istediğinizde bilmeniz gerekenler açıklanmaktadır.

Geçiş öncesi

Geçişin başarılı olduğundan emin olmak için, başlamadan önce aşağıdaki bölümlerde açıklanan değerlendirme ve envanter adımlarını tamamlayın.

Envanter sunucusu kapasitesi

Geçerli üretim sunucularının donanımını (bellek, CPU, disk) ve ortalama ve en yüksek istek sayısını ve kaynak kullanımını belgeleyin. Seçtiğiniz geçiş yolundan bağımsız olarak bu bilgilere ihtiyaç duyacaksınız. Örneğin düğüm havuzunuzdaki VM'lerin boyutunu, kapsayıcı tarafından kullanılacak bellek miktarını ve kapsayıcının ihtiyaç duyduğu CPU paylaşımını seçmeye yardımcı olmak için yararlıdır.

AKS'de düğüm havuzlarını yeniden boyutlandırmak mümkündür. Nasıl yapılacağını öğrenmek için bkz . Azure Kubernetes Service'te (AKS) düğüm havuzlarını yeniden boyutlandırma.

Tüm gizli dizilerin envanterini çıkarma

Üretim sunucularındaki tüm özellikleri ve yapılandırma dosyalarını gizli diziler ve parolalar için denetleyin. WAR dosyalarınızda jboss-web.xml’yi denetlediğinizden emin olun. Uygulamanızın içinde parolalar ve kimlik bilgileri içeren yapılandırma dosyaları da bulunabilir.

Bu gizli dizileri Azure Key Vault’ta depolamanız faydalı olabilir. Daha fazla bilgi için bkz. Temel Azure Key Vault kavramları.

Key Vault başvuruları ile App Service örneğinizde Key Vault gizli dizilerini kullanabilirsiniz. Key Vault başvuruları, uygulamanızdaki gizli dizileri kullanırken bunları güvende ve şifrelenmiş tutmanızı sağlar. Daha fazla bilgi için bkz. App Service ve Azure İşlevleri için Key Vault başvurularını kullanma.

Tüm sertifikaların envanterini çıkarma

Genel SSL uç noktaları için kullanılan tüm sertifikaları belgeleyin. Aşağıdaki komutu çalıştırarak üretim sunucularındaki tüm sertifikaları görüntüleyebilirsiniz:

keytool -list -v -keystore <path to keystore>

Desteklenen Java sürümünün doğru çalıştığını onaylama

Azure VM'lerinde JBoss EAP, desteklenen bir Java sürümü gerektirir. JDK'nin hangi sürümünün kullanılacağına ilişkin yönergeler için Red Hat belgelerindeki Desteklenen Yapılandırmalar'a bakın.

Dekont

Geçerli sunucunuz desteklenmeyen bir JDK (Oracle JDK veya IBM OpenJ9 gibi) çalıştırıyorsa bu doğrulama özellikle önemlidir.

Geçerli Java sürümünüzü öğrenmek için üretim sunucunuzda oturum açın ve şu komutu çalıştırın:

java -version

Dış kaynakların envanterini çıkarma

Veri kaynakları ve JMS ileti aracıları gibi dış kaynaklar Java Adlandırma ve Dizin Arabirimi (JNDI) aracılığıyla eklenir. Bunlara benzer kaynakların geçirilmesi veya yeniden yapılandırılması gerekebilir.

Uygulamanızın içinde

WEB-INF/jboss-web.xml ve/veya WEB-INF/web.xml dosyalarını inceleyin. <Context> öğesi içindeki <Resource> öğelerini arayın.

Veri kaynakları

Veri kaynakları, type özniteliği javax.sql.DataSource olarak ayarlanmış JNDI kaynaklarıdır. Aşağıdaki bilgileri her veri kaynağı için belgeleyin:

  • Veri kaynağının adı nedir?
  • Bağlantı havuzu yapılandırması nedir?
  • JDBC sürücüsü JAR dosyasını nerede bulabilirim?

Daha fazla bilgi için JBoss EAP belgelerinde JBoss EAP Veri Kaynakları Hakkında bölümüne göz atın.

Diğer tüm dış kaynaklar

Bu kılavuzda olası tüm dış bağımlılıkları belgelemek uygulanabilir bir yöntem değildir. Geçişten sonra uygulamanızın tüm dış bağımlılıklarının karşılandığını doğrulamak ekibinizin sorumluluğundadır.

Oturum çoğaltmanın kullanılıp kullanılmadığını belirleme

Uygulamanız oturum çoğaltma kullanıyorsa uygulamanızı değiştirerek bu bağımlılığı kaldırmanız gerekir. App Service, örneklerin birbirleriyle doğrudan iletişim kurmasına izin vermez.

Dosya sisteminin kullanılıp kullanılmayacağını ve nasıl kullanıldığını belirleme

Uygulama sunucusundaki dosya sisteminin her kullanımı yeniden yapılandırma veya nadir durumlarda mimari değişiklikleri gerektirir. Dosya sistemi JBoss EAP modülleri veya uygulama kodunuz tarafından kullanılabilir. Aşağıdaki bölümlerde açıklanan senaryoların bazılarıyla veya tümüyle karşılaşabilirsiniz.

Salt okunur statik içerik

Uygulamanız şu anda statik içerik sunuyorsa bunun için alternatif bir konumunuz olması gerekir. Statik içeriği Azure Blob Depolama’ya taşımayı ve küresel olarak ışık hızında indirme işlemleri için Azure CDN eklemeyi düşünebilirsiniz. Daha fazla bilgi için bkz. Azure Depolama'de statik web sitesi barındırma ve Hızlı Başlangıç: Azure depolama hesabını Azure CDN ile tümleştirme. Statik içeriği Azure Spring Apps Enterprise planındaki bir uygulamaya doğrudan da dağıtabilirsiniz. Daha fazla bilgi için bkz . Web statik dosyalarını dağıtma.

Dinamik olarak yayımlanan statik içerik

Uygulamanız tarafından karşıya yüklenen/üretilen ama oluşturulduktan sonra sabit hale gelen statik içeriğe uygulamanızda izin veriliyorsa, karşıya yüklemeleri ve CDN yenilemesini işlemek için Azure İşlevi’yle birlikte yukarıda açıklandığı gibi Azure Blob Depolama ve Azure CDN kullanabilirsiniz. Azure İşlevleri ile statik içeriği karşıya yükleme ve CDN’ye önceden yükleme başlığı altında kullanımınıza ilişkin örnek bir uygulama sağladık. Statik içeriği Azure Spring Apps Enterprise planındaki bir uygulamaya doğrudan da dağıtabilirsiniz. Daha fazla bilgi için bkz . Web statik dosyalarını dağıtma.

Dinamik veya dahili içerik

Uygulamanız tarafından sık yazılan ve okunan dosyalar (geçici veri dosyaları gibi) veya yalnızca uygulamanız tarafından görülebilen statik dosyalar için app service planınızla ilişkili yerel dosya depolama alanını kullanabilirsiniz. Daha fazla bilgi için bkz. Azure Uygulaması Hizmetinde işletim sistemi işlevselliği ve Azure Uygulaması Hizmeti dosya sistemini anlama.

Uygulamanızın zamanlanan işlere dayanıp dayanmadığını belirleme

Quartz Scheduler görevleri veya Unix cron işleri gibi zamanlanmış işler Azure Uygulaması Hizmeti ile KULLANıLMAMALIDIR. Azure Uygulaması Hizmeti, zamanlanmış görevleri içeren bir uygulamayı dahili olarak dağıtmanızı engellemez. Bununla birlikte uygulamanızın ölçeği genişletildiyse, aynı zamanlanan iş zamanlama dönemi başına birden çok kez çalıştırılabilir. Bu durum istenmeyen sonuçlar doğurabilir.

Uygulama kodunuzun içindeki veya dışındaki üretim sunucularında çalıştırılan zamanlanmış görevlerin envanterini oluşturun.

Şirket içine bağlantının gerekip gerekmediğini saptama

Uygulamanızın şirket içi hizmetlerinizden birine erişmesi gerekiyorsa Azure’ın bağlantı hizmetlerinden birini sağlamalısınız. Daha fazla bilgi için bkz. Şirket içi ağını Azure'a bağlamak için bir çözüm seçme. Alternatif olarak şirket içi kaynaklarınızın kullanıma sunduğu genel kullanıma açık API’leri kullanmak için uygulamanızı yeniden düzenlemeniz gerekir.

Java Message Service (JMS) Kuyruklarının mı yoksa Konularının mı kullanıldığını saptama

Uygulamanız JMS Kuyruklarını veya Konularını kullanıyorsa, bunları dışarıda barındırılan bir JMS sunucusuna geçirmeniz gerekir. Azure Service Bus ve Gelişmiş İleti Sıraya Alma Protokolü (AMQP), JMS kullananlar için harika bir geçiş stratejisi olabilir. Daha fazla bilgi için bkz. Azure Service Bus ve AMQP 1.0 ile JMS’yi kullanma.

JMS kalıcı depoları yapılandırıldıysa, bunların yapılandırmasını yakalamalı ve geçiş sonrasında uygulamalısınız.

JCA bağlayıcıların kullanımda olup olmadığını belirleme

Uygulamanız JCA bağlayıcıları kullanıyorsa JBoss EAP üzerinde JCA bağlayıcısını kullanabileceğinizi doğrulayın. JBoss EAP'de JCA bağlayıcısını kullanabilirseniz, kullanılabilir olması için JAR'leri sunucu sınıf yolu'na eklemeniz ve gerekli yapılandırma dosyalarını JBoss EAP sunucu dizinlerinde doğru konuma yerleştirmeniz gerekir.

JAAS’nin kullanımda olup olmadığını belirleme

Uygulamanız JAAS kullanıyorsa JAAS’nin nasıl yapılandırıldığını yakalamanız gerekir. Veritabanı kullanıyorsa JBoss EAP'de jaas etki alanına dönüştürebilirsiniz. Özel bir uygulamaysa JBoss EAP'de kullanılabileceğini doğrulamanız gerekir.

Uygulamanızın bir kaynak bağdaştırıcısı kullanıp kullanmadığını belirleme

Uygulamanızın kaynak bağdaştırıcısı (RA) gerekiyorsa JBoss EAP ile uyumlu olması gerekir. RA'nın tek başına bir JBoss EAP örneğinde düzgün çalışıp çalışmadığını belirlemek için bunu sunucuya dağıtın ve düzgün bir şekilde yapılandırın. RA düzgün çalışıyorsa, JAR'leri App Service'in sunucu sınıf yolunda eklemeniz ve gerekli yapılandırma dosyalarını JBoss EAP sunucu dizinlerinde doğru konuma yerleştirmeniz gerekir.

Uygulamanızın birden çok WAR’dan oluşup oluşmadığını saptama

Uygulamanız birden çok WAR’dan oluşuyorsa, bu WAR dosyalarından her birini ayrı uygulama olarak değerlendirmeli ve her biri için bu kılavuzu izlemelisiniz.

Uygulamanızın EAR olarak paketlenip paketlenmediğini saptama

Uygulamanız EAR dosyası olarak paketlendiyse application.xml dosyasını incelediğinizden ve yapılandırmalarını yakaladığınızdan emin olun.

Dekont

App Service kaynaklarınızı daha iyi kullanmak için web uygulamalarınızın her birini bağımsız olarak ölçeklendirebilmek istiyorsanız EAR'yi ayrı web uygulamalarına ayırmanız gerekir.

Üretim sunucularında çalıştırılan tüm dış işlemleri ve daemon’ları belirleme

Uygulama sunucusunun dışında çalıştırılan izleme deamon’ları gibi işlemleriniz varsa, bunları ortadan kaldırmanız veya başka bir yere geçirmeniz gerekir.

Yerinde test gerçekleştirme

Kapsayıcı görüntülerinizi oluşturmadan önce uygulamanızı App Service'te kullanmayı düşündüğünüz JDK ve JBoss EAP sürümlerine geçirin. Uyumluluk ve performanstan emin olmak için uygulamayı kapsamlı olarak test edin.

App Service'te JBoss EAP özellik notları

App Service'te JBoss EAP kullanırken aşağıdaki notları dikkate aldığınızdan emin olun.

  • JBoss EAP yönetim konsolu: JBoss web konsolu App Service'te kullanıma sunulmaz. Bunun yerine, Azure portalı uygulamanız için yönetim API'leri sağlar ve Azure CLI, Azure Maven Eklentisi veya diğer Azure geliştirici araçlarını kullanarak dağıtmanız gerekir.

  • İşlemler: Uygulama örnekleri durum bilgisi olmayan bir şekilde çalıştırıldığından İşlemler API'si şu anda desteklenmemektedir. Daha fazla bilgi için Red Hat belgelerindeki JBoss EAP'de işlemleri yönetme bölümüne bakın.

  • Yönetilen etki alanı modu: Çok sunuculu bir üretim ortamında, JBoss EAP'deki Yönetilen Etki Alanı modu merkezi yönetilen özellikler sunar. Ancak App Service'te JBoss EAP ile App Service platformu, sunucu örneklerinizin yapılandırılması ve yönetilmesi sorumluluğunu üstlenir. App Service, JBoss EAP'nin yönetilen etki alanı modu gereksinimini ortadan kaldırır. Etki alanı modu, sanal makine tabanlı çok sunuculu dağıtımlar için iyi bir seçimdir. Daha fazla bilgi için Red Hat belgelerindeki Yönetilen etki alanları hakkında bölümüne bakın.

  • Sunucudan sunucuya kümeleme: 15 Mart 2022 itibarıyla JBoss EAP'nin kümelenmiş dağıtımı Genel Önizleme'de desteklenir. Bu destek, uygulamalarınızı App Service'e dağıtmadan önce artık aşağıdaki özellikleri kaldırmanız gerekmeyebileceği anlamına gelir:

    • Durum bilgisi olan oturum çekirdekleri.
    • Dağıtılmış işlemler.
    • Örnekten örneğe iletişim veya yüksek kullanılabilirlik gerektiren benzer özellikler.

    Daha fazla bilgi için, Azure Uygulaması Hizmeti için Java uygulaması yapılandırma bölümünün sürüm duyurusu ve JBoss EAP'de Kümeleme bölümüne bakın.

Geçiş

Uygulamalar için Red Hat Geçiş Araç Seti

Red Hat Migration Toolkit for Applications, Visual Studio Code için ücretsiz bir uzantıdır. Bu uzantı, şirket içinden buluta geçiş için öneriler sağlamak üzere uygulama kodunuzu ve yapılandırmanızı analiz eder. Daha fazla bilgi için bkz. Uygulamalar için Geçiş Araç Seti'ne genel bakış.

Bu kılavuzun içeriği doğru App Service Planı türünü seçme, oturum durumunuzu dışlaştırma ve JBoss Yönetim arabirimi yerine EAP örneklerinizi yönetmek için Azure'ı kullanma gibi geçiş yolculuğunun diğer bileşenlerini ele alma konusunda size yardımcı olur.

JBoss EAP çalışma zamanı için Azure Uygulaması Hizmeti sağlama

Kaynak grubu ve Azure Uygulaması Hizmet Planı oluşturmak için aşağıdaki komutları kullanın. App Service Planı oluşturulduktan sonra, JBoss EAP çalışma zamanı kullanılarak bir Linux web uygulaması planı oluşturulur. JBoss EAP sitelerini yalnızca PremiumV3 ve IsolatedV2 App Service Planı katmanlarında oluşturabilirsiniz.

Belirtilen ortam değişkenlerinin uygun değerlere sahip olduğundan emin olun.

Dekont

PremiumV3 ve IsolatedV2' nin her ikisi de Ayrılmış Örnek fiyatlandırması için uygundur ve bu da maliyetlerinizi düşürebilir. App Service Planı katmanları ve Ayrılmış Örnek fiyatlandırması hakkında daha fazla bilgi için bkz . App Service fiyatlandırması.

az group create --resource-group $resourceGroup --location eastus
az acr create --resource-group $resourceGroup --name $acrName --sku Standard
az appservice plan create \
    --resource-group $resourceGroup \
    --name $jbossAppService \
    --is-linux \
    --sku P1V2
az webapp create \
    --resource-group $resourceGroup \
    --name $jbossWebApp \
    --plan $jbossAppServicePlan \
    --runtime "JBOSSEAP|7-java8"
    #  Or use "JBOSSEAP|7-java11" if you're using Java 11

Uygulama oluşturma

Aşağıdaki Maven komutunu kullanarak uygulamayı derleyin.

mvn clean install -DskipTests

Uygulamayı dağıtma

Uygulamanız bir Maven POM dosyasından derleniyorsa, Web Uygulamasını oluşturmak ve uygulamanızı dağıtmak için Maven için Webapp eklentisini kullanın. Daha fazla bilgi için bkz. Hızlı Başlangıç: Azure Uygulaması Hizmetinde Java uygulaması oluşturma.

JBoss EAP uygulamalarının dağıtımını otomatikleştirmek için Web App için Azure Pipelines görevini veya Azure WebApp'e dağıtmak için GitHub Action'ı kullanabilirsiniz.

Veri kaynaklarını ayarlama

Bir veri kaynağını JBoss EAP'ye kaydederken üç temel adım vardır: JDBC sürücüsünü karşıya yükleme, JDBC sürücüsünü modül olarak ekleme ve modülü kaydetme. Daha fazla bilgi için JBoss EAP belgelerinde Veri Kaynağı Yönetimi'ne bakın. App Service durum bilgisi olmayan bir barındırma hizmetidir, bu nedenle veri kaynağı modülünü ekleme ve kaydetmeye yönelik yapılandırma komutlarının betiklenmesi ve kapsayıcı başlatılırken uygulanması gerekir.

Veri kaynaklarını ayarlamak için aşağıdaki adımları kullanın.

  1. Veritabanınızın JDBC sürücüsünü alın.

  2. JDBC sürücüsü için bir XML modülü tanım dosyası oluşturun. Aşağıda gösterilen örnek PostgreSQL için bir modül tanımıdır. değerini kullandığınız JDBC sürücüsünün yolu ile değiştirdiğinizden resource-root path emin olun.

    <?xml version="1.0" ?>
    <module xmlns="urn:jboss:module:1.1" name="org.postgres">
        <resources>
        <!-- ***** IMPORTANT: REPLACE THIS PLACEHOLDER *******-->
        <resource-root path="/home/site/deployments/tools/postgresql-42.2.12.jar" />
        </resources>
        <dependencies>
            <module name="javax.api"/>
            <module name="javax.transaction.api"/>
        </dependencies>
    </module>
    
  3. JBoss CLI komutlarınızı jboss-cli-commands.cli adlı bir dosyaya yerleştirin. JBoss komutlarının modülü eklemesi ve veri kaynağı olarak kaydetmesi gerekir. Aşağıdaki örnekte PostgreSQL için JBoss CLI komutları gösterilmektedir.

    module add --name=org.postgres --resources=/home/site/deployments/tools/postgresql-42.2.12.jar --module-xml=/home/site/deployments/tools/postgres-module.xml
    
    /subsystem=datasources/jdbc-driver=postgres:add(driver-name="postgres",driver-module-name="org.postgres",driver-class-name=org.postgresql.Driver,driver-xa-datasource-class-name=org.postgresql.xa.PGXADataSource)
    
    data-source add --name=postgresDS --driver-name=postgres --jndi-name=java:jboss/datasources/postgresDS --connection-url=${POSTGRES_CONNECTION_URL,env.POSTGRES_CONNECTION_URL:jdbc:postgresql://db:5432/postgres} --user-name=${POSTGRES_SERVER_ADMIN_FULL_NAME,env.POSTGRES_SERVER_ADMIN_FULL_NAME:postgres} --password=${POSTGRES_SERVER_ADMIN_PASSWORD,env.POSTGRES_SERVER_ADMIN_PASSWORD:example} --use-ccm=true --max-pool-size=5 --blocking-timeout-wait-millis=5000 --enabled=true --driver-class=org.postgresql.Driver --exception-sorter-class-name=org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLExceptionSorter --jta=true --use-java-context=true --valid-connection-checker-class-name=org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLValidConnectionChecker
    
  4. JBoss CLI komutlarını çağıran startup_script.sh adlı bir başlangıç betiği oluşturun. Aşağıdaki örnekte jboss-cli-commands.cli dosyanızı çağırma gösterilmektedir. Daha sonra App Service'i örnek başlatıldığında bu betiği çalıştıracak şekilde yapılandıracaksınız.

    $JBOSS_HOME/bin/jboss-cli.sh --connect --file=/home/site/deployments/tools/jboss-cli-commands.cli
    
  5. Seçtiğiniz bir FTP istemcisini kullanarak JDBC sürücünüzü, jboss-cli-commands.cli, startup_script.sh ve modül tanımını /site/deployments/tools/ adresine yükleyin.

  6. Sitenizi kapsayıcı başlatıldığında startup_script.sh dosyasını çalıştıracak şekilde yapılandırın. Azure portalında Yapılandırma > Genel Ayarlar > Başlangıç Komutu'na gidin. Başlangıç komut alanını /home/site/deployments/tools/startup_script.sh olarak ayarlayın ve Kaydet'i seçin.

  7. Web uygulamasını yeniden başlatın; bu, yapılandırma betiğini çalıştırmasına neden olur.

  8. Uygulamanız için JTA veri kaynağı yapılandırmasını güncelleştirin. Uygulamanız için src/main/resources/META-INF/persistence.xml dosyasını açın ve öğesini bulun<jta-data-source>. İçeriklerini aşağıda gösterildiği gibi değiştirin:

    <jta-data-source>java:jboss/datasources/postgresDS</jta-data-source>
    

Uygulama oluşturma

Aşağıdaki Maven komutunu kullanarak uygulamayı derleyin.

mvn clean install -DskipTests

Uygulamayı dağıtma

Uygulamanız bir Maven POM dosyasından derleniyorsa, Web Uygulamasını oluşturmak ve uygulamanızı dağıtmak için Maven için Webapp eklentisini kullanın. Daha fazla bilgi için bkz. Hızlı Başlangıç: Azure Uygulaması Hizmetinde Java uygulaması oluşturma.

JBoss EAP uygulamalarının dağıtımını otomatikleştirmek için Web App için Azure Pipelines görevini veya Azure WebApp'e dağıtmak için GitHub Action'ı kullanabilirsiniz.

Geçiş sonrası

Uygulamanızı Azure Uygulaması Hizmeti'ne geçirdiğinizden, beklediğiniz gibi çalıştığını doğrulamanız gerekir. Bunu yaptıktan sonra uygulamanızı daha buluta özel hale getirmenizi sağlayabilecek bazı önerilerimiz var.

Öneriler

  • Dosya depolama için /home dizinini kullanmayı tercih ettiyseniz, bunu Azure Depolama ile değiştirmeyi göz önünde bulundurun. Daha fazla bilgi için bkz. App Service'teki bir kapsayıcıdan ağ paylaşımı olarak Azure Depolama erişme.

  • /home dizininde bağlantı dizesi, SSL anahtarları ve diğer gizli dizi bilgilerini içeren yapılandırmanız varsa, mümkün olduğunda uygulama ayarlarıyla Azure Key Vault ve/veya parametre ekleme kullanmayı göz önünde bulundurun. Daha fazla bilgi için bkz. Azure portalında App Service ve Azure İşlevleri için Key Vault başvurularını kullanma ve App Service uygulamasını yapılandırma.

  • Sıfır kapalı kalma süresine sahip güvenilir dağıtımlar için dağıtım yuvalarını kullanmayı göz önünde bulundurun. Daha fazla bilgi için bkz. Azure App Service’te hazırlık ortamları ayarlama.

  • DevOps stratejisini tasarlayın ve uygulayın. Güvenilirliği korurken geliştirme hızınızı da artırmak için Azure Pipelines ile dağıtımları ve testleri otomatikleştirmeyi düşünün. Daha fazla bilgi için bkz . Java web uygulaması oluşturma ve dağıtma. Dağıtım yuvalarını kullandığınızda, yuva değişiminin ardından bir yuvaya dağıtımı otomatikleştirebilirsiniz. Daha fazla bilgi için Azure Web App (Linux) dağıtma bölümünün Yuvaya dağıtma bölümüne bakın.

  • İş sürekliliği ve olağanüstü durum kurtarma stratejisini tasarlayın ve uygulayın. Görev açısından kritik uygulamalar için çok bölgeli dağıtım mimarisi uygulamayı düşünebilirsiniz. Daha fazla bilgi için bkz . Yüksek oranda kullanılabilir çok bölgeli web uygulaması.