Azure App Service için bir Java uygulaması yapılandırma
Azure App Service, java geliştiricilerinin java SE, tomcat ve jpatron EAP web uygulamalarını tam olarak yönetilen bir hizmette hızlı bir şekilde oluşturmasını, dağıtmasını ve ölçeklendirmelerini sağlar. Maven eklentilerine, komut satırından veya IntelliJ, tutulma veya Visual Studio Code gibi düzenleyicilerde uygulamalar dağıtın.
Bu kılavuz, App Service kullanarak Java geliştiricileri için temel kavramlar ve yönergeler sağlar. Azure App Service hiç kullanmadıysanız, önce Java hızlı başlangıcı ' nı okumanız gerekir. Java geliştirmeye özgü olmayan App Service kullanımı hakkında genel sorular App SERVICE SSS' de yanıtlanmıştır.
Java sürümünü göster
Geçerli Java sürümünü göstermek için Cloud Shellaşağıdaki komutu çalıştırın:
az webapp config show --name <app-name> --resource-group <resource-group-name> --query "[javaVersion, javaContainer, javaContainerVersion]"
Desteklenen tüm Java sürümlerini göstermek için Cloud Shellaşağıdaki komutu çalıştırın:
az webapp list-runtimes | grep java
Geçerli Java sürümünü göstermek için Cloud Shellaşağıdaki komutu çalıştırın:
az webapp config show --resource-group <resource-group-name> --name <app-name> --query linuxFxVersion
Desteklenen tüm Java sürümlerini göstermek için Cloud Shellaşağıdaki komutu çalıştırın:
az webapp list-runtimes --linux | grep "JAVA\|TOMCAT\|JBOSSEAP"
Uygulamanızı dağıtma
Derleme Araçları
Maven
Azure Web Apps Için Maven eklentisiIle, Azure Web uygulamasına yönelik Maven Java projenizi, proje kökündeki bir komutla kolayca hazırlayabilirsiniz:
mvn com.microsoft.azure:azure-webapp-maven-plugin:2.2.0:config
Bu komut azure-webapp-maven-plugin , var olan bir Azure Web uygulamasını seçmenizi veya yeni bir tane oluşturmanızı isteyerek bir eklenti ve ilgili yapılandırma ekler. Ardından, aşağıdaki komutu kullanarak Java uygulamanızı Azure 'a dağıtabilirsiniz:
mvn package azure-webapp:deploy
Aşağıda örnek bir yapılandırma verilmiştir pom.xml :
<plugin>
<groupId>com.microsoft.azure</groupId>
<artifactId>azure-webapp-maven-plugin</artifactId>
<version>2.2.0</version>
<configuration>
<subscriptionId>111111-11111-11111-1111111</subscriptionId>
<resourceGroup>spring-boot-xxxxxxxxxx-rg</resourceGroup>
<appName>spring-boot-xxxxxxxxxx</appName>
<pricingTier>B2</pricingTier>
<region>westus</region>
<runtime>
<os>Linux</os>
<webContainer>Java SE</webContainer>
<javaVersion>Java 11</javaVersion>
</runtime>
<deployment>
<resources>
<resource>
<type>jar</type>
<directory>${project.basedir}/target</directory>
<includes>
<include>*.jar</include>
</includes>
</resource>
</resources>
</deployment>
</configuration>
</plugin>
Gradle
Eklentiyi ' a ekleyerek Azure Web Apps Için Gradle eklentisini ayarlayın
build.gradle:plugins { id "com.microsoft.azure.azurewebapp" version "1.2.0" }Web uygulaması ayrıntılarınızı yapılandırın, ilgili Azure kaynakları mevcut değilse oluşturulur. Aşağıda örnek bir yapılandırma verilmiştir. Ayrıntılar için bu belgeyebakın.
azurewebapp { subscription = '<your subscription id>' resourceGroup = '<your resource group>' appName = '<your app name>' pricingTier = '<price tier like 'P1v2'>' region = '<region like 'westus'>' runtime { os = 'Linux' webContainer = 'Tomcat 9.0' // or 'Java SE' if you want to run an executable jar javaVersion = 'Java 8' } appSettings { <key> = <value> } auth { type = 'azure_cli' // support azure_cli, oauth2, device_code and service_principal } }Tek bir komutla dağıtın.
gradle azureWebAppDeploy
IDE
Azure, popüler Java 'lar için aşağıdakiler de dahil olmak üzere sorunsuz Java App Service geliştirme deneyimi sağlar:
- VS Code: Java Web Apps Visual Studio Code
- INTELLIJ fikir:ıntellij kullanarak Azure App Service için Merhaba Dünya Web uygulaması oluşturma
- Çakışan Küreler:tutulma kullanarak Azure App Service için Merhaba Dünya Web uygulaması oluşturma
Kudu API 'SI
Java SE
. jar dosyalarını Java SE dağıtmak için /api/publish/ kudu sitesinin uç noktasını kullanın. Bu API hakkında daha fazla bilgi için Bu belgeyebakın.
Not
app.jarUygulamanızı tanımlamak ve çalıştırmak için,. jar uygulamanızın adı App Service olmalıdır. Maven eklentisi (yukarıda bahsedilen), dağıtım sırasında uygulamanızı sizin için otomatik olarak yeniden adlandıracaktır. JAR 'nizi app. jar'e yeniden adlandırmak istemiyorsanız,. jar uygulamanızı çalıştırmak için komutuyla bir kabuk betiği yükleyebilirsiniz. Bu betiğin mutlak yolunu portalın yapılandırma bölümündeki başlangıç dosyası metin kutusuna yapıştırın. Başlatma dizesi içine yerleştirildiği dizinden çalıştırılmaz. Bu nedenle başlatma dizenizde her zaman başvuru dosyalarının mutlak yollarını kullanın (örneğin: java -jar /home/myapp/myapp.jar).
Tomcat
. War dosyalarını Tomcat 'e dağıtmak için, arka /api/wardeploy/ uç noktasını kullanarak arşiv DOSYANıZı gönderin. Bu API hakkında daha fazla bilgi için Bu belgeyebakın.
JBoss EAP
. War dosyalarını Jpato 'a dağıtmak için, /api/wardeploy/ Arşiv DOSYANıZı göndermek için uç noktasını kullanın. Bu API hakkında daha fazla bilgi için Bu belgeyebakın.
. Ear dosyalarını dağıtmak için FTP 'yi kullanın. . Ear uygulamanız, uygulamanızın yapılandırmasında tanımlanan bağlam köküne dağıtılır. Örneğin, uygulamanızın bağlam kökü ise <context-root>myapp</context-root> , şu yolda siteye gözatabilmeniz gerekir /myapp : http://my-app-name.azurewebsites.net/myapp . Web uygulamasının kök yolda sunulmasını istiyorsanız, uygulamanızın bağlam kökünü kök yola ayarlarsa emin olun: <context-root>/</context-root> . Daha fazla bilgi için bkz. bir Web uygulamasının bağlam kökünü ayarlama.
FTP kullanarak. war veya. jar 'nizi dağıtmayın. FTP aracı başlangıç betiklerini, bağımlılıklarını veya diğer çalışma zamanı dosyalarını karşıya yüklemek üzere tasarlanmıştır. Web uygulamalarını dağıtmak için en iyi seçenek değildir.
Uygulamaları günlüğe kaydetme ve hata ayıklama
Performans raporları, trafik görselleştirmeleri ve sistem durumu sağlaması, Azure portal aracılığıyla her uygulama için kullanılabilir. Daha fazla bilgi için bkz. Azure App Service tanılamayı genel bakış.
Tanılama günlüklerini akışla aktarma
App Service’te uygulama kodunuzun içinden oluşturulan konsol günlüklerine erişmek için şu komutu Cloud Shell’de çalıştırarak tanılama günlüğüne kaydetmeyi açın:
az webapp log config --resource-group <resource-group-name> --name <app-name> --docker-container-logging filesystem --level Verbose
--level için olası değerler: Error, Warning, Info ve Verbose. Her düzey kendisinden önceki düzeyi içerir. Örneğin: Error yalnızca hata iletilerini içerir, Verbose ise tüm iletileri içerir.
Tanılama günlüğüne kaydetme açıldıktan sonra günlük akışını görmek için şu komutu çalıştırın:
az webapp log tail --resource-group <resource-group-name> --name <app-name>
Konsol günlüklerini hemen görmüyorsanız, 30 saniye içinde yeniden kontrol edin.
Not
Ayrıca, tarayıcıdan https://<app-name>.scm.azurewebsites.net/api/logs/docker adresine giderek günlük dosyalarını inceleyebilirsiniz.
Günlük akışını dilediğiniz zaman durdurmak için Ctrl+C yazın.
Kapsayıcının içinden oluşturulan konsol günlüklerine erişebilirsiniz.
İlk olarak, aşağıdaki komutu çalıştırarak kapsayıcı günlüğünü açın:
az webapp log config --name <app-name> --resource-group <resource-group-name> --docker-container-logging filesystem
<app-name>Ve ' i <resource-group-name> Web uygulamanız için uygun adlarla değiştirin.
Kapsayıcı günlüğü açıldıktan sonra, günlük akışını görmek için şu komutu çalıştırın:
az webapp log tail --name <app-name> --resource-group <resource-group-name>
Konsol günlüklerini hemen görmüyorsanız, 30 saniye içinde yeniden kontrol edin.
Günlük akışını istediğiniz zaman durdurmak için CTRL + C yazın.
Günlük dosyalarını konumundaki bir tarayıcıda da inceleyebilirsiniz https://<app-name>.scm.azurewebsites.net/api/logs/docker .
Daha fazla bilgi için bkz. Cloud Shell akış günlükleri.
SSH konsol erişimi
Kapsayıcınızda doğrudan SSH oturumu başlatabilmek için uygulamanızın çalışıyor olması gerekir.
Aşağıdaki URL'yi tarayıcınıza yapıştırın ve <app-name> yerine kendi uygulamanızın adını yazın:
https://<app-name>.scm.azurewebsites.net/webssh/host
Kimlik doğrulamasından geçmediyseniz bağlantıyı kurabilmek için Azure aboneliğinizle kimliğinizi doğrulamanız gerekir. Kimliğiniz doğrulandıktan sonra kapsayıcınızda komut çalıştırmak için kullanabileceğiniz tarayıcı içi kabuk ortamını görürsünüz.

Not
/home dizininin dışında yaptığınız değişiklikler kapsayıcıda depolanır ve uygulama yeniden başlatıldığında kalıcı olmaz.
Yerel makinenizden uzak SSH oturumu açmak için bkz. Uzak kabuktan SSH oturumu açma.
Sorun giderme araçları
Yerleşik Java görüntüleri, alp Linux işletim sistemini temel alır. apkHerhangi bir sorun giderme aracını veya komutunu yüklemek için paket yöneticisini kullanın.
Uçuş Kaydedicisi
Azul JVM 'Leri kullanılarak App Service üzerindeki tüm Java çalışma zamanları, Zulu Uçuş Kaydedicisi ile gelir. Bunu kullanarak JVM, sistem ve uygulama olaylarını kaydedebilir ve Java uygulamalarınızda sorunları giderebilirsiniz.
Zamanlanmış kayıt
Zamanlanmış bir kayıt almak için Java uygulamasının PID (Işlem KIMLIĞI) gereklidir. PID 'yi bulmak için, Web uygulamanızın SCM sitesinde bir tarayıcıyı açın https://<your-site-name>.scm.azurewebsites.net/ProcessExplorer/ . Bu sayfada Web uygulamanızdaki çalışan süreçler gösterilmektedir. Tabloda "Java" adlı işlemi bulun ve karşılık gelen PID 'yi (Işlem KIMLIĞI) kopyalayın.
Ardından, SCM sitesinin üst araç çubuğunda hata ayıklama konsolunu açın ve aşağıdaki komutu çalıştırın. <pid>Daha önce kopyaladığınız Işlem kimliğiyle değiştirin. Bu komut, Java uygulamanızın 30 saniyelik profil oluşturucu kaydını başlatır ve dizininde adlı bir dosya oluşturur timed_recording_example.jfr D:\home .
jcmd <pid> JFR.start name=TimedRecording settings=profile duration=30s filename="D:\home\timed_recording_example.JFR"
App Service SSH 'yi çalıştırın ve jcmd çalıştıran tüm Java işlemlerinin bir listesini görmek için komutunu çalıştırın. Jcmd 'nin yanı sıra, bir işlem KIMLIK numarası (PID) ile çalışan Java uygulamanızı görmeniz gerekir.
078990bbcd11:/home# jcmd
Picked up JAVA_TOOL_OPTIONS: -Djava.net.preferIPv4Stack=true
147 sun.tools.jcmd.JCmd
116 /home/site/wwwroot/app.jar
JVM 'nin 30 saniyelik bir kaydını başlatmak için aşağıdaki komutu yürütün. Bu, JVM profilini oluşturacak ve giriş dizininde jfr_example. jfr adlı bir jfr dosyası oluşturacaktır. (116 değerini Java uygulamanızın pid 'si ile değiştirin.)
jcmd 116 JFR.start name=MyRecording settings=profile duration=30s filename="/home/jfr_example.jfr"
30 saniyelik Aralık sırasında, çalışırken kaydın gerçekleşdiğini doğrulayabilirsiniz jcmd 116 JFR.check . Bu, verilen Java işleminin tüm kayıtlarını gösterir.
Sürekli kayıt
Çalışma zamanı performansı üzerinde en az etkiyle Java uygulamanızı sürekli olarak profil oluştururken, Zulu uçuş kaydedicisini kullanabilirsiniz. Bunu yapmak için, gerekli yapılandırmayla JAVA_OPTS adlı bir uygulama ayarı oluşturmak için aşağıdaki Azure CLı komutunu çalıştırın. Uygulamanız başlatıldığında JAVA_OPTS uygulama ayarının içeriği java komutuna geçirilir.
az webapp config appsettings set -g <your_resource_group> -n <your_app_name> --settings JAVA_OPTS=-XX:StartFlightRecording=disk=true,name=continuous_recording,dumponexit=true,maxsize=1024m,maxage=1d
Kayıt başladıktan sonra, komutunu kullanarak istediğiniz zaman geçerli kayıt verilerinin dökümünü alabilirsiniz JFR.dump .
jcmd <pid> JFR.dump name=continuous_recording filename="/home/recording1.jfr"
Dosyaları analiz etme .jfr
JFR dosyanızı yerel makinenize indirmek için FTPS 'yi kullanın. JFR dosyasını çözümlemek için, Zulu görevi denetiminiindirip yükleyin. Zulu dili görev denetimi yönergeleri için Azul belgelerine ve yükleme yönergelerinebakın.
Uygulama günlüğü
uygulamanızın standart konsol çıkışını ve standart konsol hata akışlarını yerel dosya sistemine veya azure Blob Depolama yazmak üzere App Service yapılandırmak için Azure portal veya azure clı aracılığıyla uygulama günlüğünü etkinleştirin. Yerel App Service dosya sistemi örneğine günlük kaydı, yapılandırıldıktan sonra 12 saat devre dışı bırakılır. Daha uzun süre bekletmeye ihtiyacınız varsa, uygulamayı bir BLOB depolama kapsayıcısına çıktı yazacak şekilde yapılandırın. Java ve Tomcat uygulama günlüklerinizi /Home/LogFiles/Application/ dizininde bulabilirsiniz.
uygulamanızın standart konsol çıkışını ve standart konsol hata akışlarını yerel dosya sistemine veya azure Blob Depolama yazmak üzere App Service yapılandırmak için Azure portal veya azure clı aracılığıyla uygulama günlüğünü etkinleştirin. Daha uzun süre bekletmeye ihtiyacınız varsa, uygulamayı bir BLOB depolama kapsayıcısına çıktı yazacak şekilde yapılandırın. Java ve Tomcat uygulama günlüklerinizi /Home/LogFiles/Application/ dizininde bulabilirsiniz.
Linux tabanlı uygulama hizmetleri için azure Blob Depolama günlüğü, yalnızca azure izleyici kullanılarak yapılandırılabilir
uygulamanız izleme için logback veya Log4j kullanıyorsa, bu izlemeleri gözden geçirme için Application Insights Java izleme günlüklerini keşfet' de günlüğe kaydetme çerçevesi yapılandırma yönergelerini kullanarak Azure Application Insights iletebilirsiniz.
Özelleştirme ve ayarlama
Azure App Service, Azure portal ve CLı aracılığıyla kullanıma hazır ayarlama ve özelleştirmeyi destekler. Java 'a özgü olmayan Web uygulaması yapılandırması için aşağıdaki makaleleri gözden geçirin:
- Uygulama ayarlarını yapılandırma
- Özel etki alanı ayarlama
- TLS/SSL bağlamalarını yapılandırma
- CDN ekleme
- Kudu sitesini yapılandırma
Java çalışma zamanı seçeneklerini ayarla
Ayrılan belleği veya diğer JVM çalışma zamanı seçeneklerini ayarlamak için, seçenekleriyle adlı bir uygulama ayarı oluşturun JAVA_OPTS . App Service, bu ayarı başlatıldığında Java çalışma zamanına bir ortam değişkeni olarak geçirir.
Azure portal, web uygulaması için uygulama Ayarlar altında, JAVA_OPTS Java SE veya CATALINA_OPTS gibi diğer ayarları içeren tomcat için adlı yeni bir uygulama ayarı oluşturun -Xms512m -Xmx1204m .
Uygulama ayarını Maven eklentisi ' nden yapılandırmak için, Azure eklentisi bölümüne ayar/değer etiketleri ekleyin. Aşağıdaki örnek, belirli bir minimum ve en büyük Java yığın boyutunu ayarlar:
<appSettings>
<property>
<name>JAVA_OPTS</name>
<value>-Xms512m -Xmx1204m</value>
</property>
</appSettings>
Not
Windows App Service tomcat kullanırken web.config dosyası oluşturmanız gerekmez.
Tek bir uygulama çalıştıran geliştiriciler App Service planında bir dağıtım yuvası ile, aşağıdaki seçenekleri kullanabilir:
- B1 ve S1 örnekleri:
-Xms1024m -Xmx1024m - B2 ve S2 örnekleri:
-Xms3072m -Xmx3072m - B3 ve S3 örnekleri:
-Xms6144m -Xmx6144m - P1v2 örnekleri:
-Xms3072m -Xmx3072m - P2v2 örnekleri:
-Xms6144m -Xmx6144m - P3v2 örnekleri:
-Xms12800m -Xmx12800m - P1v3 örnekleri:
-Xms6656m -Xmx6656m - P2v3 örnekleri:
-Xms14848m -Xmx14848m - P3v3 örnekleri:
-Xms30720m -Xmx30720m - I1 örnekleri:
-Xms3072m -Xmx3072m - I2 örnekleri:
-Xms6144m -Xmx6144m - I3 örnekleri:
-Xms12800m -Xmx12800m - I1v2 örnekleri:
-Xms6656m -Xmx6656m - I2v2 örnekleri:
-Xms14848m -Xmx14848m - I3v2 örnekleri:
-Xms30720m -Xmx30720m
Uygulama yığını ayarlarını ayarladığınızda, en iyi bellek ayırmayı bulmak için App Service planı ayrıntılarınızı gözden geçirin ve birden çok uygulama ve dağıtım yuvası ihtiyaçlarına sahip olmak üzere birden fazla uygulama ve dağıtım yuvası
Web yuvalarını aç
Uygulamanın uygulama ayarlarındaki Azure Portal Web Yuvaları desteğini açın. Ayarın etkili olması için uygulamayı yeniden başlatmanız gerekir.
Aşağıdaki komutla Azure CLı kullanarak Web soketi desteğini açın:
az webapp config set --name <app-name> --resource-group <resource-group-name> --web-sockets-enabled true
Sonra uygulamanızı yeniden başlatın:
az webapp stop --name <app-name> --resource-group <resource-group-name>
az webapp start --name <app-name> --resource-group <resource-group-name>
Varsayılan karakter kodlamasını ayarla
Azure portal, web uygulaması için uygulama Ayarlar altında, değeri ile adlı yeni bir uygulama ayarı oluşturun JAVA_OPTS -Dfile.encoding=UTF-8 .
Alternatif olarak, App Service Maven eklentisini kullanarak uygulama ayarını yapılandırabilirsiniz. Eklenti yapılandırmasına ayar adı ve değer etiketlerini ekleyin:
<appSettings>
<property>
<name>JAVA_OPTS</name>
<value>-Dfile.encoding=UTF-8</value>
</property>
</appSettings>
JSP dosyalarını önceden derle
Tomcat uygulamalarının performansını artırmak için, App Service dağıtım yapmadan önce JSP dosyalarınızı derleyebilirsiniz. Apache Sling tarafından sağlanmış Maven eklentisini veya bu ant derleme dosyasınıkullanarak kullanabilirsiniz.
Uygulamaları güvenli hale getirme
App Service çalıştıran Java uygulamaları, diğer uygulamalarla aynı güvenlik en iyi uygulamaları kümesine sahiptir.
Kullanıcıların kimliğini doğrulama (kolay kimlik doğrulaması)
Kimlik doğrulama ve yetkilendirme seçeneğiyle Azure Portal uygulama kimlik doğrulamasını ayarlayın. buradan, Facebook, Google veya GitHub gibi Azure Active Directory veya sosyal oturum açma bilgilerini kullanarak kimlik doğrulamasını etkinleştirebilirsiniz. Azure portal yapılandırma yalnızca tek bir kimlik doğrulama sağlayıcısı yapılandırılırken kullanılabilir. daha fazla bilgi için bkz. App Service uygulamanızı Azure Active Directory oturum açma bilgilerini ve diğer kimlik sağlayıcılarının ilgili makalelerini kullanacak şekilde yapılandırma. Birden çok oturum açma sağlayıcısını etkinleştirmeniz gerekiyorsa, oturum açma işlemlerini ve oturum açma işlemlerini özelleştirme makalesindeki yönergeleri izleyin.
Java SE
spring boot geliştiricileri tanıdık yay güvenlik ek açıklamalarını ve apı 'lerini kullanarak uygulamaları güvenli hale getirmek için Azure Active Directory Spring boot starter 'ı kullanabilir. Application. Properties dosyanızdaki en büyük üst bilgi boyutunu artırdığınızdan emin olun. Değerini öneririz 16384 .
Tomcat
Tomcat uygulamanız, birincil nesneyi bir harita nesnesine aktararak kullanıcının taleplerine doğrudan erişim sağlayabilir. Map nesnesi her talep türünü, bu tür için talepler koleksiyonuna eşler. Aşağıdaki kodda request bir örneğidir HttpServletRequest .
Map<String, Collection<String>> map = (Map<String, Collection<String>>) request.getUserPrincipal();
Artık Map belirli bir talep için nesneyi inceleyebilirsiniz. Örneğin, aşağıdaki kod parçacığı tüm talep türleri boyunca yinelenir ve her bir koleksiyonun içeriğini yazdırır.
for (Object key : map.keySet()) {
Object value = map.get(key);
if (value != null && value instanceof Collection {
Collection claims = (Collection) value;
for (Object claim : claims) {
System.out.println(claims);
}
}
}
Kullanıcıları imzalamak için /.auth/ext/logout yolunu kullanın. Diğer eylemleri gerçekleştirmek için, oturum açma işlemlerini ve oturum açma Işlemlerini özelleştirmebelgelerine bakın. Ayrıca, Tomcat Httpservletrequest arabiriminde ve yöntemleri için resmi belgeler vardır. Aşağıdaki servlet yöntemleri App Service yapılandırmanıza göre de alınır:
public boolean isSecure()
public String getRemoteAddr()
public String getRemoteHost()
public String getScheme()
public int getServerPort()
Bu özelliği devre dışı bırakmak için, bir değeri olan adlı bir uygulama ayarı oluşturun WEBSITE_AUTH_SKIP_PRINCIPAL 1 . App Service tarafından eklenen tüm servlet filtrelerini devre dışı bırakmak için, bir değeri ile adlı bir ayar oluşturun WEBSITE_SKIP_FILTERS 1 .
TLS/SSL 'yi yapılandırma
Mevcut bir TLS/SSL sertifikasını karşıya yüklemek ve uygulamanızın etki alanı adına bağlamak için, Özel BIR DNS adını Azure App Service 'de TLS/SSL bağlamasıyla güvenli hale getirin. Varsayılan olarak, uygulamanız HTTP bağlantılarına hala izin verir-TLS/SSL 'yi zorlamak için öğreticideki belirli adımları izleyin.
Keykasası başvurularını kullanma
Azure Keykasası , erişim ilkeleri ve denetim geçmişi ile merkezi gizli yönetim sağlar. Gizli dizileri (parolalar veya bağlantı dizeleri gibi) anahtar kasasında saklayabilir ve ortam değişkenleri aracılığıyla uygulamanızdaki bu gizli dizilere erişebilirsiniz.
İlk olarak, uygulamanıza Key Vault erişim verme ve bir uygulama ayarında gizli diziniz Için bir Anahtar Kasası başvurusu yapmayönergelerini izleyin. App Service terminaline uzaktan erişirken ortam değişkenini yazdırarak başvurunun gizli olarak çözümlendiğini doğrulayabilirsiniz.
Bu gizli dizileri Spring veya Tomcat yapılandırma dosyasına eklemek için ortam değişkeni ekleme sözdizimi ( ${MY_ENV_VAR} ) kullanın. Spring yapılandırma dosyaları için, externalized yapılandırmalarındabu belgelere bakın.
Java anahtar deposunu kullanma
Varsayılan olarak, App Service Linux 'a yüklenen tüm ortak veya özel sertifikalar, kapsayıcı başladığında Ilgili Java anahtar depolarına yüklenir. Sertifikanızı karşıya yükledikten sonra, Java anahtar deposuna yüklenmek üzere App Service yeniden başlatmanız gerekir. Ortak sertifikalar, konumundaki anahtar deposuna yüklenir $JAVA_HOME/jre/lib/security/cacerts ve özel sertifikalar içinde depolanır $JAVA_HOME/lib/security/client.jks .
Daha fazla yapılandırma, JDBC bağlantınızı Java anahtar deposundaki sertifikalarla şifrelemek için gerekli olabilir. Seçtiğiniz JDBC sürücünüz için belgelere bakın.
Java anahtar deposunu başlatma
Nesneyi başlatmak için import java.security.KeyStore , anahtar deposu dosyasını parolasıyla yükleyin. Her iki anahtar deposu için de varsayılan parola changeit .
KeyStore keyStore = KeyStore.getInstance("jks");
keyStore.load(
new FileInputStream(System.getenv("JAVA_HOME")+"/lib/security/cacets"),
"changeit".toCharArray());
KeyStore keyStore = KeyStore.getInstance("pkcs12");
keyStore.load(
new FileInputStream(System.getenv("JAVA_HOME")+"/lib/security/client.jks"),
"changeit".toCharArray());
Anahtar deposunu el ile yükleme
Sertifikaları anahtar deposuna el ile yükleyebilirsiniz. SKIP_JAVA_KEYSTORE_LOAD 1 Sertifikaları anahtar deposuna otomatik olarak yüklemek App Service devre dışı bırakmak için değeri olan bir uygulama ayarı oluşturun. Azure portal üzerinden App Service yüklenen tüm genel sertifikalar altında depolanır /var/ssl/certs/ . Özel sertifikalar altında depolanır /var/ssl/private/ .
App Service BIR SSH bağlantısı açıp komutu çalıştırarak Java anahtar aracında etkileşim kurabilir veya hata ayıklayabilirsiniz keytool . Komutların listesi için bkz. anahtar araç belgeleri . KeyStore API 'SI hakkında daha fazla bilgi için resmi belgelerebakın.
APM platformlarını yapılandırma
Bu bölümde, Azure Izleyici Application Insights, Newrelik ve AppDynamics uygulama performansı izleme (APM) platformlarıyla Azure App Service dağıtılan Java uygulamalarının nasıl bağlanacağı gösterilmektedir.
Application Insights'ı Yapılandırma
Azure Izleyici Application Insights, müşterilerin uygulama performansını artırmak ve Ortalama çözümleme süresini (MTTR) azaltmak için hataların, performans sorunlarının ve kullanım desenlerinin gözlemmesini sağlayan bir bulut Yerel uygulama izleme hizmetidir. Birkaç tıklamayla veya CLı komutlarıyla, uygulamanıza SDK ekleme gereksinimini ortadan kaldıran Node.js veya Java uygulamalarınız için izlemeyi etkinleştirebilir, günlükleri, ölçümleri ve dağıtılmış izlemeleri otomatik olarak toplar.
Azure portal
Azure portal Application Insights etkinleştirmek için, sol taraftaki menüden Application Insights ' e gidin ve Application Insights aç' ı seçin. Varsayılan olarak, Web uygulamanızla aynı ada sahip yeni bir Application Insights kaynağı kullanılacaktır. Mevcut bir Application Insights kaynağını kullanmayı veya adı değiştirmeyi seçebilirsiniz. En altta Uygula 'yı tıklatın
Azure CLI
Azure clı aracılığıyla etkinleştirmek için bir Application Insights kaynağı oluşturmanız ve Azure portal Application Insights web uygulamanıza bağlamak için bir uygulama ayarları ayarlamanız gerekir.
uygulamalar Analizler uzantısını etkinleştirin
az extension add -n application-insightsaşağıdaki clı komutunu kullanarak bir Application Insights kaynağı oluşturun. Yer tutucuları istediğiniz kaynak adı ve grubuyla değiştirin.
az monitor app-insights component create --app <resource-name> -g <resource-group> --location westus2 --kind web --application-type webVe değerlerini aklınızda bir
connectionStringinstrumentationKeysonraki adımda bu değerlere ihtiyacınız olacağını göreceksiniz.Diğer konumların bir listesini almak için öğesini çalıştırın
az account list-locations.
İzleme anahtarı, bağlantı dizesi ve izleme Aracısı sürümünü Web uygulamasında uygulama ayarları olarak ayarlayın.
<instrumentationKey>Ve<connectionString>değerlerini önceki adımdaki değerlerle değiştirin.az webapp config appsettings set -n <webapp-name> -g <resource-group> --settings "APPINSIGHTS_INSTRUMENTATIONKEY=<instrumentationKey>" "APPLICATIONINSIGHTS_CONNECTION_STRING=<connectionString>" "ApplicationInsightsAgent_EXTENSION_VERSION=~3" "XDT_MicrosoftApplicationInsights_Mode=default" "XDT_MicrosoftApplicationInsights_Java=1"
İzleme anahtarı, bağlantı dizesi ve izleme Aracısı sürümünü Web uygulamasında uygulama ayarları olarak ayarlayın.
<instrumentationKey>Ve<connectionString>değerlerini önceki adımdaki değerlerle değiştirin.az webapp config appsettings set -n <webapp-name> -g <resource-group> --settings "APPINSIGHTS_INSTRUMENTATIONKEY=<instrumentationKey>" "APPLICATIONINSIGHTS_CONNECTION_STRING=<connectionString>" "ApplicationInsightsAgent_EXTENSION_VERSION=~3" "XDT_MicrosoftApplicationInsights_Mode=default"
Yeni relik yapılandırma
NewRelic.com adresinde bir Newrelik hesabı oluşturun
Newrelik 'ten Java aracısını indirin, newrelic-java-x.x.x.zip benzer bir dosya adı olacaktır.
Lisans anahtarınızı kopyalayın, aracıyı daha sonra yapılandırmak için gerekir.
App Service örneğine SSH ekleyin ve /Home/site/Wwwroot/APM adlı yeni bir dizin oluşturun.
paketi açılan newrelik Java aracı dosyalarını /home/site/wwwroot/apm altındaki bir dizine Upload. Aracınızın dosyaları /Home/site/Wwwroot/APM/newrelik konumunda olmalıdır.
/Home/site/Wwwroot/APM/newrelic/newrelic.exe konumundaki YAML dosyasını değiştirin ve yer tutucu lisans değerini kendi lisans anahtarınızla değiştirin.
Azure portal, App Service uygulamanıza gidin ve yeni bir uygulama ayarı oluşturun.
- Java SE uygulamaları için, değeriyle adlı bir ortam değişkeni oluşturun
JAVA_OPTS-javaagent:/home/site/wwwroot/apm/newrelic/newrelic.jar. - Tomcat için, değeriyle adlı bir ortam değişkeni oluşturun
CATALINA_OPTS-javaagent:/home/site/wwwroot/apm/newrelic/newrelic.jar.
- Java SE uygulamaları için, değeriyle adlı bir ortam değişkeni oluşturun
NewRelic.com adresinde bir Newrelik hesabı oluşturun
Newrelik 'ten Java aracısını indirin, newrelic-java-x.x.x.zip benzer bir dosya adı olacaktır.
Lisans anahtarınızı kopyalayın, aracıyı daha sonra yapılandırmak için gerekir.
App Service örneğine SSH ekleyin ve /Home/site/Wwwroot/APM adlı yeni bir dizin oluşturun.
paketi açılan newrelik Java aracı dosyalarını /home/site/wwwroot/apm altındaki bir dizine Upload. Aracınızın dosyaları /Home/site/Wwwroot/APM/newrelik konumunda olmalıdır.
/Home/site/Wwwroot/APM/newrelic/newrelic.exe konumundaki YAML dosyasını değiştirin ve yer tutucu lisans değerini kendi lisans anahtarınızla değiştirin.
Azure portal, App Service uygulamanıza gidin ve yeni bir uygulama ayarı oluşturun.
- Java SE uygulamaları için, değeriyle adlı bir ortam değişkeni oluşturun
JAVA_OPTS-javaagent:/home/site/wwwroot/apm/newrelic/newrelic.jar. - Tomcat için, değeriyle adlı bir ortam değişkeni oluşturun
CATALINA_OPTS-javaagent:/home/site/wwwroot/apm/newrelic/newrelic.jar.
- Java SE uygulamaları için, değeriyle adlı bir ortam değişkeni oluşturun
Veya için bir ortam değişkeniniz zaten varsa
JAVA_OPTSCATALINA_OPTS,-javaagent:/...geçerli değerin sonuna bu seçeneği ekleyin.
AppDynamics 'i yapılandırma
AppDynamics.com adresinde bir AppDynamics hesabı oluşturun
AppDynamics Web sitesinden Java aracısını indirin, dosya adı AppServerAgent-x.x.x.xxxxx.zip benzerdir.
Kudu konsolunu kullanarak /Home/site/Wwwroot/APM adlı yeni bir dizin oluşturun.
Java aracı dosyalarını /home/site/wwwroot/apm altındaki bir dizine Upload. Aracınızın dosyaları /Home/site/Wwwroot/APM/AppDynamics konumunda olmalıdır.
Azure portal, App Service uygulamanıza gidin ve yeni bir uygulama ayarı oluşturun.
- Java SE uygulamaları için,
JAVA_OPTS-javaagent:/home/site/wwwroot/apm/appdynamics/javaagent.jar -Dappdynamics.agent.applicationName=<app-name>App Service adınız olan değer ile adlı bir ortam değişkeni oluşturun<app-name>. - Tomcat uygulamaları için,
CATALINA_OPTSApp Service adınız olan değer ile adlı bir ortam değişkeni oluşturun-javaagent:/home/site/wwwroot/apm/appdynamics/javaagent.jar -Dappdynamics.agent.applicationName=<app-name><app-name>.
- Java SE uygulamaları için,
AppDynamics.com adresinde bir AppDynamics hesabı oluşturun
AppDynamics Web sitesinden Java aracısını indirin, dosya adı AppServerAgent-x.x.x.xxxxx.zip benzerdir.
App Service örneğine SSH ekleyin ve /Home/site/Wwwroot/APM adlı yeni bir dizin oluşturun.
Java aracı dosyalarını /home/site/wwwroot/apm altındaki bir dizine Upload. Aracınızın dosyaları /Home/site/Wwwroot/APM/AppDynamics konumunda olmalıdır.
Azure portal, App Service uygulamanıza gidin ve yeni bir uygulama ayarı oluşturun.
- Java SE uygulamaları için,
JAVA_OPTS-javaagent:/home/site/wwwroot/apm/appdynamics/javaagent.jar -Dappdynamics.agent.applicationName=<app-name>App Service adınız olan değer ile adlı bir ortam değişkeni oluşturun<app-name>. - Tomcat uygulamaları için,
CATALINA_OPTSApp Service adınız olan değer ile adlı bir ortam değişkeni oluşturun-javaagent:/home/site/wwwroot/apm/appdynamics/javaagent.jar -Dappdynamics.agent.applicationName=<app-name><app-name>.
- Java SE uygulamaları için,
Not
Veya için bir ortam değişkeniniz zaten varsa JAVA_OPTS CATALINA_OPTS , -javaagent:/... geçerli değerin sonuna bu seçeneği ekleyin.
Veri kaynaklarını yapılandırma
Java SE
Spring Boot uygulamalarındaki veri kaynaklarına bağlanmak için bağlantı dizeleri oluşturmanızı ve bunları uygulamanızın. Properties dosyasına ekleme.
App Service sayfasının "yapılandırma" bölümünde, dize için bir ad belirleyin, JDBC Bağlantı dizenizi değer alanına yapıştırın ve türü "özel" olarak ayarlayın. İsteğe bağlı olarak, bu bağlantı dizesini yuva ayarı olarak ayarlayabilirsiniz.
Bu bağlantı dizesine, uygulamamız tarafından adlı bir ortam değişkeni olarak erişilebilir
CUSTOMCONNSTR_<your-string-name>. Örneğin, yukarıda oluşturduğumuz bağlantı dizesinin adı olacaktırCUSTOMCONNSTR_exampledb.Application. Properties dosyanızda, bu bağlantı dizesine ortam değişkeni adı ile başvur. Örneğimiz için aşağıdakileri kullanacağız.
app.datasource.url=${CUSTOMCONNSTR_exampledb}
Bu konuyla ilgili daha fazla bilgi için bkz. veri erişimi ve externalized yapılandırmalarda Spring Boot belgeleri .
Tomcat
Bu yönergeler tüm veritabanı bağlantıları için geçerlidir. Yer tutucuları, seçtiğiniz veritabanının sürücü sınıfı adı ve JAR dosyası ile doldurmanız gerekir. , Ortak veritabanları için sınıf adları ve sürücü indirmeleri içeren bir tablodur.
| Veritabanı | Sürücü sınıfı adı | JDBC sürücüsü |
|---|---|---|
| PostgreSQL | org.postgresql.Driver |
İndir |
| MySQL | com.mysql.jdbc.Driver |
İndir ("platformdan bağımsız" seçeneğini belirleyin) |
| SQL Server | com.microsoft.sqlserver.jdbc.SQLServerDriver |
İndir |
Tomcat 'i Java veritabanı bağlantısı (JDBC) veya Java Kalıcılık API 'SI (JPA) kullanacak şekilde yapılandırmak için, önce başlangıçta CATALINA_OPTS Tomcat tarafından okunan ortam değişkenini özelleştirin. Bu değerleri App Service Maven eklentisindekibir uygulama ayarı aracılığıyla ayarlayın:
<appSettings>
<property>
<name>CATALINA_OPTS</name>
<value>"$CATALINA_OPTS -Ddbuser=${DBUSER} -Ddbpassword=${DBPASSWORD} -DconnURL=${CONNURL}"</value>
</property>
</appSettings>
veya Azure portal içindeki yapılandırma > uygulaması Ayarlar sayfasında ortam değişkenlerini ayarlayın.
Daha sonra, veri kaynağının bir uygulama için mi yoksa Tomcat servlet üzerinde çalışan tüm uygulamalar için mi kullanılabilir olacağını saptayın.
Uygulama düzeyi veri kaynakları
Projenizin meta INF/ dizininde bir context.xml dosyası oluşturun. Yoksa meta INF/ dizin oluşturun.
context.xml,
Contextveri kaynağını bir JNDI adresine bağlamak için bir öğe ekleyin.driverClassNameYer tutucusunu, yukarıdaki tablodaki sürücünüzün sınıf adıyla değiştirin.<Context> <Resource name="jdbc/dbconnection" type="javax.sql.DataSource" url="${dbuser}" driverClassName="<insert your driver class name>" username="${dbpassword}" password="${connURL}" /> </Context>Uygulamanızdaki veri kaynağını kullanmak için uygulamanızın web.xml güncelleştirin.
<resource-env-ref> <resource-env-ref-name>jdbc/dbconnection</resource-env-ref-name> <resource-env-ref-type>javax.sql.DataSource</resource-env-ref-type> </resource-env-ref>
Paylaşılan sunucu düzeyi kaynakları
Windows üzerindeki App Service tomcat yüklemeleri App Service planındaki paylaşılan alanda bulunur. Sunucu genelinde yapılandırma için Tomcat yüklemesini doğrudan değiştiremezsiniz. Tomcat yüklemenizde sunucu düzeyinde yapılandırma değişiklikleri yapmak için, Tomcat 'i yerel bir klasöre kopyalamanız gerekir. Bu, Tomcat 'in yapılandırmasını değiştirebilirsiniz.
Uygulama başlatma sırasında özel Tomcat oluşturmayı otomatikleştirin
Bir Web uygulaması başlamadan önce eylemleri gerçekleştirmek için bir başlangıç betiği kullanabilirsiniz. Tomcat 'i özelleştirmeye yönelik başlatma komut dosyasının aşağıdaki adımları tamamlaması gerekir:
- Tomcat 'in zaten kopyalanıp kopyalanmadığını ve yerel olarak yapılandırılıp yapılandırılmadığını denetleyin. Varsa, başlangıç betiği buradan sona bitebilirler.
- Tomcat 'i yerel olarak kopyalayın.
- Gerekli yapılandırma değişikliklerini yapın.
- Yapılandırmanın başarıyla tamamlandığını belirtin.
Windows siteler için, dizininde veya adında bir dosya oluşturun startup.cmd startup.ps1 wwwroot . Bu işlem, Tomcat sunucusu başlamadan önce otomatik olarak yürütülür.
Aşağıdaki adımları tamamlayan bir PowerShell betiği aşağıda verilmiştir:
# Check for marker file indicating that config has already been done
if(Test-Path "$Env:LOCAL_EXPANDED\tomcat\config_done_marker"){
return 0
}
# Delete previous Tomcat directory if it exists
# In case previous config could not be completed or a new config should be forcefully installed
if(Test-Path "$Env:LOCAL_EXPANDED\tomcat"){
Remove-Item "$Env:LOCAL_EXPANDED\tomcat" --recurse
}
# Copy Tomcat to local
# Using the environment variable $AZURE_TOMCAT90_HOME uses the 'default' version of Tomcat
Copy-Item -Path "$Env:AZURE_TOMCAT90_HOME\*" -Destination "$Env:LOCAL_EXPANDED\tomcat" -Recurse
# Perform the required customization of Tomcat
{... customization ...}
# Mark that the operation was a success
New-Item -Path "$Env:LOCAL_EXPANDED\tomcat\config_done_marker" -ItemType File
Dönüştürmeler
Tomcat sürümünü özelleştirmenin yaygın kullanım durumu server.xml ,, context.xml ya da web.xml Tomcat yapılandırma dosyalarını değiştirmektir. App Service, platform özellikleri sağlamak için bu dosyaları zaten değiştiriyor. Bu özellikleri kullanmaya devam etmek için, bunlarda değişiklikler yaptığınızda bu dosyaların içeriğinin korunması önemlidir. Bunu gerçekleştirmek için bir XSL dönüşümü (XSLT)kullanmanızı öneririz. Dosyanın özgün içeriğini korurken XML dosyalarında değişiklik yapmak için bir XSL dönüşümü kullanın.
Örnek XSLT dosyası
Bu örnek Transform öğesine yeni bir bağlayıcı düğümü ekler server.xml . Dosyanın özgün içeriğini koruyan kimlik dönüşümünü aklınızda edin.
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<!-- Identity transform: this ensures that the original contents of the file are included in the new file -->
<!-- Ensure that your transform files include this block -->
<xsl:template match="@* | node()" name="Copy">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="@* | node()" mode="insertConnector">
<xsl:call-template name="Copy" />
</xsl:template>
<xsl:template match="comment()[not(../Connector[@scheme = 'https']) and
contains(., '<Connector') and
(contains(., 'scheme="https"') or
contains(., "scheme='https'"))]">
<xsl:value-of select="." disable-output-escaping="yes" />
</xsl:template>
<xsl:template match="Service[not(Connector[@scheme = 'https'] or
comment()[contains(., '<Connector') and
(contains(., 'scheme="https"') or
contains(., "scheme='https'"))]
)]
">
<xsl:copy>
<xsl:apply-templates select="@* | node()" mode="insertConnector" />
</xsl:copy>
</xsl:template>
<!-- Add the new connector after the last existing Connnector if there is one -->
<xsl:template match="Connector[last()]" mode="insertConnector">
<xsl:call-template name="Copy" />
<xsl:call-template name="AddConnector" />
</xsl:template>
<!-- ... or before the first Engine if there is no existing Connector -->
<xsl:template match="Engine[1][not(preceding-sibling::Connector)]"
mode="insertConnector">
<xsl:call-template name="AddConnector" />
<xsl:call-template name="Copy" />
</xsl:template>
<xsl:template name="AddConnector">
<!-- Add new line -->
<xsl:text>
</xsl:text>
<!-- This is the new connector -->
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
keystroreFile="${{user.home}}/.keystore" keystorePass="changeit"
clientAuth="false" sslProtocol="TLS" />
</xsl:template>
</xsl:stylesheet>
XSL dönüşümü işlevi
PowerShell, XML dosyalarını XSL dönüştürmeleri kullanarak dönüştürmek için yerleşik araçlara sahiptir. Aşağıdaki betik, dönüşümü gerçekleştirmek için ' de kullanabileceğiniz örnek bir işlevdir startup.ps1 :
function TransformXML{
param ($xml, $xsl, $output)
if (-not $xml -or -not $xsl -or -not $output)
{
return 0
}
Try
{
$xslt_settings = New-Object System.Xml.Xsl.XsltSettings;
$XmlUrlResolver = New-Object System.Xml.XmlUrlResolver;
$xslt_settings.EnableScript = 1;
$xslt = New-Object System.Xml.Xsl.XslCompiledTransform;
$xslt.Load($xsl,$xslt_settings,$XmlUrlResolver);
$xslt.Transform($xml, $output);
}
Catch
{
$ErrorMessage = $_.Exception.Message
$FailedItem = $_.Exception.ItemName
Write-Host 'Error'$ErrorMessage':'$FailedItem':' $_.Exception;
return 0
}
return 1
}
Uygulama ayarları
Platformun, Tomcat 'in özel sürümünün yüklü olduğu yeri de bilmeleri gerekir. Uygulamanın ayarında yükleme konumunu ayarlayabilirsiniz CATALINA_BASE .
Bu ayarı değiştirmek için Azure CLı 'yi kullanabilirsiniz:
az webapp config appsettings set -g $MyResourceGroup -n $MyUniqueApp --settings CATALINA_BASE="%LOCAL_EXPANDED%\tomcat"
Ya da Azure portal ayarı el ile değiştirebilirsiniz:
- Ayarlar > yapılandırma > uygulaması ayarları' na gidin.
- Yeni Uygulama Ayarı'nı seçin.
- Ayarı oluşturmak için bu değerleri kullanın:
- Ad:
CATALINA_BASE - Değer:
"%LOCAL_EXPANDED%\tomcat"
- Ad:
Örnek startup.ps1
Aşağıdaki örnek betik özel bir Tomcat 'i yerel bir klasöre kopyalar, bir XSL dönüşümü gerçekleştirir ve dönüştürmenin başarılı olduğunu gösterir:
# Locations of xml and xsl files
$target_xml="$Env:LOCAL_EXPANDED\tomcat\conf\server.xml"
$target_xsl="$Env:HOME\site\server.xsl"
# Define the transform function
# Useful if transforming multiple files
function TransformXML{
param ($xml, $xsl, $output)
if (-not $xml -or -not $xsl -or -not $output)
{
return 0
}
Try
{
$xslt_settings = New-Object System.Xml.Xsl.XsltSettings;
$XmlUrlResolver = New-Object System.Xml.XmlUrlResolver;
$xslt_settings.EnableScript = 1;
$xslt = New-Object System.Xml.Xsl.XslCompiledTransform;
$xslt.Load($xsl,$xslt_settings,$XmlUrlResolver);
$xslt.Transform($xml, $output);
}
Catch
{
$ErrorMessage = $_.Exception.Message
$FailedItem = $_.Exception.ItemName
echo 'Error'$ErrorMessage':'$FailedItem':' $_.Exception;
return 0
}
return 1
}
$success = TransformXML -xml $target_xml -xsl $target_xsl -output $target_xml
# Check for marker file indicating that config has already been done
if(Test-Path "$Env:LOCAL_EXPANDED\tomcat\config_done_marker"){
return 0
}
# Delete previous Tomcat directory if it exists
# In case previous config could not be completed or a new config should be forcefully installed
if(Test-Path "$Env:LOCAL_EXPANDED\tomcat"){
Remove-Item "$Env:LOCAL_EXPANDED\tomcat" --recurse
}
md -Path "$Env:LOCAL_EXPANDED\tomcat"
# Copy Tomcat to local
# Using the environment variable $AZURE_TOMCAT90_HOME uses the 'default' version of Tomcat
Copy-Item -Path "$Env:AZURE_TOMCAT90_HOME\*" "$Env:LOCAL_EXPANDED\tomcat" -Recurse
# Perform the required customization of Tomcat
$success = TransformXML -xml $target_xml -xsl $target_xsl -output $target_xml
# Mark that the operation was a success if successful
if($success){
New-Item -Path "$Env:LOCAL_EXPANDED\tomcat\config_done_marker" -ItemType File
}
Yapılandırmayı Sonlandır
Son olarak, sürücü JARs ' ı Tomcat Sınıfyoluna yerleştireceğiz ve App Service yeniden başlatacağız. JDBC sürücü dosyalarının, /Home/Tomcat/lib dizinine yerleştirerek Tomcat ClassLoader için kullanılabilir olduğundan emin olun. (Henüz yoksa, bu dizini oluşturun.) Bu dosyaları App Service örneğine yüklemek için aşağıdaki adımları uygulayın:
Cloud Shell, WebApp uzantısını yüklerken:
az extension add -–name webappApp Service için yerel sisteminizden bir SSH tüneli oluşturmak için aşağıdaki CLı komutunu çalıştırın:
az webapp remote-connection create --resource-group <resource-group-name> --name <app-name> --port <port-on-local-machine>sftp istemcinizdeki yerel tünel oluşturma bağlantı noktasına Bağlan ve dosyaları /home/tomcat/lib klasörüne yükleyin.
Alternatif olarak, bir FTP istemcisini kullanarak JDBC sürücüsünü karşıya yükleyebilirsiniz. FTP kimlik bilgilerinizi almak için bu yönergeleriizleyin.
Tomcat
Bu yönergeler tüm veritabanı bağlantıları için geçerlidir. Yer tutucuları, seçtiğiniz veritabanının sürücü sınıfı adı ve JAR dosyası ile doldurmanız gerekir. , Ortak veritabanları için sınıf adları ve sürücü indirmeleri içeren bir tablodur.
| Veritabanı | Sürücü sınıfı adı | JDBC sürücüsü |
|---|---|---|
| PostgreSQL | org.postgresql.Driver |
İndir |
| MySQL | com.mysql.jdbc.Driver |
İndir ("platformdan bağımsız" seçeneğini belirleyin) |
| SQL Server | com.microsoft.sqlserver.jdbc.SQLServerDriver |
İndir |
Tomcat 'i Java veritabanı bağlantısı (JDBC) veya Java Kalıcılık API 'SI (JPA) kullanacak şekilde yapılandırmak için, önce başlangıçta CATALINA_OPTS Tomcat tarafından okunan ortam değişkenini özelleştirin. Bu değerleri App Service Maven eklentisindekibir uygulama ayarı aracılığıyla ayarlayın:
<appSettings>
<property>
<name>CATALINA_OPTS</name>
<value>"$CATALINA_OPTS -Ddbuser=${DBUSER} -Ddbpassword=${DBPASSWORD} -DconnURL=${CONNURL}"</value>
</property>
</appSettings>
veya Azure portal içindeki yapılandırma > uygulaması Ayarlar sayfasında ortam değişkenlerini ayarlayın.
Daha sonra, veri kaynağının bir uygulama için mi yoksa Tomcat servlet üzerinde çalışan tüm uygulamalar için mi kullanılabilir olacağını saptayın.
Uygulama düzeyi veri kaynakları
Projenizin meta INF/ dizininde bir context.xml dosyası oluşturun. Yoksa meta INF/ dizin oluşturun.
context.xml,
Contextveri kaynağını bir JNDI adresine bağlamak için bir öğe ekleyin.driverClassNameYer tutucusunu, yukarıdaki tablodaki sürücünüzün sınıf adıyla değiştirin.<Context> <Resource name="jdbc/dbconnection" type="javax.sql.DataSource" url="${dbuser}" driverClassName="<insert your driver class name>" username="${dbpassword}" password="${connURL}" /> </Context>Uygulamanızdaki veri kaynağını kullanmak için uygulamanızın web.xml güncelleştirin.
<resource-env-ref> <resource-env-ref-name>jdbc/dbconnection</resource-env-ref-name> <resource-env-ref-type>javax.sql.DataSource</resource-env-ref-type> </resource-env-ref>
Paylaşılan sunucu düzeyi kaynakları
Paylaşılan, sunucu düzeyinde bir veri kaynağı eklemek, Tomcat 'in server.xml düzenlemenizi gerektirir. İlk olarak, bir Başlangıç betiğini karşıya yükleyin ve yolu yapılandırma > Başlangıç komutunda betiğin yolunu ayarlayın. FTPkullanarak başlangıç betiğini karşıya yükleyebilirsiniz.
Başlangıç betiğinizin server.xml dosyasına bir XSL dönüştürmesi yapıp elde edilen XML dosyasının çıktısını almak için kullanılır /usr/local/tomcat/conf/server.xml . Başlangıç betiği APK aracılığıyla libxslt 'yi yüklemelidir. XSL dosyanız ve başlangıç betiğimiz FTP aracılığıyla karşıya yüklenebilir. Aşağıda örnek bir başlangıç betiği verilmiştir.
# Install libxslt. Also copy the transform file to /home/tomcat/conf/
apk add --update libxslt
# Usage: xsltproc --output output.xml style.xsl input.xml
xsltproc --output /home/tomcat/conf/server.xml /home/tomcat/conf/transform.xsl /usr/local/tomcat/conf/server.xml
Örnek bir xsl dosyası aşağıda verilmiştir. Örnek xsl dosyası, Tomcat server.xml yeni bir bağlayıcı düğümü ekler.
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="@* | node()" name="Copy">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="@* | node()" mode="insertConnector">
<xsl:call-template name="Copy" />
</xsl:template>
<xsl:template match="comment()[not(../Connector[@scheme = 'https']) and
contains(., '<Connector') and
(contains(., 'scheme="https"') or
contains(., "scheme='https'"))]">
<xsl:value-of select="." disable-output-escaping="yes" />
</xsl:template>
<xsl:template match="Service[not(Connector[@scheme = 'https'] or
comment()[contains(., '<Connector') and
(contains(., 'scheme="https"') or
contains(., "scheme='https'"))]
)]
">
<xsl:copy>
<xsl:apply-templates select="@* | node()" mode="insertConnector" />
</xsl:copy>
</xsl:template>
<!-- Add the new connector after the last existing Connnector if there is one -->
<xsl:template match="Connector[last()]" mode="insertConnector">
<xsl:call-template name="Copy" />
<xsl:call-template name="AddConnector" />
</xsl:template>
<!-- ... or before the first Engine if there is no existing Connector -->
<xsl:template match="Engine[1][not(preceding-sibling::Connector)]"
mode="insertConnector">
<xsl:call-template name="AddConnector" />
<xsl:call-template name="Copy" />
</xsl:template>
<xsl:template name="AddConnector">
<!-- Add new line -->
<xsl:text>
</xsl:text>
<!-- This is the new connector -->
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
keystroreFile="${{user.home}}/.keystore" keystorePass="changeit"
clientAuth="false" sslProtocol="TLS" />
</xsl:template>
</xsl:stylesheet>
Yapılandırmayı Sonlandır
Son olarak, sürücü JARs ' ı Tomcat Sınıfyoluna yerleştirip App Service yeniden başlatın.
JDBC sürücü dosyalarının, /Home/Tomcat/lib dizinine yerleştirerek Tomcat ClassLoader için kullanılabilir olduğundan emin olun. (Henüz yoksa, bu dizini oluşturun.) Bu dosyaları App Service örneğine yüklemek için aşağıdaki adımları uygulayın:
- Cloud Shell, WebApp uzantısını yüklerken:
az extension add -–name webapp- App Service için yerel sisteminizden bir SSH tüneli oluşturmak için aşağıdaki CLı komutunu çalıştırın:
az webapp remote-connection create --resource-group <resource-group-name> --name <app-name> --port <port-on-local-machine>- sftp istemcinizdeki yerel tünel oluşturma bağlantı noktasına Bağlan ve dosyaları /home/tomcat/lib klasörüne yükleyin.
Alternatif olarak, bir FTP istemcisini kullanarak JDBC sürücüsünü karşıya yükleyebilirsiniz. FTP kimlik bilgilerinizi almak için bu yönergeleriizleyin.
Sunucu düzeyinde bir veri kaynağı oluşturduysanız App Service Linux uygulamasını yeniden başlatın. Tomcat
CATALINA_BASE/home/tomcat, güncelleştirilmiş yapılandırmayı sıfırlayacak ve kullanacak şekilde başlatılır.
JBoss EAP
Bir veri kaynağını Jpatron EAP ile kaydederkenüç temel adım vardır: JDBC sürücüsünü karşıya yükleme, JDBC sürücüsünü bir modül olarak ekleme ve modülü kaydetme. App Service, durum bilgisi olmayan bir barındırma hizmetidir, bu nedenle veri kaynağı modülünü eklemek ve kaydettirmek için yapılandırma komutlarının, kapsayıcı başladığı sürece betikleştirilmiş ve uygulanmış olması gerekir.
Veritabanınızın JDBC sürücüsünü edinin.
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.
<?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>Jpatron CLı komutlarınızı adlı bir dosyaya yerleştirin
jboss-cli-commands.cli. Jpatron komutlarının modülü eklemesi ve bunu bir veri kaynağı olarak kaydetmesi gerekir. Aşağıdaki örnekte PostgreSQL için Jpatron CLı komutları gösterilmektedir.#!/usr/bin/env bash 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.PostgreSQLValidConnectionCheckerstartup_script.shJpatron CLI komutlarını çağıran bir başlangıç betiği oluşturun. Aşağıdaki örnekte, nasıl çağrılacağını gösterilmektedirjboss-cli-commands.cli. Daha sonra, kapsayıcı başladığında bu betiği çalıştırmak için App Service yapılandırırsınız.$JBOSS_HOME/bin/jboss-cli.sh --connect --file=/home/site/deployments/tools/jboss-cli-commands.cliTercihiniz olan bir FTP istemcisini kullanarak JDBC sürücü,
jboss-cli-commands.cli,startup_script.shve modül tanımınızı adresine/site/deployments/tools/yükleyin.Kapsayıcı başlatıldığında sitenizi
startup_script.shçalıştıracak şekilde yapılandırma. Komut Azure portal Configuration General 'a > gidin Ayarlar > Komutu'na gidin. Başlangıç komut alanını olarak/home/site/deployments/tools/startup_script.shayarlayın. Değişikliklerinizi kaydedin.
Veri kaynaklarının JBoss sunucusuna ekli olduğunu onaylamak için web uygulamanıza SSH ile girin ve $JBOSS_HOME/bin/jboss-cli.sh --connect çalıştırın. JBoss'a bağlandıktan sonra, veri /subsystem=datasources:read-resource kaynaklarının listesini yazdırmak için çalıştırın.
Günlüklerde robots933456
Kapsayıcı günlüklerinde şu iletiyi görebilirsiniz:
2019-04-08T14:07:56.641002476Z "-" - - [08/Apr/2019:14:07:56 +0000] "GET /robots933456.txt HTTP/1.1" 404 415 "-" "-"
Bu iletiyi güvenle yoksayabilirsiniz. /robots933456.txt, App Service hizmetinin kapsayıcının istek sunmak için uygun olup olmadığını denetlemek için kullandığı işlevsiz bir URL'dir. 404 yanıtı, yolun var olmadığını belirtir ancak App Service bu sayede iyi ve isteklere yanıt vermeye uygun durumda olan kapsayıcıları belirler.
Java çalışma zamanı sürümü seçme
App Service kullanıcıların JVM'nin Java 8 veya Java 11 gibi ana sürümünü ve 1.8.0_232 veya 11.0.5 gibi ikincil sürümü seçmesine olanak sağlar. Yeni ikincil sürümler kullanılabilir hale geldikça ikincil sürümün otomatik olarak güncelleştirilmiş olması da tercih edilir. Çoğu durumda üretim siteleri sabitlenmiş küçük JVM sürümlerini kullanabiliyor. Bu, ikincil sürüm otomatik güncelleştirmesi sırasında süresiz kesintileri önler. Tüm Java web uygulamaları 64 bit JVM'ler kullanır, bu yapılandırılabilir değildir.
İkincil sürümü sabitlemeyi seçerseniz, sitenin JVM ikincil sürümünü düzenli aralıklarla güncelleştirmeniz gerekir. Uygulamanın daha yeni ikincil sürümde çalıştırıla olduğundan emin olmak için bir hazırlama yuvası oluşturun ve hazırlama sitesinde ikincil sürümü yükseltin. Uygulamanın yeni ikincil sürümde düzgün şekilde çalıştırılanı onaylandıktan sonra hazırlama ve üretim yuvalarını değiştirebilirsiniz.
JBoss EAP App Service Planları
JBoss EAP yalnızca plan Premium v3 ve Yalıtılmış v2 App Service kullanılabilir. Genel önizleme sırasında farklı bir katmanda JBoss EAP sitesi oluşturan müşterilerin beklenmeyen davranışlardan kaçınmak için Premium veya Yalıtılmış donanım katmanına kadar ölçeğin ölçeğini esndırması gerekir.
Java çalışma zamanı destek bildirimi
JDK sürümleri ve bakımı
Azure'ın desteklenen Java Geliştirme Seti (JDK), Azul Systems aracılığıyla sağlanan Zulu'dur. OpenJDK'Enterprise Azul Zulu Enterprise derlemeleri, Azure için OpenJDK'nın ücretsiz, çok platformlu, üretime hazır bir dağıtımıdır ve Microsoft ve Azul Systems Azure Stack desteklemektedir. Java SE uygulamalarını oluşturmak ve çalıştırmak için gereken tüm bileşenleri içerir. JDK'yi Java JDK Yüklemesi'den yükleyebilirsiniz.
Ana sürüm güncelleştirmeleri, yeni çalışma zamanı seçenekleri aracılığıyla Azure App Service. Müşteriler, dağıtımlarını yapılandırarak java'nın bu yeni sürümlerine App Service ve büyük güncelleştirmenin sınanarak ihtiyaçlarını karşılamasını sağlamakla sorumludur.
Desteklenen JDK'lere her yıl Ocak, Nisan, Temmuz ve Ekim'de üç aylık olarak otomatik olarak düzeltme eki eklenir. Azure'da Java hakkında daha fazla bilgi için bu destek belgesine bakın.
Güvenlik güncelleştirmeleri
Önemli güvenlik açıklarına yönelik düzeltme ekleri ve düzeltmeler, Azul Systems'dan kullanılabilir hale geldikleri anda yayımlanacak. NiST Ortak Güvenlik Açığı Puanlama Sistemi sürüm 2'de9.0 veya daha yüksek bir taban puanıyla "önemli" bir güvenlik açığı tanımlanır.
Tomcat 8.0, 30 Eylül 2018'den itibaren Yaşam Sonu 'ya (EOL) ulaştı. Çalışma zamanı çalışma zamanı Azure App Service Azure, Tomcat 8.0'a güvenlik güncelleştirmeleri uygulamaz. Mümkünse uygulamalarınızı Tomcat 8.5 veya 9.0'a geçirin. Hem Tomcat 8.5 hem de 9.0, Azure App Service. Daha fazla bilgi için resmi Tomcat sitesine bakın.
Kullanımdan kullanımdan kullanım
Desteklenen bir Java çalışma zamanı kullanımdan kaldıracaksa, etkilenen çalışma zamanı kullanan Azure geliştiricilerine çalışma zamanı kullanımdan kaldırılamadan en az altı ay önce bir kullanım dışı bildirimi verilir.
Yerel geliştirme
Geliştiriciler Yerel geliştirme için Azul Zulu Enterprise JDK Production Edition'ı Azul'un indirme sitesinden indirebilir.
Geliştirme desteği
Azure tarafından desteklenen Azul Zulu JDK için ürün desteği, Azure için geliştirme veya uygun bir Azure Stack planı ile microsoft Azure desteği kullanılabilir.
Sonraki adımlar
Azure hızlı başlangıçlarını, öğreticilerini ve Java başvuru belgelerini bulmak için Java geliştiricileri için Azure merkezini ziyaret edin.