Konfigurace aplikace Java pro službu Aplikace Azure Service
Poznámka:
Pro aplikace Spring doporučujeme používat Azure Spring Apps. Službu Aplikace Azure však můžete použít jako cíl. Rady najdete v pokynech k cíli úloh v Javě.
Aplikace Azure Service umožňuje vývojářům v Javě rychle sestavovat, nasazovat a škálovat webové aplikace Java SE, Tomcat a JBoss EAP v plně spravované službě. Nasaďte aplikace pomocí modulů plug-in Maven, z příkazového řádku nebo v editorech, jako je IntelliJ, Eclipse nebo Visual Studio Code.
Tato příručka obsahuje klíčové koncepty a pokyny pro vývojáře v Javě, kteří používají App Service. Pokud jste službu Aplikace Azure Service nikdy nepoužívali, měli byste si nejprve přečíst rychlý start pro Javu. Obecné dotazy týkající se používání služby App Service, které nejsou specifické pro vývoj v Javě, najdete v nejčastějších dotazech ke službě App Service.
Zobrazit verzi Javy
Pokud chcete zobrazit aktuální verzi Javy, spusťte v Cloud Shellu následující příkaz:
az webapp config show --name <app-name> --resource-group <resource-group-name> --query "[javaVersion, javaContainer, javaContainerVersion]"
Pokud chcete zobrazit všechny podporované verze Javy, spusťte v Cloud Shellu následující příkaz:
az webapp list-runtimes --os windows | grep java
Pokud chcete zobrazit aktuální verzi Javy, spusťte v Cloud Shellu následující příkaz:
az webapp config show --resource-group <resource-group-name> --name <app-name> --query linuxFxVersion
Pokud chcete zobrazit všechny podporované verze Javy, spusťte v Cloud Shellu následující příkaz:
az webapp list-runtimes --os linux | grep "JAVA\|TOMCAT\|JBOSSEAP"
Další informace o podpoře verzí najdete v tématu Zásady podpory modulu runtime jazyka App Service.
Nasazení aplikace
Build Tools
Maven
S modulem plug-in Maven pro Azure Web Apps můžete snadno připravit projekt Maven Java pro Azure Web App jedním příkazem v kořenovém adresáři projektu:
mvn com.microsoft.azure:azure-webapp-maven-plugin:2.11.0:config
Tento příkaz přidá modul azure-webapp-maven-plugin
plug-in a související konfiguraci tím, že vás vyzve k výběru existující webové aplikace Azure nebo vytvoření nové. Pak můžete aplikaci v Javě nasadit do Azure pomocí následujícího příkazu:
mvn package azure-webapp:deploy
Tady je ukázková konfigurace v pom.xml
:
<plugin>
<groupId>com.microsoft.azure</groupId>
<artifactId>azure-webapp-maven-plugin</artifactId>
<version>2.11.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
Nastavte modul plug-in Gradle pro Azure Web Apps tak, že do svého modulu plug-in přidáte
build.gradle
:plugins { id "com.microsoft.azure.azurewebapp" version "1.7.1" }
Nakonfigurujte podrobnosti o webové aplikaci. Odpovídající prostředky Azure se vytvoří, pokud neexistují. Tady je ukázková konfigurace, kde najdete podrobnosti v tomto dokumentu.
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 } }
Nasazení pomocí jednoho příkazu
gradle azureWebAppDeploy
Prostředí IDE
Azure poskytuje bezproblémové vývojové prostředí služby Java App Service v oblíbených prostředích Java IDEs, včetně následujících:
- VS Code: Webové aplikace v Javě se sadou Visual Studio Code
- IntelliJ IDEA:Vytvoření webové aplikace Hello World pro službu Aplikace Azure pomocí IntelliJ
- Eclipse:Vytvoření webové aplikace Hello World pro službu Aplikace Azure Pomocí Eclipse
Kudu API
Java SE
Pokud chcete nasadit soubory .jar do Javy SE, použijte /api/publish/
koncový bod webu Kudu. Další informace o tomto rozhraní API najdete v této dokumentaci.
Poznámka:
Aby služba App Service identifikovala a spustila vaši aplikaci, musí být vaše .jar aplikace pojmenovaná app.jar
. Modul plug-in Maven to udělá automaticky během nasazování. Pokud nechcete soubor JAR přejmenovat na app.jar, můžete nahrát skript prostředí pomocí příkazu pro spuštění .jar aplikace. Do textového pole Spouštěcí soubor vložte absolutní cestu k tomuto skriptu v části Konfigurace portálu. Spouštěcí skript se nespustí z adresáře, do kterého je umístěný. Proto ve spouštěcím skriptu vždy používejte absolutní cesty k referenčním souborům (například: java -jar /home/myapp/myapp.jar
).
Tomcat
Pokud chcete nasadit soubory .war do Tomcatu, použijte /api/wardeploy/
koncový bod k odeslání archivu souboru. Další informace o tomto rozhraní API najdete v této dokumentaci.
JBoss EAP
Pokud chcete nasadit soubory .war do JBoss, použijte /api/wardeploy/
koncový bod k odeslání archivu souboru. Další informace o tomto rozhraní API najdete v této dokumentaci.
K nasazení souborů .ear použijte protokol FTP. Aplikace .ear se nasadí do kořene kontextu definovaného v konfiguraci vaší aplikace. Pokud je například kontextová kořen aplikace <context-root>myapp</context-root>
, můžete web procházet na cestě /myapp
: http://my-app-name.azurewebsites.net/myapp
. Pokud chcete, aby byla vaše webová aplikace obsluhována v kořenové cestě, ujistěte se, že vaše aplikace nastaví kořen kontextu na kořenovou cestu: <context-root>/</context-root>
. Další informace naleznete v tématu Nastavení kontextového kořene webové aplikace.
Nenasazujte své .war ani .jar pomocí FTP. Nástroj FTP je navržený tak, aby nahrál spouštěcí skripty, závislosti nebo jiné soubory modulu runtime. Není to optimální volba pro nasazení webových aplikací.
Protokolování a ladění aplikací
Sestavy výkonu, vizualizace provozu a kontroly stavu jsou dostupné pro každou aplikaci prostřednictvím webu Azure Portal. Další informace najdete v tématu Aplikace Azure Přehled diagnostiky služby.
Streamování diagnostických protokolů
Pokud chcete získat přístup k protokolům konzoly vygenerovaným v rámci kódu aplikace ve službě App Service, zapněte protokolování diagnostiky spuštěním následujícího příkazu v Cloud Shellu:
az webapp log config --resource-group <resource-group-name> --name <app-name> --docker-container-logging filesystem --level Verbose
Možné hodnoty pro --level
jsou: Error
, Warning
, Info
a Verbose
. Každá další úroveň zahrnuje předchozí úroveň. Například Error
zahrnuje jenom chybové zprávy a Verbose
zahrnuje všechny zprávy.
Jakmile je aktivované protokolování diagnostiky, spusťte následující příkaz pro zobrazení streamu protokolů:
az webapp log tail --resource-group <resource-group-name> --name <app-name>
Pokud nevidíte protokoly konzoly okamžitě, podívejte se znovu za 30 sekund.
Poznámka:
Soubory protokolu můžete také zkontrolovat v prohlížeči na https://<app-name>.scm.azurewebsites.net/api/logs/docker
.
Streamování protokolů můžete kdykoli zastavit zadáním Ctrl
+C
.
Přístup k protokolům konzoly vygenerovaným z kontejneru.
Nejprve zapněte protokolování kontejneru spuštěním následujícího příkazu:
az webapp log config --name <app-name> --resource-group <resource-group-name> --docker-container-logging filesystem
Nahraďte <app-name>
názvy vhodné pro vaši webovou aplikaci a <resource-group-name>
nahraďte je názvy.
Jakmile je protokolování kontejneru zapnuté, spuštěním následujícího příkazu zobrazte stream protokolu:
az webapp log tail --name <app-name> --resource-group <resource-group-name>
Pokud nevidíte protokoly konzoly okamžitě, podívejte se znovu za 30 sekund.
Pokud chcete streamování protokolů kdykoli zastavit, zadejte Ctrl+C.
Soubory protokolu můžete také zkontrolovat v prohlížeči na adrese https://<app-name>.scm.azurewebsites.net/api/logs/docker
.
Další informace najdete v tématu Protokoly streamu v Cloud Shellu.
Přístup ke konzole SSH
Pokud chcete otevřít přímou relaci SSH s kontejnerem, vaše aplikace by měla být spuštěná.
Vložte následující adresu URL do vašeho prohlížeče a <app-name>
nahraďte názvem vaší aplikace:
https://<app-name>.scm.azurewebsites.net/webssh/host
Pokud ještě nejste ověření, budete se muset ověřit s vaším předplatným Azure, abyste se mohli připojit. Po ověření se vám zobrazí prostředí prohlížeče, ve kterém můžete spouště příkazy uvnitř vašeho kontejneru.
Poznámka:
Všechny změny provedené mimo adresář /home se uloží ve vlastním kontejneru a po restartování aplikace se neuchovají.
Pokud chcete otevřít vzdálenou relaci SSH z místního počítače, projděte si téma věnované otevření relace SSH ze vzdáleného prostředí.
Nástroje pro řešení potíží
Integrované image Java jsou založené na operačním systému Alpine Linux . apk
Pomocí správce balíčků nainstalujte všechny nástroje nebo příkazy pro řešení potíží.
Java Profiler
Všechny moduly runtime Javy ve službě Aplikace Azure jsou součástí nástroje JDK Flight Recorder pro profilaci úloh Javy. Můžete ho použít k zaznamenání událostí prostředí JVM, systému a aplikací a řešení problémů ve vašich aplikacích.
Další informace o nástroji Java Profiler najdete v dokumentaci k Aplikace Azure Přehledy.
Flight Recorder
Všechny moduly runtime Java ve službě App Service jsou součástí nástroje Java Flight Recorder. Můžete ho použít k zaznamenání událostí JVM, systému a aplikací a řešení problémů v aplikacích v Javě.
Timed Recording
K zaznamenávání časového limitu potřebujete PID (ID procesu) aplikace v Javě. Pokud chcete najít PID, otevřete prohlížeč na webu SCM vaší webové aplikace na adrese https://<your-site-name>.scm.azurewebsites.net/ProcessExplorer/
. Tato stránka zobrazuje spuštěné procesy ve webové aplikaci. Vyhledejte v tabulce proces s názvem "java" a zkopírujte odpovídající KÓD PID (ID procesu).
Dále otevřete konzolu ladění na horním panelu nástrojů webu SCM a spusťte následující příkaz. Nahraďte <pid>
ID procesu, které jste zkopírovali dříve. Tento příkaz spustí 30sekundový záznam profileru vaší aplikace Java a vygeneruje soubor pojmenovaný timed_recording_example.jfr
v C:\home
adresáři.
jcmd <pid> JFR.start name=TimedRecording settings=profile duration=30s filename="C:\home\timed_recording_example.JFR"
Připojte se ke službě App Service pomocí SSH a spusťte jcmd
příkaz, abyste zobrazili seznam všech spuštěných procesů Javy. Kromě samotného jcmd byste měli vidět, že vaše aplikace v Javě běží s číslem ID procesu (pid).
078990bbcd11:/home# jcmd
Picked up JAVA_TOOL_OPTIONS: -Djava.net.preferIPv4Stack=true
147 sun.tools.jcmd.JCmd
116 /home/site/wwwroot/app.jar
Spuštěním následujícího příkazu spusťte 30sekundový záznam prostředí JVM. Profiluje JVM a vytvoří soubor JFR s názvem jfr_example.jfr v domovském adresáři. (Nahraďte 116 pid vaší aplikace v Javě.)
jcmd 116 JFR.start name=MyRecording settings=profile duration=30s filename="/home/jfr_example.jfr"
Během 30sekundového intervalu můžete ověřit, že záznam probíhá spuštěním jcmd 116 JFR.check
. Příkaz zobrazí všechny nahrávky pro daný proces Javy.
Průběžný záznam
Pomocí nástroje Java Flight Recorder můžete průběžně profilovat aplikaci v Javě s minimálním dopadem na výkon modulu runtime. Spuštěním následujícího příkazu Azure CLI vytvořte nastavení aplikace s názvem JAVA_OPTS s potřebnou konfigurací. Obsah nastavení aplikace JAVA_OPTS se předá java
příkazu při spuštění aplikace.
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
Jakmile se záznam spustí, můžete pomocí příkazu kdykoli vyhodit aktuální data záznamu JFR.dump
.
jcmd <pid> JFR.dump name=continuous_recording filename="/home/recording1.jfr"
Analýza .jfr
souborů
Pomocí FTPS stáhněte soubor JFR do místního počítače. Pokud chcete analyzovat soubor JFR, stáhněte a nainstalujte Java Mission Control. Pokyny k nástroji Java Mission Control najdete v dokumentaci JMC a pokyny k instalaci.
Protokolování aplikace
Povolte protokolování aplikace prostřednictvím webu Azure Portal nebo Azure CLI a nakonfigurujte službu App Service tak, aby zapisuje standardní výstup konzoly a standardní datové proudy chyb konzoly do místního systému souborů nebo do služby Azure Blob Storage. Protokolování do místní instance systému souborů služby App Service je po konfiguraci zakázané 12 hodin. Pokud potřebujete delší dobu uchovávání, nakonfigurujte aplikaci tak, aby zapisuje výstup do kontejneru úložiště objektů blob. Protokoly aplikace Java a Tomcat najdete v adresáři /home/LogFiles/Application/ .
Povolte protokolování aplikace prostřednictvím webu Azure Portal nebo Azure CLI a nakonfigurujte službu App Service tak, aby zapisuje standardní výstup konzoly a standardní datové proudy chyb konzoly do místního systému souborů nebo do služby Azure Blob Storage. Pokud potřebujete delší dobu uchovávání, nakonfigurujte aplikaci tak, aby zapisuje výstup do kontejneru úložiště objektů blob. Protokoly aplikace Java a Tomcat najdete v adresáři /home/LogFiles/Application/ .
Protokolování služby Azure Blob Storage pro aplikace založené na Linuxu je možné nakonfigurovat pouze pomocí služby Azure Monitor.
Pokud vaše aplikace pro trasování používá logback nebo Log4j, můžete tyto trasování předat ke kontrole do Aplikace Azure Přehledy pomocí pokynů pro konfiguraci rozhraní protokolování v části Prozkoumání protokolů trasování Javy v aplikačním Přehledy.
Poznámka:
Kvůli známé chybě zabezpečení CVE-2021-44228 nezapomeňte použít Log4j verze 2.16 nebo novější.
Přizpůsobení a ladění
Aplikace Azure Služba podporuje oddělování a přizpůsobení prostřednictvím webu Azure Portal a rozhraní příkazového řádku. V následujících článcích najdete informace o konfiguraci webové aplikace, která není specifická pro Javu:
- Konfigurace nastavení aplikace
- Nastavení vlastní domény
- Konfigurace vazeb TLS/SSL
- Přidání CDN
- Konfigurace webu Kudu
Místní kopírování obsahu aplikace
Nastavte nastavení JAVA_COPY_ALL
aplikace tak, aby true
se obsah aplikace zkopíroval do místního pracovního procesu ze sdíleného systému souborů. Toto nastavení pomáhá řešit problémy se zamykáním souborů.
Nastavení možností modulu runtime Java
Pokud chcete nastavit přidělenou paměť nebo jiné možnosti modulu runtime JVM, vytvořte nastavení aplikace s názvem JAVA_OPTS
s možnostmi. App Service toto nastavení předá jako proměnnou prostředí modulu runtime Java při spuštění.
Na webu Azure Portal v části Application Nastavení pro webovou aplikaci vytvořte nové nastavení aplikace s názvem JAVA_OPTS
Java SE nebo CATALINA_OPTS
Tomcat, které zahrnuje další nastavení, například -Xms512m -Xmx1204m
.
Pokud chcete nakonfigurovat nastavení aplikace z modulu plug-in Maven, přidejte do části Modul plug-in Azure značky nastavení/hodnoty. Následující příklad nastaví konkrétní minimální a maximální velikost haldy Java:
<appSettings>
<property>
<name>JAVA_OPTS</name>
<value>-Xms1024m -Xmx1024m</value>
</property>
</appSettings>
Poznámka:
Při používání tomcat ve Službě Windows App Service nemusíte vytvářet soubor web.config.
Vývojáři, kteří v plánu služby App Service používají jednu aplikaci s jedním slotem nasazení, můžou použít následující možnosti:
- Instance B1 a S1:
-Xms1024m -Xmx1024m
- Instance B2 a S2:
-Xms3072m -Xmx3072m
- Instance B3 a S3:
-Xms6144m -Xmx6144m
- Instance P1v2:
-Xms3072m -Xmx3072m
- Instance P2v2:
-Xms6144m -Xmx6144m
- Instance P3v2:
-Xms12800m -Xmx12800m
- Instance P1v3:
-Xms6656m -Xmx6656m
- Instance P2v3:
-Xms14848m -Xmx14848m
- Instance P3v3:
-Xms30720m -Xmx30720m
- Instance I1:
-Xms3072m -Xmx3072m
- Instance I2:
-Xms6144m -Xmx6144m
- Instance I3:
-Xms12800m -Xmx12800m
- Instance I1v2:
-Xms6656m -Xmx6656m
- Instance I2v2:
-Xms14848m -Xmx14848m
- Instance I3v2:
-Xms30720m -Xmx30720m
Při ladění nastavení haldy aplikace zkontrolujte podrobnosti plánu služby App Service a vezměte v úvahu několik aplikací a slotů nasazení, abyste našli optimální přidělení paměti.
Zapnutí webových soketů
Zapněte podporu webových soketů na webu Azure Portal v nastavení aplikace pro aplikaci. Aby se nastavení projevilo, musíte aplikaci restartovat.
Zapněte podporu webového soketu pomocí Azure CLI pomocí následujícího příkazu:
az webapp config set --name <app-name> --resource-group <resource-group-name> --web-sockets-enabled true
Pak restartujte aplikaci:
az webapp stop --name <app-name> --resource-group <resource-group-name>
az webapp start --name <app-name> --resource-group <resource-group-name>
Nastavení výchozího kódování znaků
Na webu Azure Portal v části Application Nastavení pro webovou aplikaci vytvořte nové nastavení aplikace s názvem JAVA_OPTS
s hodnotou -Dfile.encoding=UTF-8
.
Případně můžete nakonfigurovat nastavení aplikace pomocí modulu plug-in App Service Maven. Do konfigurace modulu plug-in přidejte značky názvu a hodnoty nastavení:
<appSettings>
<property>
<name>JAVA_OPTS</name>
<value>-Dfile.encoding=UTF-8</value>
</property>
</appSettings>
Předběžné kompilace souborů JSP
Pokud chcete zlepšit výkon aplikací Tomcat, můžete soubory JSP před nasazením do služby App Service zkompilovat. Můžete použít modul plug-in Maven, který poskytuje Apache Sling, nebo použít tento soubor sestavení Ant.
Zabezpečené aplikace
Aplikace v Javě spuštěné ve službě App Service mají stejnou sadu osvědčených postupů zabezpečení jako jiné aplikace.
Ověřování uživatelů (Easy Auth)
Na webu Azure Portal nastavte ověřování aplikací s možností Ověřování a autorizace . Odtud můžete povolit ověřování pomocí MICROSOFT Entra ID nebo sociálních přihlášení, jako je Facebook, Google nebo GitHub. Konfigurace webu Azure Portal funguje jenom při konfiguraci jednoho zprostředkovatele ověřování. Další informace najdete v tématu Konfigurace aplikace App Service tak, aby používala přihlášení Microsoft Entra a související články pro jiné zprostředkovatele identity. Pokud potřebujete povolit více poskytovatelů přihlašování, postupujte podle pokynů v části Přizpůsobení přihlášení a odhlášení.
Java SE
Vývojáři Spring Boot můžou pomocí úvodní sady Microsoft Entra Spring Boot zabezpečit aplikace pomocí známých poznámek a rozhraní API Spring Security. Nezapomeňte v souboru application.properties zvětšit maximální velikost záhlaví. Doporučujeme hodnotu 16384
.
Tomcat
Aplikace Tomcat má přístup k deklarací identity uživatele přímo ze servletu přetypováním objektu Principal na objekt Map. Objekt Map
mapuje každý typ deklarace identity na kolekci deklarací identity pro tento typ. V následujícím příkladu request
kódu je instance HttpServletRequest
.
Map<String, Collection<String>> map = (Map<String, Collection<String>>) request.getUserPrincipal();
Teď můžete objekt zkontrolovat Map
pro jakoukoli konkrétní deklaraci identity. Například následující fragment kódu iteruje všechny typy deklarací identity a vytiskne obsah každé kolekce.
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);
}
}
}
Pokud se chcete odhlásit uživatelům, použijte /.auth/ext/logout
cestu. Pokud chcete provést další akce, projděte si dokumentaci k přizpůsobení přihlášení a odhlášení. K dispozici je také oficiální dokumentace k rozhraní Tomcat HttpServletRequest a jeho metod. Následující servletové metody jsou také hydratovány na základě vaší konfigurace služby App Service:
public boolean isSecure()
public String getRemoteAddr()
public String getRemoteHost()
public String getScheme()
public int getServerPort()
Chcete-li tuto funkci zakázat, vytvořte nastavení aplikace s názvem WEBSITE_AUTH_SKIP_PRINCIPAL
hodnota 1
. Pokud chcete zakázat všechny filtry servletu přidané službou App Service, vytvořte nastavení s názvem WEBSITE_SKIP_FILTERS
hodnota 1
.
Konfigurace protokolu TLS/SSL
Pokud chcete nahrát existující certifikát TLS/SSL a svázat ho s názvem domény vaší aplikace, postupujte podle pokynů v části Zabezpečení vlastního názvu DNS pomocí vazby TLS/SSL ve službě Aplikace Azure Service. Aplikaci můžete také nakonfigurovat tak, aby vynucuje protokol TLS/SSL.
Použití odkazů služby KeyVault
Azure KeyVault poskytuje centralizovanou správu tajných kódů pomocí zásad přístupu a historie auditu. Tajné kódy (například hesla nebo připojovací řetězec) můžete ukládat ve službě KeyVault a přistupovat k těmto tajným kódům ve vaší aplikaci prostřednictvím proměnných prostředí.
Nejprve postupujte podle pokynů pro udělení přístupu aplikace k trezoru klíčů a vytvořte odkaz na keyVault na tajný klíč v nastavení aplikace. Odkaz se dá ověřit tak, že při vzdáleném přístupu k terminálu služby App Service vytisknete proměnnou prostředí.
Pokud chcete tyto tajné kódy vložit do konfiguračního souboru Spring nebo Tomcat, použijte syntaxi injektáže proměnných prostředí (${MY_ENV_VAR}
). Informace o konfiguračních souborech Spring najdete v této dokumentaci k externím konfiguracím.
Použití úložiště klíčů Java
Ve výchozím nastavení se všechny veřejné nebo privátní certifikáty nahrané do App Service Linux načtou do příslušných úložišť klíčů Java při spuštění kontejneru. Po nahrání certifikátu budete muset restartovat službu App Service, aby se načetla do úložiště klíčů Java. Veřejné certifikáty jsou načteny do úložiště klíčů v $JRE_HOME/lib/security/cacerts
a soukromé certifikáty jsou uloženy v $JRE_HOME/lib/security/client.jks
.
Pro šifrování připojení JDBC s certifikáty v úložišti klíčů Java může být potřeba další konfigurace. Projděte si dokumentaci ke zvolenému ovladači JDBC.
Inicializace úložiště klíčů Java
Chcete-li inicializovat import java.security.KeyStore
objekt, načtěte soubor úložiště klíčů s heslem. Výchozí heslo pro obě úložiště klíčů je changeit
.
KeyStore keyStore = KeyStore.getInstance("jks");
keyStore.load(
new FileInputStream(System.getenv("JRE_HOME")+"/lib/security/cacerts"),
"changeit".toCharArray());
KeyStore keyStore = KeyStore.getInstance("pkcs12");
keyStore.load(
new FileInputStream(System.getenv("JRE_HOME")+"/lib/security/client.jks"),
"changeit".toCharArray());
Ruční načtení úložiště klíčů
Certifikáty můžete do úložiště klíčů načíst ručně. Vytvořte nastavení aplikace s SKIP_JAVA_KEYSTORE_LOAD
hodnotou 1
zákazu automatického načítání certifikátů do úložiště klíčů službou App Service. Všechny veřejné certifikáty nahrané do služby App Service prostřednictvím webu Azure Portal se ukládají v části /var/ssl/certs/
. Soukromé certifikáty jsou uloženy v rámci /var/ssl/private/
.
Nástroj Java Key Tool můžete interagovat nebo ladit otevřením připojení SSH ke službě App Service a spuštěním příkazu keytool
. Seznam příkazů najdete v dokumentaci k nástroji Key Tool. Další informace o rozhraní API úložiště klíčů najdete v oficiální dokumentaci.
Konfigurace platforem APM
V této části se dozvíte, jak připojit aplikace Java nasazené na Aplikace Azure Service s platformami APM (Application Přehledy, NewRelic a AppDynamics Application Performance Monitoring).
Konfigurace Application Insights
Azure Monitor Application Přehledy je cloudová nativní služba pro monitorování aplikací, která zákazníkům umožňuje sledovat selhání, kritické body a vzorce použití, aby zlepšili výkon aplikace a zkrátili střední dobu řešení (MTTR). Pomocí několika kliknutí nebo příkazů rozhraní příkazového řádku můžete povolit monitorování vašich Node.js nebo aplikací v Javě, automatické shromažďování protokolů, metrik a distribuovaných trasování, což eliminuje potřebu zahrnutí sady SDK do vaší aplikace. Další informace o dostupných nastaveních aplikace pro konfiguraci agenta najdete v dokumentaci k Přehledy aplikací.
portál Azure
Pokud chcete povolit Přehledy aplikace z webu Azure Portal, přejděte na Přehledy aplikace v nabídce na levé straně a vyberte Zapnout Přehledy aplikace. Ve výchozím nastavení se používá nový prostředek Application Insights se stejným názvem jako vaše webová aplikace. Můžete použít existující prostředek Application Insights nebo změnit název. Vyberte Použít v dolní části.
Azure CLI
Pokud chcete povolit prostřednictvím Azure CLI, musíte vytvořit prostředek Přehledy aplikace a nastavit na webu Azure Portal několik nastavení aplikace, abyste mohli připojit aplikační Přehledy k webové aplikaci.
Povolení rozšíření Přehledy aplikací
az extension add -n application-insights
Pomocí následujícího příkazu rozhraní příkazového řádku vytvořte prostředek Přehledy aplikace. Zástupné symboly nahraďte požadovaným názvem a skupinou prostředků.
az monitor app-insights component create --app <resource-name> -g <resource-group> --location westus2 --kind web --application-type web
Poznamenejte si hodnoty a
connectionString
instrumentationKey
tyto hodnoty budete potřebovat v dalším kroku.Pokud chcete načíst seznam dalších umístění, spusťte
az account list-locations
příkaz .
Nastavte instrumentační klíč, připojovací řetězec a verzi agenta monitorování jako nastavení aplikace ve webové aplikaci. Nahraďte
<instrumentationKey>
hodnoty z předchozího kroku a<connectionString>
nahraďte je.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"
Nastavte instrumentační klíč, připojovací řetězec a verzi agenta monitorování jako nastavení aplikace ve webové aplikaci. Nahraďte
<instrumentationKey>
hodnoty z předchozího kroku a<connectionString>
nahraďte je.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"
Konfigurace New Relic
Vytvoření účtu NewRelic na NewRelic.com
Stáhněte agenta Java z NewRelic. Má název souboru podobný newrelic-java-x.x.x.zip.
Zkopírujte licenční klíč, budete ho potřebovat k pozdější konfiguraci agenta.
Připojte se ke své instanci služby App Service SSH a vytvořte nový adresář /home/site/wwwroot/apm.
Nahrajte rozbalené soubory agenta NewRelic Java do adresáře v adresáři v části /home/site/wwwroot/apm. Soubory vašeho agenta by měly být na adrese /home/site/wwwroot/apm/newrelic.
Upravte soubor YAML na adrese /home/site/wwwroot/apm/newrelic/newrelic.yml a nahraďte zástupnou hodnotu licence vlastním licenčním klíčem.
Na webu Azure Portal přejděte do aplikace ve službě App Service a vytvořte nové nastavení aplikace.
- Pro aplikace Java SE vytvořte proměnnou prostředí s názvem
JAVA_OPTS
s hodnotou-javaagent:/home/site/wwwroot/apm/newrelic/newrelic.jar
. - Pro Tomcat vytvořte proměnnou prostředí s názvem
CATALINA_OPTS
s hodnotou-javaagent:/home/site/wwwroot/apm/newrelic/newrelic.jar
.
- Pro aplikace Java SE vytvořte proměnnou prostředí s názvem
Vytvoření účtu NewRelic na NewRelic.com
Stáhněte agenta Java z NewRelic. Má název souboru podobný newrelic-java-x.x.x.zip.
Zkopírujte svůj licenční klíč, budete ho potřebovat k pozdější konfiguraci agenta.
Připojte se ke své instanci služby App Service SSH a vytvořte nový adresář /home/site/wwwroot/apm.
Nahrajte rozbalené soubory agenta NewRelic Java do adresáře v adresáři v části /home/site/wwwroot/apm. Soubory vašeho agenta by měly být na adrese /home/site/wwwroot/apm/newrelic.
Upravte soubor YAML na adrese /home/site/wwwroot/apm/newrelic/newrelic.yml a nahraďte zástupnou hodnotu licence vlastním licenčním klíčem.
Na webu Azure Portal přejděte do aplikace ve službě App Service a vytvořte nové nastavení aplikace.
- Pro aplikace Java SE vytvořte proměnnou prostředí s názvem
JAVA_OPTS
s hodnotou-javaagent:/home/site/wwwroot/apm/newrelic/newrelic.jar
. - Pro Tomcat vytvořte proměnnou prostředí s názvem
CATALINA_OPTS
s hodnotou-javaagent:/home/site/wwwroot/apm/newrelic/newrelic.jar
.
- Pro aplikace Java SE vytvořte proměnnou prostředí s názvem
Pokud již máte proměnnou prostředí pro
JAVA_OPTS
neboCATALINA_OPTS
, připojte-javaagent:/...
možnost na konec aktuální hodnoty.
Konfigurace AppDynamics
Vytvoření účtu AppDynamics na AppDynamics.com
Stáhněte agenta Java z webu AppDynamics. Název souboru je podobný AppServerAgent-x.x.x.xxxxx.zip
Pomocí konzoly Kudu vytvořte nový adresář /home/site/wwwroot/apm.
Nahrajte soubory agenta Java do adresáře v umístění /home/site/wwwroot/apm. Soubory pro vašeho agenta by měly být v /home/site/wwwroot/apm/appdynamics.
Na webu Azure Portal přejděte do aplikace ve službě App Service a vytvořte nové nastavení aplikace.
- Pro aplikace Java SE vytvořte proměnnou prostředí s
-javaagent:/home/site/wwwroot/apm/appdynamics/javaagent.jar -Dappdynamics.agent.applicationName=<app-name>
názvemJAVA_OPTS
, kde<app-name>
je název vaší služby App Service. - Pro aplikace Tomcat vytvořte proměnnou prostředí s názvem
CATALINA_OPTS
,-javaagent:/home/site/wwwroot/apm/appdynamics/javaagent.jar -Dappdynamics.agent.applicationName=<app-name>
kde<app-name>
je název vaší služby App Service.
- Pro aplikace Java SE vytvořte proměnnou prostředí s
Vytvoření účtu AppDynamics na AppDynamics.com
Stáhněte agenta Java z webu AppDynamics. Název souboru je podobný AppServerAgent-x.x.x.xxxxx.zip
Připojte se ke své instanci služby App Service SSH a vytvořte nový adresář /home/site/wwwroot/apm.
Nahrajte soubory agenta Java do adresáře v umístění /home/site/wwwroot/apm. Soubory pro vašeho agenta by měly být v /home/site/wwwroot/apm/appdynamics.
Na webu Azure Portal přejděte do aplikace ve službě App Service a vytvořte nové nastavení aplikace.
- Pro aplikace Java SE vytvořte proměnnou prostředí s
-javaagent:/home/site/wwwroot/apm/appdynamics/javaagent.jar -Dappdynamics.agent.applicationName=<app-name>
názvemJAVA_OPTS
, kde<app-name>
je název vaší služby App Service. - Pro aplikace Tomcat vytvořte proměnnou prostředí s názvem
CATALINA_OPTS
,-javaagent:/home/site/wwwroot/apm/appdynamics/javaagent.jar -Dappdynamics.agent.applicationName=<app-name>
kde<app-name>
je název vaší služby App Service.
- Pro aplikace Java SE vytvořte proměnnou prostředí s
Poznámka:
Pokud již máte proměnnou prostředí pro JAVA_OPTS
nebo CATALINA_OPTS
, připojte -javaagent:/...
možnost na konec aktuální hodnoty.
Konfigurace zdrojů dat
Java SE
Pokud se chcete připojit ke zdrojům dat v aplikacích Spring Boot, doporučujeme vytvořit připojovací řetězec a vložit je do souboru application.properties.
V části Konfigurace na stránce služby App Service nastavte název řetězce, vložte připojovací řetězec JDBC do pole hodnoty a nastavte typ na Vlastní. Volitelně můžete tuto připojovací řetězec nastavit jako nastavení slotu.
Tato připojovací řetězec je pro naši aplikaci přístupná jako proměnná prostředí s názvem
CUSTOMCONNSTR_<your-string-name>
. NapříkladCUSTOMCONNSTR_exampledb
.V souboru application.properties na tento připojovací řetězec odkazujte s názvem proměnné prostředí. V našem příkladu bychom použili následující.
app.datasource.url=${CUSTOMCONNSTR_exampledb}
Další informace najdete v dokumentaci Spring Bootu k přístupu k datům a externalizovaným konfiguracím.
Tomcat
Tyto pokyny platí pro všechna připojení k databázi. Zástupné symboly musíte vyplnit názvem třídy ovladače zvolené databáze a souborem JAR. Poskytuje se tabulka s názvy tříd a stahováním ovladačů pro běžné databáze.
Databáze | Název třídy ovladače | Ovladač JDBC |
---|---|---|
PostgreSQL | org.postgresql.Driver |
Stáhnout |
MySQL | com.mysql.jdbc.Driver |
Stáhnout (vybrat nezávislou platformu) |
SQL Server | com.microsoft.sqlserver.jdbc.SQLServerDriver |
Stáhnout |
Pokud chcete nakonfigurovat Tomcat tak, aby používala Java Database Připojení ivity (JDBC) nebo ROZHRANÍ JPA (Java Persistence API), nejprve přizpůsobte CATALINA_OPTS
proměnnou prostředí, která je načtena Tomcatem při spuštění. Nastavte tyto hodnoty prostřednictvím nastavení aplikace v modulu plug-in App Service Maven:
<appSettings>
<property>
<name>CATALINA_OPTS</name>
<value>"$CATALINA_OPTS -Ddbuser=${DBUSER} -Ddbpassword=${DBPASSWORD} -DconnURL=${CONNURL}"</value>
</property>
</appSettings>
Nebo nastavte proměnné prostředí na stránce konfigurační>aplikace Nastavení na webu Azure Portal.
Dále určete, jestli má být zdroj dat dostupný pro jednu aplikaci nebo pro všechny aplikace spuštěné na servletu Tomcat.
Zdroje dat na úrovni aplikace
V adresáři META-INF/ projektu vytvořte soubor context.xml. Pokud neexistuje, vytvořte adresář META-INF/.
V context.xml přidejte
Context
prvek pro propojení zdroje dat s adresou JNDI.driverClassName
Nahraďte zástupný symbol názvem třídy ovladače z výše uvedené tabulky.<Context> <Resource name="jdbc/dbconnection" type="javax.sql.DataSource" url="${connURL}" driverClassName="<insert your driver class name>" username="${dbuser}" password="${dbpassword}" /> </Context>
Aktualizujte web.xml aplikace tak, aby používala zdroj dat ve vaší aplikaci.
<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>
Sdílené prostředky na úrovni serveru
Instalace Tomcat ve službě App Service ve Windows existují ve sdíleném prostoru v plánu služby App Service. Instalaci Tomcat nelze přímo upravit pro konfiguraci na úrovni serveru. Chcete-li provést změny konfigurace na úrovni serveru v instalaci Tomcat, musíte zkopírovat Tomcat do místní složky, ve které můžete upravit konfiguraci tomcat.
Automatizace vytváření vlastních zařízení Tomcat na spuštění aplikace
Spouštěcí skript můžete použít k provádění akcí před spuštěním webové aplikace. Spouštěcí skript pro přizpůsobení Tomcat musí provést následující kroky:
- Zkontrolujte, jestli se tomcat už zkopíroval a nakonfiguroval místně. Pokud ano, spouštěcí skript může skončit tady.
- Zkopírujte místně tomcat.
- Proveďte požadované změny konfigurace.
- Indikuje, že konfigurace byla úspěšně dokončena.
V případě aplikací pro Windows vytvořte soubor s názvem startup.cmd
nebo startup.ps1
v wwwroot
adresáři. Tento soubor se spustí automaticky před spuštěním serveru Tomcat.
Tady je skript PowerShellu, který provede následující kroky:
# 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 isn't 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
New-Item "$Env:LOCAL_EXPANDED\tomcat" -ItemType Directory
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
Transformace
Běžným případem použití pro přizpůsobení verze Tomcat je úprava konfiguračních server.xml
souborů , context.xml
nebo web.xml
Tomcat. Služba App Service už tyto soubory upravuje tak, aby poskytovaly funkce platformy. Pokud chcete tyto funkce dál používat, je důležité při provádění změn zachovat obsah těchto souborů. K tomu doporučujeme použít transformaci XSL (XSLT). Transformace XSL slouží k provádění změn souborů XML při zachování původního obsahu souboru.
Příklad souboru XSLT
Tato ukázková transformace přidá nový uzel konektoru do server.xml
. Všimněte si transformace identity, která zachovává původní obsah souboru.
<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's 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's 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"
keystoreFile="${{user.home}}/.keystore" keystorePass="changeit"
clientAuth="false" sslProtocol="TLS" />
</xsl:template>
</xsl:stylesheet>
Funkce transformace XSL
PowerShell obsahuje integrované nástroje pro transformaci souborů XML pomocí transformací XSL. Následující skript je ukázková funkce, kterou můžete použít startup.ps1
k provedení transformace:
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
}
Nastavení aplikace
Platforma také potřebuje vědět, kde je nainstalovaná vaše vlastní verze Tomcat. Umístění instalace můžete nastavit v CATALINA_BASE
nastavení aplikace.
Toto nastavení můžete změnit pomocí Azure CLI:
az webapp config appsettings set -g $MyResourceGroup -n $MyUniqueApp --settings CATALINA_BASE="%LOCAL_EXPANDED%\tomcat"
Nebo můžete nastavení na webu Azure Portal změnit ručně:
- Přejděte na Nastavení> Konfigurovat>nastavení aplikace.
- Vyberte Nové nastavení aplikace.
- K vytvoření nastavení použijte tyto hodnoty:
- Název:
CATALINA_BASE
- Hodnota:
"%LOCAL_EXPANDED%\tomcat"
- Název:
Příklad startup.ps1
Následující ukázkový skript zkopíruje vlastní Tomcat do místní složky, provede transformaci XSL a indikuje, že transformace proběhla úspěšně:
# 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 isn't 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
}
Dokončení konfigurace
Nakonec umístíte jar ovladače do cesty ke třídě Tomcat a restartujete službu App Service. Ujistěte se, že soubory ovladačů JDBC jsou k dispozici pro zavaděč tříd Tomcat jejich umístěním do adresáře /home/site/lib . V Cloud Shellu spusťte az webapp deploy --type=lib
pro každý soubor JAR ovladače:
az webapp deploy --resource-group <group-name> --name <app-name> --src-path <jar-name>.jar --type=lib --target-path <jar-name>.jar
Tomcat
Tyto pokyny platí pro všechna připojení k databázi. Zástupné symboly musíte vyplnit názvem třídy ovladače zvolené databáze a souborem JAR. Poskytuje se tabulka s názvy tříd a stahováním ovladačů pro běžné databáze.
Databáze | Název třídy ovladače | Ovladač JDBC |
---|---|---|
PostgreSQL | org.postgresql.Driver |
Stáhnout |
MySQL | com.mysql.jdbc.Driver |
Stáhnout (vybrat nezávislou platformu) |
SQL Server | com.microsoft.sqlserver.jdbc.SQLServerDriver |
Stáhnout |
Pokud chcete nakonfigurovat Tomcat tak, aby používala Java Database Připojení ivity (JDBC) nebo ROZHRANÍ JPA (Java Persistence API), nejprve přizpůsobte CATALINA_OPTS
proměnnou prostředí, která je načtena Tomcatem při spuštění. Nastavte tyto hodnoty prostřednictvím nastavení aplikace v modulu plug-in App Service Maven:
<appSettings>
<property>
<name>CATALINA_OPTS</name>
<value>"$CATALINA_OPTS -Ddbuser=${DBUSER} -Ddbpassword=${DBPASSWORD} -DconnURL=${CONNURL}"</value>
</property>
</appSettings>
Nebo nastavte proměnné prostředí na stránce konfigurační>aplikace Nastavení na webu Azure Portal.
Dále určete, jestli má být zdroj dat dostupný pro jednu aplikaci nebo pro všechny aplikace spuštěné na servletu Tomcat.
Zdroje dat na úrovni aplikace
V adresáři META-INF/ projektu vytvořte soubor context.xml. Pokud neexistuje, vytvořte adresář META-INF/.
V context.xml přidejte
Context
prvek pro propojení zdroje dat s adresou JNDI.driverClassName
Nahraďte zástupný symbol názvem třídy ovladače z výše uvedené tabulky.<Context> <Resource name="jdbc/dbconnection" type="javax.sql.DataSource" url="${connURL}" driverClassName="<insert your driver class name>" username="${dbuser}" password="${dbpassword}" /> </Context>
Aktualizujte web.xml aplikace tak, aby používala zdroj dat ve vaší aplikaci.
<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>
Sdílené prostředky na úrovni serveru
Přidání sdíleného zdroje dat na úrovni serveru vyžaduje úpravu server.xml tomcat. Nejprve nahrajte spouštěcí skript a nastavte cestu ke skriptu v konfiguračním>spouštěcím příkazu. Spouštěcí skript můžete nahrát pomocí ftp.
Spouštěcí skript provede transformaci xsl do souboru server.xml a výstupem výsledného souboru XML do /usr/local/tomcat/conf/server.xml
. Spouštěcí skript by měl nainstalovat knihovnu libxslt prostřednictvím apk. Váš soubor xsl a spouštěcí skript lze nahrát přes FTP. Níže je uveden příklad spouštěcího skriptu.
# 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
Následující příklad souboru XSL přidá nový uzel konektoru do tomcat server.xml.
<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's 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's 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"
keystoreFile="${{user.home}}/.keystore" keystorePass="changeit"
clientAuth="false" sslProtocol="TLS" />
</xsl:template>
</xsl:stylesheet>
Dokončení konfigurace
Nakonec umístěte jar ovladače do cesty k třídě Tomcat a restartujte službu App Service.
- Ujistěte se, že soubory ovladačů JDBC jsou k dispozici pro zavaděč tříd Tomcat jejich umístěním do adresáře /home/site/lib . V Cloud Shellu spusťte
az webapp deploy --type=lib
pro každý soubor JAR ovladače:
az webapp deploy --resource-group <group-name> --name <app-name> --src-path <jar-name>.jar --type=lib --path <jar-name>.jar
Pokud jste vytvořili zdroj dat na úrovni serveru, restartujte aplikaci App Service Pro Linux. Tomcat se resetuje CATALINA_BASE
/home/tomcat
a použije aktualizovanou konfiguraci.
Zdroje dat JBoss EAP
Při registraci zdroje dat v JBoss EAP existují tři základní kroky: nahrání ovladače JDBC, přidání ovladače JDBC jako modulu a registrace modulu. App Service je bezstavová hostitelská služba, takže konfigurační příkazy pro přidání a registraci modulu zdroje dat musí být skriptovány a použity při spuštění kontejneru.
Získejte ovladač JDBC databáze.
Vytvořte definiční soubor modulu XML pro ovladač JDBC. Následující příklad ukazuje definici modulu pro PostgreSQL.
<?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>
Vložte příkazy JBoss CLI do souboru s názvem
jboss-cli-commands.cli
. Příkazy JBoss musí přidat modul a zaregistrovat ho jako zdroj dat. Následující příklad ukazuje příkazy rozhraní příkazového řádku JBoss pro PostgreSQL.#!/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.PostgreSQLValidConnectionChecker
Vytvořte spouštěcí skript,
startup_script.sh
který volá příkazy rozhraní příkazového řádku JBoss. Následující příklad ukazuje, jak volatjboss-cli-commands.cli
. Později nakonfigurujete službu App Service tak, aby při spuštění kontejneru spustila tento skript.$JBOSS_HOME/bin/jboss-cli.sh --connect --file=/home/site/deployments/tools/jboss-cli-commands.cli
Pomocí libovolného klienta FTP nahrajte ovladač JDBC,
jboss-cli-commands.cli
startup_script.sh
a definici modulu do/site/deployments/tools/
.Nakonfigurujte web tak, aby se spustil
startup_script.sh
při spuštění kontejneru. Na webu Azure Portal přejděte na příkaz Obecné konfigurace>Nastavení> Startup. Nastavte pole spouštěcího příkazu na/home/site/deployments/tools/startup_script.sh
hodnotu . Uloží změny.
Pokud chcete ověřit, že se zdroj dat přidal na server JBoss, připojte se přes SSH do vaší webové aplikace a spusťte $JBOSS_HOME/bin/jboss-cli.sh --connect
. Po připojení k JBoss spusťte /subsystem=datasources:read-resource
příkaz pro tisk seznamu zdrojů dat.
robots933456 v protokolech
V protokolech kontejneru se může zobrazit následující zpráva:
2019-04-08T14:07:56.641002476Z "-" - - [08/Apr/2019:14:07:56 +0000] "GET /robots933456.txt HTTP/1.1" 404 415 "-" "-"
Tuto zprávu klidně ignorujte. /robots933456.txt
je fiktivní cesta URL, kterou App Service používá ke kontrole, jestli kontejner dokáže obsloužit požadavky. Odpověď 404 jednoduše indikuje, že příslušná cesta neexistuje, ale dá službě App Service vědět, že kontejner je v pořádku a je připravený reagovat na požadavky.
Volba verze modulu runtime Java
App Service umožňuje uživatelům zvolit hlavní verzi prostředí JVM, jako je Java 8 nebo Java 11, a verzi opravy, například 1.8.0_232 nebo 11.0.5. Můžete také zvolit, aby se verze oprav automaticky aktualizovala, jakmile budou k dispozici nové podverze. Ve většině případů by produkční aplikace měly používat připnuté verze JVM oprav. Tím se zabrání neočekávaným výpadkům během automatického aktualizace verze opravy. Všechny webové aplikace v Javě používají 64bitové virtuální počítače JVM a nedají se konfigurovat.
Pokud používáte Tomcat, můžete se rozhodnout připnout verzi opravy tomcat. Ve Windows můžete nezávisle připnout verze oprav prostředí JVM a Tomcat. V Linuxu můžete připnout verzi opravy Tomcat; Verze opravy prostředí JVM je také připnutá, ale není samostatně konfigurovatelná.
Pokud se rozhodnete připnout podverzi, musíte v aplikaci pravidelně aktualizovat podverzi JVM. Pokud chcete zajistit, aby vaše aplikace běžela v novější podverzi, vytvořte přípravný slot a v přípravném slotu navyšte podverzi. Jakmile ověříte, že aplikace funguje správně v nové podverzi, můžete prohodit přípravné a produkční sloty.
JBoss EAP
Clustering v JBoss EAP
App Service podporuje clustering pro JBoss EAP verze 7.4.1 a vyšší. Aby bylo možné povolit clustering, musí být vaše webová aplikace integrovaná s virtuální sítí. Když je webová aplikace integrovaná s virtuální sítí, restartuje se a instalace protokolu EAP JBoss se automaticky spustí s clusterovanou konfigurací. Instance protokolu EAP JBoss komunikují přes podsíť zadanou v integraci virtuální sítě pomocí portů zobrazených v WEBSITES_PRIVATE_PORTS
proměnné prostředí za běhu. Clustering můžete zakázat vytvořením nastavení aplikace s názvem WEBSITE_DISABLE_CLUSTERING
s libovolnou hodnotou.
Poznámka:
Pokud povolíte integraci virtuální sítě se šablonou ARM, musíte vlastnost vnetPrivatePorts
nastavit ručně na hodnotu 2
. Pokud povolíte integraci virtuální sítě z rozhraní příkazového řádku nebo portálu, nastaví se tato vlastnost automaticky.
Když je clustering povolený, instance EAP JBoss používají protokol zjišťování FILE_PING JGroups ke zjišťování nových instancí a uchování informací o clusteru, jako jsou členové clusteru, jejich identifikátory a jejich IP adresy. Ve službě App Service jsou tyto soubory pod /home/clusterinfo/
. První instance protokolu EAP, která se má spustit, získá oprávnění ke čtení a zápisu v souboru členství v clusteru. Ostatní instance načtou soubor, najdou primární uzel a koordinují se s tímto uzlem, který se má zahrnout do clusteru a přidat do souboru.
Poznámka:
Vypršení časových limitů clusteringu JBOSS můžete zabránit vyčištěním zastaralých souborů zjišťování během spouštění aplikace.
Typy plánů služby App Service Úrovně Premium V3 a Izolované verze 2 je možné volitelně distribuovat napříč Zóny dostupnosti, aby se zlepšila odolnost a spolehlivost pro důležité obchodní úlohy. Tato architektura se také označuje jako redundance zón. Funkce clusteringu JBoss EAP je kompatibilní s funkcí redundance zón.
Pravidla automatického škálování
Při konfiguraci pravidel automatického škálování pro horizontální škálování je důležité odebrat instance postupně (po jednom) a zajistit tak, aby každá odebraná instance přenesla svoji aktivitu (například zpracování databázové transakce) do jiného člena clusteru. Při konfiguraci pravidel automatického škálování na portálu pro vertikální snížení kapacity použijte následující možnosti:
- Operace: "Snížit počet o"
- Vychladnutí: "5 minut" nebo vyšší
- Počet instancí: 1
Nemusíte postupně přidávat instance (horizontální navýšení kapacity), do clusteru můžete postupně přidávat více instancí.
Plány app service JBoss EAP
Protokol JBoss EAP je k dispozici pouze u typů plánů služby App Service Úrovně Premium v3 a Izolované verze 2. Zákazníci, kteří vytvořili web protokolu EAP JBoss na jiné úrovni ve verzi Public Preview, by měli vertikálně navýšit kapacitu na úroveň hardwaru Úrovně Premium nebo Izolované prostředí, aby se zabránilo neočekávanému chování.
Základní konfigurace Tomcat ve službě App Services
Vývojáři v Javě můžou přizpůsobit nastavení serveru, řešit problémy a nasazovat aplikace do Tomcat s jistotou, pokud vědí o souboru server.xml a podrobnostech konfigurace Tomcatu. Mezi možná přizpůsobení patří:
- Přizpůsobení konfigurace Tomcat: Pochopením server.xml souboru a podrobností o konfiguraci Tomcat můžete doladit nastavení serveru tak, aby odpovídalo potřebám jejich aplikací.
- Ladění: Když je aplikace nasazená na serveru Tomcat, musí vývojáři znát konfiguraci serveru, aby mohli ladit případné problémy. To zahrnuje kontrolu protokolů serveru, zkoumání konfiguračních souborů a identifikaci chyb, ke kterým může dojít.
- Řešení potíží se službou Tomcat: Vývojáři v Javě narazí na problémy se svým serverem Tomcat, jako jsou problémy s výkonem nebo chyby konfigurace. Díky pochopení server.xml souboru a podrobností o konfiguraci Tomcat můžou vývojáři tyto problémy rychle diagnostikovat a řešit, což může ušetřit čas a úsilí.
- Nasazování aplikací do Tomcat: Pokud chcete nasadit webovou aplikaci Java do Tomcatu, musí vývojáři vědět, jak nakonfigurovat server.xml soubor a další nastavení Tomcatu. Pochopení těchto podrobností je nezbytné pro úspěšné nasazení aplikací a zajištění bezproblémového spuštění na serveru.
Když vytvoříte aplikaci s integrovanou službou Tomcat pro hostování úloh v Javě (soubor WAR nebo soubor JAR), jsou k dispozici určitá nastavení, která se dostanou mimo konfiguraci Tomcat. Podrobné informace, včetně výchozí konfigurace webového serveru Tomcat, najdete v oficiální dokumentaci k Apache Tomcat.
Kromě toho existují určité transformace, které jsou dále použity nad server.xml pro distribuci Tomcat po spuštění. Jedná se o transformace nastavení Připojení oru, hostitele a ventilu.
Mějte na paměti, že nejnovější verze Tomcat mají server.xml (8.5.58 a 9.0.38 dále). Starší verze Tomcat nepoužívají transformace a v důsledku toho můžou mít jiné chování.
Konektor
<Connector port="${port.http}" address="127.0.0.1" maxHttpHeaderSize="16384" compression="on" URIEncoding="UTF-8" connectionTimeout="${site.connectionTimeout}" maxThreads="${catalina.maxThreads}" maxConnections="${catalina.maxConnections}" protocol="HTTP/1.1" redirectPort="8443"/>
maxHttpHeaderSize
je nastavená na16384
URIEncoding
je nastavená naUTF-8
conectionTimeout
je nastavená naWEBSITE_TOMCAT_CONNECTION_TIMEOUT
hodnotu , která je výchozí hodnota240000
maxThreads
je nastavená naWEBSITE_CATALINA_MAXTHREADS
hodnotu , která je výchozí hodnota200
maxConnections
je nastavená naWEBSITE_CATALINA_MAXCONNECTIONS
hodnotu , která je výchozí hodnota10000
Poznámka:
Nastavení connectionTimeout, maxThreads a max Připojení ions je možné ladit pomocí nastavení aplikace.
Následuje příklad příkazů rozhraní příkazového řádku, které můžete použít ke změně hodnot conectionTimeout, maxThreads nebo max Připojení ions:
az webapp config appsettings set --resource-group myResourceGroup --name myApp --settings WEBSITE_TOMCAT_CONNECTION_TIMEOUT=120000
az webapp config appsettings set --resource-group myResourceGroup --name myApp --settings WEBSITE_CATALINA_MAXTHREADS=100
az webapp config appsettings set --resource-group myResourceGroup --name myApp --settings WEBSITE_CATALINA_MAXCONNECTIONS=5000
- Připojení or používá místo 127.0.0.1 adresu kontejneru.
Hostitelský počítač
<Host appBase="${site.appbase}" xmlBase="${site.xmlbase}" unpackWARs="${site.unpackwars}" workDir="${site.tempdir}" errorReportValveClass="com.microsoft.azure.appservice.AppServiceErrorReportValve" name="localhost" autoDeploy="true">
appBase
je nastavená naAZURE_SITE_APP_BASE
hodnotu , která výchozí hodnota je místní.WebappsLocalPath
xmlBase
je nastavená naAZURE_SITE_HOME
hodnotu , která je výchozí hodnota/site/wwwroot
unpackWARs
je nastavená naAZURE_UNPACK_WARS
hodnotu , která je výchozí hodnotatrue
workDir
je nastavená naJAVA_TMP_DIR
hodnotu , která výchozí nastaveníTMP
errorReportValveClass
používá náš vlastní ventil pro hlášení chyb.
Ventil
<Valve prefix="site_access_log.${catalina.instance.name}" pattern="%h %l %u %t "%r" %s %b %D %{x-arr-log-id}i" directory="${site.logdir}/http/RawLogs" maxDays="${site.logRetentionDays}" className="org.apache.catalina.valves.AccessLogValve" suffix=".txt"/>
directory
je nastavená naAZURE_LOGGING_DIR
hodnotu , která je výchozí hodnotahome\logFiles
maxDays
je naWEBSITE_HTTPLOGGING_RETENTION_DAYS
, který se ve výchozím nastavení [0
navždy]
V Linuxu má všechna stejná přizpůsobení a navíc:
- Přidá do ventilu několik chyb a nahlašuje stránky:
<xsl:attribute name="appServiceErrorPage">
<xsl:value-of select="'${appService.valves.appServiceErrorPage}'"/>
</xsl:attribute>
<xsl:attribute name="showReport">
<xsl:value-of select="'${catalina.valves.showReport}'"/>
</xsl:attribute>
<xsl:attribute name="showServerInfo">
<xsl:value-of select="'${catalina.valves.showServerInfo}'"/>
</xsl:attribute>
Další kroky
Navštivte centrum pro vývojáře v Azure pro Javu a najděte referenční dokumentaci k Azure pro rychlý start, kurzy a referenční dokumentaci k Javě.
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro