Een Tomcat-, JBoss- of Java SE-app implementeren en configureren in Azure-app Service
In dit artikel vindt u de meest voorkomende implementatie- en runtimeconfiguratie voor Java-apps in App Service. Als u Azure-app Service nog nooit hebt gebruikt, moet u eerst de Java-quickstart lezen. Algemene vragen over het gebruik van App Service die niet specifiek zijn voor Java-ontwikkeling, worden beantwoord in de veelgestelde vragen over App Service.
Azure-app Service voert Java-webtoepassingen uit op een volledig beheerde service in drie varianten:
- Java SE: kan een app uitvoeren die is geïmplementeerd als een JAR-pakket dat een ingesloten server bevat (zoals Spring Boot, Dropwizard, Quarkus of een met een ingesloten Tomcat- of Jetty-server).
- Tomcat: de ingebouwde Tomcat-server kan een app uitvoeren die is geïmplementeerd als een WAR-pakket.
- JBoss EAP : alleen ondersteund voor Linux-apps in de prijscategorieën Free, Premium v3 en Isolated v2. De ingebouwde JBoss EAP-server kan een app uitvoeren die is geïmplementeerd als WAR- of EAR-pakket.
Notitie
Voor Spring-toepassingen wordt u aangeraden Azure Spring Apps te gebruiken. U kunt echter nog steeds Azure-app Service als bestemming gebruiken. Zie de richtlijnen voor java-workloadbestemmingen voor advies.
Java-versie weergeven
Als u de huidige Java-versie wilt weergeven, voert u de volgende opdracht uit in de Cloud Shell:
az webapp config show --resource-group <resource-group-name> --name <app-name> --query linuxFxVersion
Als u alle ondersteunde Java-versies wilt weergeven, voert u de volgende opdracht uit in de Cloud Shell:
az webapp list-runtimes --os linux | grep "JAVA\|TOMCAT\|JBOSSEAP"
Zie het ondersteuningsbeleid voor De taalruntime van App Service voor meer informatie over versieondersteuning.
Uw app implementeren
Build Tools
Maven
Met de Maven-invoegtoepassing voor Azure Web Apps kunt u uw Maven Java-project eenvoudig voorbereiden voor Azure Web App met één opdracht in de hoofdmap van uw project:
mvn com.microsoft.azure:azure-webapp-maven-plugin:2.13.0:config
Met deze opdracht voegt u een azure-webapp-maven-plugin
invoegtoepassing en gerelateerde configuratie toe door u te vragen een bestaande Azure-web-app te selecteren of een nieuwe te maken. Tijdens de configuratie wordt geprobeerd te detecteren of uw toepassing moet worden geïmplementeerd in Java SE, Tomcat of (alleen Linux) JBoss EAP. Implementeer vervolgens uw Java-app in Azure met de volgende opdracht:
mvn package azure-webapp:deploy
Hier volgt een voorbeeldconfiguratie in 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 17</javaVersion>
</runtime>
<deployment>
<resources>
<resource>
<type>jar</type>
<directory>${project.basedir}/target</directory>
<includes>
<include>*.jar</include>
</includes>
</resource>
</resources>
</deployment>
</configuration>
</plugin>
Gradle
Stel de Gradle-invoegtoepassing voor Azure Web Apps in door de invoegtoepassing toe te voegen aan uw
build.gradle
:plugins { id "com.microsoft.azure.azurewebapp" version "1.10.0" }
Configureer de details van uw web-app. De bijbehorende Azure-resources worden gemaakt als ze niet bestaan. Hier volgt een voorbeeldconfiguratie voor meer informatie. Raadpleeg dit document.
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 10.0' // or 'Java SE' if you want to run an executable jar javaVersion = 'Java 17' } appSettings { <key> = <value> } auth { type = 'azure_cli' // support azure_cli, oauth2, device_code and service_principal } }
Implementeren met één opdracht.
gradle azureWebAppDeploy
IDE's
Azure biedt een naadloze Java App Service-ontwikkelervaring in populaire Java IDE's, waaronder:
- VS Code: Java Web Apps met Visual Studio Code
- IntelliJ IDEA:Een Hallo wereld-web-app maken voor Azure-app Service met behulp van IntelliJ
- Eclipse:Een Hallo wereld-web-app maken voor Azure-app Service met behulp van Eclipse
Kudu-API
Als u .jar bestanden wilt implementeren in Java SE, gebruikt u het /api/publish
eindpunt van de Kudu-site. Zie deze documentatie voor meer informatie over deze API.
Notitie
Uw .jar-toepassing moet een naam app.jar
hebben voor App Service om uw toepassing te identificeren en uit te voeren. De Maven-invoegtoepassing doet dit automatisch tijdens de implementatie. Als u de naam van uw JAR niet wilt wijzigen in app.jar, kunt u een shellscript uploaden met de opdracht om uw .jar-app uit te voeren. Plak het absolute pad naar dit script in het tekstvak Opstartbestand in de sectie Configuratie van de portal. Het opstartscript wordt niet uitgevoerd vanuit de map waarin het wordt geplaatst. Gebruik daarom altijd absolute paden om te verwijzen naar bestanden in het opstartscript (bijvoorbeeld: java -jar /home/myapp/myapp.jar
).
Als u WAR-bestanden wilt implementeren in Tomcat, gebruikt u het /api/wardeploy/
eindpunt in POST uw archiefbestand. Zie deze documentatie voor meer informatie over deze API.
Als u .war-bestanden wilt implementeren in JBoss, gebruikt u het /api/wardeploy/
eindpunt in POST uw archiefbestand. Zie deze documentatie voor meer informatie over deze API.
Als u .ear-bestanden wilt implementeren, gebruikt u FTP. Uw .ear-toepassing wordt geïmplementeerd in de contexthoofdmap die is gedefinieerd in de configuratie van uw toepassing. Als de hoofdmap van de context van uw app bijvoorbeeld is<context-root>myapp</context-root>
, kunt u door de site bladeren op het /myapp
pad: http://my-app-name.azurewebsites.net/myapp
Als u wilt dat uw web-app wordt geleverd in het hoofdpad, moet u ervoor zorgen dat uw app de contexthoofdmap instelt op het hoofdpad: <context-root>/</context-root>
. Zie De contexthoofdmap van een webtoepassing instellen voor meer informatie.
Implementeer uw .war of .jar niet met FTP. Het FTP-hulpprogramma is ontworpen voor het uploaden van opstartscripts, afhankelijkheden of andere runtimebestanden. Het is niet de optimale keuze voor het implementeren van web-apps.
URL herschrijven of omleiden
Als u de URL wilt herschrijven of omleiden, gebruikt u een van de beschikbare URL-rewriters, zoals UrlRewriteFilter.
Tomcat biedt ook een herschrijfklep.
JBoss biedt ook een herschrijfklep.
Logboekregistratie en foutopsporing van apps
Prestatierapporten, verkeersvisualisaties en statuscontroles zijn beschikbaar voor elke app via Azure Portal. Zie Azure-app Overzicht van diagnostische gegevens van de service voor meer informatie.
Diagnostische logboeken streamen
U hebt vanuit de container toegang tot de consolelogboeken.
Schakel eerst logboekregistratie voor containers in door de volgende opdracht uit te voeren:
az webapp log config --name <app-name> --resource-group <resource-group-name> --docker-container-logging filesystem
Vervang <app-name>
en <resource-group-name>
door de namen die van toepassing zijn op uw web-app.
Zodra logboekregistratie is ingeschakeld, voert u de volgende opdracht uit om de logboekstream te zien:
az webapp log tail --name <app-name> --resource-group <resource-group-name>
Als u de consolelogboeken niet meteen ziet, probeert u het opnieuw na 30 seconden.
U kunt op elk gewenst moment stoppen met logboekstreaming door Ctrl+C te typen.
U kunt ook de logboekbestanden in een browser inspecteren op https://<app-name>.scm.azurewebsites.net/api/logs/docker
.
Zie Stream-logboeken in Cloud Shell voor meer informatie.
Toegang tot de SSH-console in Linux
Als u een directe SSH-sessie opent met uw container, moet uw app worden uitgevoerd.
Plak de volgende URL in uw browser en vervang <app-name>
door de naam van uw app:
https://<app-name>.scm.azurewebsites.net/webssh/host
Als u nog niet bent geverifieerd moet u zich verifiëren met uw Azure-abonnement om verbinding te maken. Nadat u bent geverifieerd, ziet u een shell in de browser waarin u opdrachten binnen uw container kunt uitvoeren.
Notitie
Wijzigingen die u buiten de map /home aanbrengt, worden in de container zelf opgeslagen en blijven niet behouden na het opnieuw opstarten van de app.
Als u een externe SSH-sessie wilt openen vanaf uw lokale machine, raadpleegt u SSH-sessie openen vanaf een externe shell.
Hulpprogramma's voor probleemoplossing voor Linux
De ingebouwde Java-installatiekopieën zijn gebaseerd op het Alpine Linux-besturingssysteem . Gebruik pakketbeheer apk
om hulpprogramma's of opdrachten voor probleemoplossing te installeren.
Java Profiler
Alle Java-runtimes op Azure-app Service worden geleverd met de JDK Flight Recorder voor het profileren van Java-workloads. U kunt deze gebruiken om JVM-, systeem- en toepassingsevenementen vast te leggen en problemen in uw toepassingen op te lossen.
Ga naar de documentatie van Azure-toepassing Insights voor meer informatie over Java Profiler.
Vluchtrecorder
Alle Java-runtimes in App Service worden geleverd met de Java Flight Recorder. U kunt deze gebruiken om JVM-, systeem- en toepassingsevenementen vast te leggen en problemen in uw Java-toepassingen op te lossen.
SSH in uw App Service en voer de jcmd
opdracht uit om een lijst weer te geven van alle Java-processen die worden uitgevoerd. Naast jcmd
zichzelf ziet u dat uw Java-toepassing wordt uitgevoerd met een proces-id (pid).
078990bbcd11:/home# jcmd
Picked up JAVA_TOOL_OPTIONS: -Djava.net.preferIPv4Stack=true
147 sun.tools.jcmd.JCmd
116 /home/site/wwwroot/app.jar
Voer de volgende opdracht uit om een opname van 30 seconden van de JVM te starten. Het profiel profileert de JVM en maakt een JFR-bestand met de naam jfr_example.jfr in de basismap. (Vervang 116 door de pid van uw Java-app.)
jcmd 116 JFR.start name=MyRecording settings=profile duration=30s filename="/home/jfr_example.jfr"
Tijdens het interval van 30 seconden kunt u controleren of de opname plaatsvindt door uit te voeren jcmd 116 JFR.check
. De opdracht toont alle opnamen voor het opgegeven Java-proces.
Continue opname
U kunt Java Flight Recorder gebruiken om uw Java-toepassing continu te profilen met minimale invloed op runtimeprestaties. Voer hiervoor de volgende Azure CLI-opdracht uit om een app-instelling met de naam JAVA_OPTS te maken met de benodigde configuratie. De inhoud van de JAVA_OPTS-app-instelling wordt doorgegeven aan de java
opdracht wanneer uw app wordt gestart.
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
Zodra de opname is gestart, kunt u de huidige opnamegegevens op elk gewenst moment dumpen met behulp van de JFR.dump
opdracht.
jcmd <pid> JFR.dump name=continuous_recording filename="/home/recording1.jfr"
Bestanden analyseren .jfr
Gebruik FTPS om uw JFR-bestand te downloaden naar uw lokale computer. Als u het JFR-bestand wilt analyseren, downloadt en installeert u Java Mission Control. Zie de JMC-documentatie en de installatie-instructies voor instructies over Java Mission Control.
App-logboekregistratie
Schakel toepassingslogboekregistratie in via Azure Portal of Azure CLI om App Service te configureren voor het schrijven van de standaardconsole-uitvoer van uw toepassing en standaardconsolefoutstromen naar het lokale bestandssysteem of Azure Blob Storage. Als u langere retentie nodig hebt, configureert u de toepassing voor het schrijven van uitvoer naar een Blob Storage-container.
Uw Java- en Tomcat-app-logboeken vindt u in de map /home/LogFiles/Application/ .
Logboekregistratie van Azure Blob Storage voor Linux-apps kan alleen worden geconfigureerd met behulp van Azure Monitor.
Als uw toepassing gebruikmaakt van Logback of Log4j voor tracering, kunt u deze traceringen doorsturen voor controle naar Azure-toepassing Insights met behulp van de configuratie-instructies voor het logboekregistratieframework in Java-traceringslogboeken verkennen in Application Insights.
Notitie
Vanwege bekend beveiligingsprobleem CVE-2021-44228 moet u Log4j versie 2.16 of hoger gebruiken.
Aanpassing en afstemming
Azure-app Service ondersteunt out-of-the-box tuning en aanpassing via Azure Portal en CLI. Raadpleeg de volgende artikelen voor niet-Java-specifieke web-app-configuratie:
- App-instellingen configureren
- Een aangepast domein instellen
- TLS/SSL-bindingen configureren
- Een CDN toevoegen
- De Kudu-site configureren
App-inhoud lokaal kopiëren
Stel de app-instelling JAVA_COPY_ALL
in om true
de inhoud van uw app te kopiëren naar de lokale werkrol vanuit het gedeelde bestandssysteem. Deze instelling helpt bij het oplossen van problemen met het vergrendelen van bestanden.
Java-runtimeopties instellen
Als u toegewezen geheugen of andere JVM-runtimeopties wilt instellen, maakt u een app-instelling met de naam JAVA_OPTS
met de opties. App Service geeft deze instelling door als een omgevingsvariabele aan de Java-runtime wanneer deze wordt gestart.
Maak in Azure Portal onder Toepassingsinstellingen voor de web-app een nieuwe app-instelling met de naam JAVA_OPTS
andere instellingen, zoals -Xms512m -Xmx1204m
.
Maak in Azure Portal onder Toepassingsinstellingen voor de web-app een nieuwe app-instelling met de naam CATALINA_OPTS
andere instellingen, zoals -Xms512m -Xmx1204m
.
Als u de app-instelling wilt configureren vanuit de Maven-invoegtoepassing, voegt u tags voor instelling/waarde toe in de sectie van de Azure-invoegtoepassing. In het volgende voorbeeld wordt een specifieke minimale en maximale Java-heapgrootte ingesteld:
<appSettings>
<property>
<name>JAVA_OPTS</name>
<value>-Xms1024m -Xmx1024m</value>
</property>
</appSettings>
Notitie
U hoeft geen web.config-bestand te maken wanneer u Tomcat gebruikt in Windows App Service.
Ontwikkelaars die één toepassing uitvoeren met één implementatiesite in hun App Service-plan, kunnen de volgende opties gebruiken:
- B1- en S1-exemplaren:
-Xms1024m -Xmx1024m
- B2- en S2-exemplaren:
-Xms3072m -Xmx3072m
- B3- en S3-exemplaren:
-Xms6144m -Xmx6144m
- P1v2-exemplaren:
-Xms3072m -Xmx3072m
- P2v2-exemplaren:
-Xms6144m -Xmx6144m
- P3v2-exemplaren:
-Xms12800m -Xmx12800m
- P1v3-exemplaren:
-Xms6656m -Xmx6656m
- P2v3-exemplaren:
-Xms14848m -Xmx14848m
- P3v3-exemplaren:
-Xms30720m -Xmx30720m
- I1-exemplaren:
-Xms3072m -Xmx3072m
- I2-exemplaren:
-Xms6144m -Xmx6144m
- I3-exemplaren:
-Xms12800m -Xmx12800m
- I1v2-exemplaren:
-Xms6656m -Xmx6656m
- I2v2-exemplaren:
-Xms14848m -Xmx14848m
- I3v2-exemplaren:
-Xms30720m -Xmx30720m
Wanneer u de heap-instellingen van de toepassing afstemt, controleert u de details van uw App Service-plan en houdt u rekening met meerdere toepassingen en implementatiesites om de optimale toewijzing van het geheugen te vinden.
Websockets inschakelen
Schakel ondersteuning in voor websockets in Azure Portal in de toepassingsinstellingen voor de toepassing. U moet de toepassing opnieuw starten om de instelling van kracht te laten worden.
Schakel websocketondersteuning in met behulp van de Azure CLI met de volgende opdracht:
az webapp config set --name <app-name> --resource-group <resource-group-name> --web-sockets-enabled true
Start de toepassing vervolgens opnieuw op:
az webapp stop --name <app-name> --resource-group <resource-group-name>
az webapp start --name <app-name> --resource-group <resource-group-name>
Standaardtekencodering instellen
Maak in Azure Portal onder Toepassingsinstellingen voor de web-app een nieuwe app-instelling met de naam waarde.-Dfile.encoding=UTF-8
JAVA_OPTS
U kunt de app-instelling ook configureren met behulp van de App Service Maven-invoegtoepassing. Voeg de instellingsnaam en waardetags toe in de configuratie van de invoegtoepassing:
<appSettings>
<property>
<name>JAVA_OPTS</name>
<value>-Dfile.encoding=UTF-8</value>
</property>
</appSettings>
JSP-bestanden vooraf compileren
Om de prestaties van Tomcat-toepassingen te verbeteren, kunt u uw JSP-bestanden compileren voordat u implementeert in App Service. U kunt de Maven-invoegtoepassing van Apache Sling gebruiken of dit Ant-buildbestand gebruiken.
robots933456 in logboeken
U ziet mogelijk het volgende bericht in de containerlogboeken:
2019-04-08T14:07:56.641002476Z "-" - - [08/Apr/2019:14:07:56 +0000] "GET /robots933456.txt HTTP/1.1" 404 415 "-" "-"
U kunt dit bericht veilig negeren. /robots933456.txt
is een dummy-URL-pad dat App Service gebruikt om te controleren of de container aanvragen kan verwerken. Een 404-antwoord geeft alleen aan dat het pad niet bestaat, maar laat App Service wel weten dat de container in orde is en klaar is om te reageren op aanvragen.
Een Java Runtime-versie kiezen
Met App Service kunnen gebruikers de primaire versie van de JVM kiezen, zoals Java 8 of Java 11, en de patchversie, zoals 1.8.0_232 of 11.0.5. U kunt er ook voor kiezen om de patchversie automatisch te laten bijwerken naarmate er nieuwe secundaire versies beschikbaar komen. In de meeste gevallen moeten productie-apps gebruikmaken van vastgemaakte JVM-versies van patches. Dit voorkomt onverwachte storingen tijdens een automatische update van een patchversie. Alle Java-web-apps gebruiken 64-bits JVM's en kunnen niet worden geconfigureerd.
Als u Tomcat gebruikt, kunt u ervoor kiezen om de patchversie van Tomcat vast te maken. In Windows kunt u de patchversies van de JVM en Tomcat onafhankelijk vastmaken. In Linux kunt u de patchversie van Tomcat vastmaken; de patchversie van de JVM is ook vastgemaakt, maar kan niet afzonderlijk worden geconfigureerd.
Als u ervoor kiest om de secundaire versie vast te maken, moet u de secundaire JVM-versie regelmatig bijwerken in de app. Maak een staging-site en verhoog de secundaire versie van de staging-site om ervoor te zorgen dat uw toepassing wordt uitgevoerd op de nieuwere secundaire versie. Zodra u hebt bevestigd dat de toepassing correct wordt uitgevoerd op de nieuwe secundaire versie, kunt u de faserings- en productiesites wisselen.
JBoss CLI uitvoeren
In de SSH-sessie van uw JBoss-app kunt u de JBoss CLI uitvoeren met de volgende opdracht:
$JBOSS_HOME/bin/jboss-cli.sh --connect
Afhankelijk van waar JBoss zich in de levenscyclus van de server bevindt, kunt u mogelijk geen verbinding maken. Wacht een paar minuten en probeer het opnieuw. Deze methode is handig voor snelle controles van de huidige serverstatus (bijvoorbeeld om te zien of een gegevensbron juist is geconfigureerd).
Wijzigingen die u aanbrengt in de server met JBoss CLI in de SSH-sessie, blijven ook niet behouden nadat de app opnieuw is opgestart. Telkens wanneer de app wordt gestart, begint de JBoss EAP-server met een schone installatie. Tijdens de opstartlevenscyclus maakt App Service de benodigde serverconfiguraties en implementeert de app. Als u permanente wijzigingen wilt aanbrengen in de JBoss-server, gebruikt u een aangepast opstartscript of een opstartopdracht. Zie Gegevensbronnen configureren voor een Tomcat-, JBoss- of Java SE-app in Azure-app Service voor een end-to-end-voorbeeld.
U kunt App Service ook handmatig configureren om elk bestand uit te voeren bij het opstarten. Voorbeeld:
az webapp config set --resource-group <group-name> --name <app-name> --startup-file /home/site/scripts/foo.sh
Zie voor meer informatie over de CLI-opdrachten die u kunt uitvoeren:
Clustering
App Service ondersteunt clustering voor JBoss EAP-versies 7.4.1 en hoger. Als u clustering wilt inschakelen, moet uw web-app worden geïntegreerd met een virtueel netwerk. Wanneer de web-app is geïntegreerd met een virtueel netwerk, wordt deze opnieuw opgestart en wordt de JBoss EAP-installatie automatisch gestart met een geclusterde configuratie. Wanneer u meerdere exemplaren uitvoert met automatisch schalen, communiceren de JBoss EAP-exemplaren met elkaar via het subnet dat is opgegeven in de integratie van het virtuele netwerk. U kunt clustering uitschakelen door een app-instelling te maken met een willekeurige WEBSITE_DISABLE_CLUSTERING
waarde.
Notitie
Als u de integratie van uw virtuele netwerk met een ARM-sjabloon inschakelt, moet u de eigenschap vnetPrivatePorts
handmatig instellen op een waarde van 2
. Als u integratie van virtuele netwerken vanuit de CLI of portal inschakelt, wordt deze eigenschap automatisch voor u ingesteld.
Wanneer clustering is ingeschakeld, gebruiken de JBoss EAP-exemplaren het FILE_PING JGroups-detectieprotocol om nieuwe exemplaren te detecteren en de clustergegevens, zoals de clusterleden, hun id's en hun IP-adressen, te behouden. In App Service bevinden deze bestanden zich onder /home/clusterinfo/
. Het eerste EAP-exemplaar om te beginnen krijgt lees-/schrijfmachtigingen voor het clusterlidmaatschapsbestand. Andere exemplaren lezen het bestand, zoeken het primaire knooppunt en coördineren met dat knooppunt dat moet worden opgenomen in het cluster en worden toegevoegd aan het bestand.
Notitie
U kunt time-outs voor JBoss-clustering voorkomen door verouderde detectiebestanden op te schonen tijdens het opstarten van uw app.
De typen Premium V3- en Isolated V2 App Service-abonnementen kunnen desgewenst worden gedistribueerd over Beschikbaarheidszones om de tolerantie en betrouwbaarheid voor uw bedrijfskritieke workloads te verbeteren. Deze architectuur wordt ook wel zoneredundantie genoemd. De JBoss EAP-clusterfunctie is compatibel met de functie zoneredundantie.
Regels voor automatisch schalen
Wanneer u regels voor automatische schaalaanpassing configureert voor horizontaal schalen, is het belangrijk om exemplaren incrementeel (één voor één) te verwijderen om ervoor te zorgen dat elk verwijderd exemplaar de activiteit (zoals het verwerken van een databasetransactie) kan overdragen aan een ander lid van het cluster. Wanneer u uw regels voor automatische schaalaanpassing in de portal configureert om omlaag te schalen, gebruikt u de volgende opties:
- Bewerking: 'Aantal verlagen op'
- Afkoelen: '5 minuten' of hoger
- Aantal exemplaren: 1
U hoeft geen exemplaren incrementeel toe te voegen (uitschalen), u kunt meerdere exemplaren tegelijk toevoegen aan het cluster.
App Service-plannen
JBoss EAP is beschikbaar in de volgende prijscategorieën: F1, P0v3, P1mv3, P2mv3, P3mv3, P4mv3 en P5mv3.
Levenscyclus van JBoss-server
Een JBoss EAP-app in App Service doorloopt vijf verschillende fasen voordat de server daadwerkelijk wordt gestart.
- 1. Installatiefase van de omgeving
- 2. Startfase van de server
- 3. Serverconfiguratiefase
- 4. Implementatiefase van app
- 5. Herlaadfase van de server
Zie de respectieve secties hieronder voor meer informatie en mogelijkheden om deze aan te passen (zoals via app-instellingen).
1. Installatiefase van de omgeving
- De SSH-service wordt gestart om beveiligde SSH-sessies met de container in te schakelen.
- De keystore van de Java-runtime wordt bijgewerkt met alle openbare en persoonlijke certificaten die zijn gedefinieerd in Azure Portal.
- Openbare certificaten worden geleverd door het platform in de map /var/ssl/certs en worden geladen in $JRE_HOME/lib/security/cacerts.
- Privécertificaten worden geleverd door het platform in de map /var/ssl/private en worden geladen in $JRE_HOME/lib/security/client.jks.
- Als er in deze stap certificaten in het Java-sleutelarchief worden geladen, worden de eigenschappen
javax.net.ssl.keyStore
javax.net.ssl.keyStorePassword
enjavax.net.ssl.keyStoreType
toegevoegd aan deJAVA_TOOL_OPTIONS
omgevingsvariabele. - Een initiële JVM-configuratie wordt bepaald, zoals logboekregistratiemappen en Heap-parameters voor Java-geheugen:
- Als u de
–Xms
of–Xmx
vlaggen voor geheugen in de app-instellingJAVA_OPTS
opgeeft, overschrijven deze waarden de waarden die door het platform worden geleverd. - Als u de app-instelling
WEBSITES_CONTAINER_STOP_TIME_LIMIT
configureert, wordt de waarde doorgegeven aan de runtime-eigenschaporg.wildfly.sigterm.suspend.timeout
, waarmee de maximale afsluitwachttijd (in seconden) wordt bepaald wanneer JBoss wordt gestopt.
- Als u de
- Als de app is geïntegreerd met een virtueel netwerk, geeft de App Service-runtime een lijst met poorten door die moeten worden gebruikt voor communicatie tussen servers in de omgevingsvariabele
WEBSITE_PRIVATE_PORTS
en start JBoss met behulp van declustering
configuratie. Anders wordt destandalone
configuratie gebruikt.- Voor de
clustering
configuratie wordt het serverconfiguratiebestand standalone-azure-full-ha.xml gebruikt. - Voor de
standalone
configuratie wordt het serverconfiguratiebestand standalone-full.xml gebruikt.
- Voor de
2. Startfase van de server
- Als JBoss wordt gestart in de
clustering
configuratie:- Elke JBoss-instantie ontvangt een interne id tussen 0 en het aantal exemplaren waarnaar de app wordt uitgeschaald.
- Als sommige bestanden worden gevonden in het pad van het transactiearchief voor dit serverexemplaren (met behulp van de interne id), betekent dit dat dit serverexemplaren de plaats innemen van een identiek service-exemplaar dat eerder is vastgelopen en niet-doorgevoerde transacties achterblijven. De server is geconfigureerd om het werk voor deze transacties te hervatten.
- Ongeacht of JBoss begint in de
clustering
ofstandalone
configuratie, als de serverversie 7.4 of hoger is en de runtime Java 17 gebruikt, wordt de configuratie bijgewerkt om het Elytron-subsysteem in te schakelen voor beveiliging. - Als u de app-instelling
WEBSITE_JBOSS_OPTS
configureert, wordt de waarde doorgegeven aan het JBoss-startprogrammascript. Deze instelling kan worden gebruikt om paden naar eigenschapsbestanden en meer vlaggen te bieden die van invloed zijn op het opstarten van JBoss.
3. Serverconfiguratiefase
- Aan het begin van deze fase wacht App Service eerst op zowel de JBoss-server als de beheerinterface om aanvragen te ontvangen voordat u doorgaat. Dit kan enkele seconden duren als Application Insights is ingeschakeld.
- Wanneer zowel JBoss Server als de beheerinterface gereed zijn, doet App Service het volgende:
- Voegt de JBoss-module
azure.appservice
toe, die hulpprogrammaklassen biedt voor logboekregistratie en integratie met App Service. - Hiermee werkt u de consolelogger bij voor het gebruik van een kleurloze modus, zodat logboekbestanden niet vol met kleur-escapereeksen zitten.
- Hiermee stelt u de integratie met Azure Monitor-logboeken in.
- Hiermee worden de binding-IP-adressen van de WSDL- en beheerinterfaces bijgewerkt.
- Voegt de JBoss-module
azure.appservice.easyauth
toe voor integratie met App Service-verificatie en Microsoft Entra-id. - Hiermee werkt u de logboekconfiguratie van toegangslogboeken en de naam en rotatie van het logboekbestand van de hoofdserver bij.
- Voegt de JBoss-module
- Tenzij de app-instelling
WEBSITE_SKIP_AUTOCONFIGURE_DATABASE
is gedefinieerd, worden JDBC-URL's in de App Service-app-instellingen automatisch in App Service-URL's gedefinieerd. Als er geldige JDBC-URL's bestaan voor PostgreSQL, MySQL, MariaDB, Oracle, SQL Server of Azure SQL Database, worden de bijbehorende stuurprogramma's aan de server toegevoegd en wordt er een gegevensbron toegevoegd voor elk van de JDBC-URL's en wordt de JNDI-naam voor elke gegevensbronjava:jboss/env/jdbc/<app-setting-name>_DS
ingesteld op , waar<app-setting-name>
is de naam van de app-instelling. - Als de
clustering
configuratie is ingeschakeld, wordt de consolelogger die moet worden geconfigureerd gecontroleerd. - Als er JAR-bestanden zijn geïmplementeerd in de map /home/site/bibliotheken , wordt er een nieuwe globale module gemaakt met al deze JAR-bestanden.
- Aan het einde van de fase voert App Service het aangepaste opstartscript uit, indien aanwezig. De zoeklogica voor het aangepaste opstartscript is als volgt:
- Als u een opstartopdracht hebt geconfigureerd (in Azure Portal, met Azure CLI, enzovoort), voert u deze uit; anders
- Als het pad /home/site/scripts/startup.sh bestaat, gebruikt u het; anders,
- Als het pad /home/startup.sh bestaat, gebruikt u het.
De aangepaste opstartopdracht of het aangepaste script wordt uitgevoerd als de hoofdgebruiker (niet nodig sudo
), zodat ze Linux-pakketten kunnen installeren of de JBoss CLI kunnen starten om meer JBoss-opdrachten voor installatie/aanpassing uit te voeren (gegevensbronnen maken, resourceadapters installeren), enzovoort. Zie de Ubuntu Server-documentatie voor informatie over Ubuntu-pakketbeheeropdrachten. Zie de JBoss Management CLI-handleiding voor JBoss CLI-opdrachten voor JBoss CLI.
4. Implementatiefase van app
Met het opstartscript worden apps geïmplementeerd in JBoss door op de volgende locaties te kijken, in volgorde van prioriteit:
- Als u de app-instelling
WEBSITE_JAVA_WAR_FILE_NAME
hebt geconfigureerd, implementeert u het bestand dat is opgegeven. - Als /home/site/wwwroot/app.war bestaat, implementeert u deze.
- Als er andere EAR- en WAR-bestanden aanwezig zijn in /home/site/wwwroot, implementeert u deze.
- Als /home/site/wwwroot/webapps bestaat, implementeert u de bestanden en mappen erin. WAR-bestanden worden geïmplementeerd als toepassingen zelf en mappen worden geïmplementeerd als 'uitgevouwen' (niet-gecomprimeerde) web-apps.
- Als er zelfstandige JSP-pagina's bestaan in /home/site/wwwroot, kopieert u deze naar de hoofdmap van de webserver en implementeert u deze als één web-app.
- Als er nog geen implementeerbare bestanden zijn gevonden, implementeert u de standaard welkomstpagina (parkeerpagina) in de hoofdcontext.
5. Herlaadfase van de server
- Zodra de implementatiestappen zijn voltooid, wordt de JBoss-server opnieuw geladen om wijzigingen toe te passen waarvoor een server opnieuw moet worden geladen.
- Nadat de server opnieuw is geladen, moeten de toepassingen die zijn geïmplementeerd op de JBoss EAP-server gereed zijn om te reageren op aanvragen.
- De server wordt uitgevoerd totdat de App Service-app is gestopt of opnieuw wordt opgestart. U kunt de App Service-app handmatig stoppen of opnieuw starten, of u activeert een herstart wanneer u bestanden implementeert of configuratiewijzigingen aanbrengt in de App Service-app.
- Als de JBoss-server abnormaal wordt afgesloten in de
clustering
configuratie, wordt er een laatste functie uitgevoerd die wordt aangeroepenemit_alert_tx_store_not_empty
. De functie controleert of het JBoss-proces een niet-mptig transactiearchiefbestand op schijf heeft achtergelaten; Als dit het probleem is, wordt er een fout vastgelegd in de console:Error: finishing server with non-empty store for node XXXX
. Wanneer een nieuw serverexemplaren wordt gestart, wordt gezocht naar deze niet-mpige transactieopslagbestanden om het werk te hervatten (zie 2. Startfase van de server).
Configuratie van tomcat-basislijn
Notitie
Deze sectie is alleen van toepassing op Linux.
Java-ontwikkelaars kunnen de serverinstellingen aanpassen, problemen oplossen en toepassingen met vertrouwen implementeren in Tomcat als ze weten wat de server.xml bestand- en configuratiedetails van Tomcat zijn. Mogelijke aanpassingen zijn:
- Tomcat-configuratie aanpassen: Door inzicht te krijgen in het server.xml-bestand en de configuratiegegevens van Tomcat, kunt u de serverinstellingen aanpassen aan de behoeften van hun toepassingen.
- Foutopsporing: wanneer een toepassing wordt geïmplementeerd op een Tomcat-server, moeten ontwikkelaars weten wat de serverconfiguratie is om eventuele problemen op te sporen. Dit omvat het controleren van de serverlogboeken, het controleren van de configuratiebestanden en het identificeren van eventuele fouten die kunnen optreden.
- Problemen met Tomcat oplossen: Onvermijdelijk ondervinden Java-ontwikkelaars problemen met hun Tomcat-server, zoals prestatieproblemen of configuratiefouten. Door inzicht te krijgen in de configuratiegegevens van het server.xml bestand en tomcat, kunnen ontwikkelaars deze problemen snel diagnosticeren en oplossen, waardoor tijd en moeite kunnen worden bespaard.
- Toepassingen implementeren in Tomcat: ontwikkelaars moeten weten hoe ze het server.xml-bestand en andere Tomcat-instellingen moeten configureren om een Java-webtoepassing te implementeren in Tomcat. Inzicht in deze details is essentieel voor het implementeren van toepassingen en ervoor zorgen dat ze probleemloos op de server worden uitgevoerd.
Wanneer u een app met ingebouwde Tomcat maakt om uw Java-workload (een WAR-bestand of een JAR-bestand) te hosten, zijn er bepaalde instellingen die u uit het vak voor Tomcat-configuratie haalt. Raadpleeg de officiële Documentatie voor Apache Tomcat voor gedetailleerde informatie, waaronder de standaardconfiguratie voor Tomcat-webserver.
Daarnaast zijn er bepaalde transformaties die op het begin van de server.xml voor Tomcat-distributie verder worden toegepast. Dit zijn transformaties naar de connector-, host- en klepinstellingen.
De nieuwste versies van Tomcat hebben server.xml (8.5.58 en 9.0.38 en hoger). Oudere versies van Tomcat gebruiken geen transformaties en hebben mogelijk ander gedrag als gevolg.
Connector
<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
is ingesteld op16384
URIEncoding
is ingesteld opUTF-8
conectionTimeout
is ingesteld opWEBSITE_TOMCAT_CONNECTION_TIMEOUT
, wat standaard is ingesteld op240000
maxThreads
is ingesteld opWEBSITE_CATALINA_MAXTHREADS
, wat standaard is ingesteld op200
maxConnections
is ingesteld opWEBSITE_CATALINA_MAXCONNECTIONS
, wat standaard is ingesteld op10000
Notitie
De instellingen connectionTimeout, maxThreads en maxConnections kunnen worden afgestemd met app-instellingen
Hieronder volgen voorbeelden van CLI-opdrachten die u kunt gebruiken om de waarden van conectionTimeout, maxThreads of maxConnections te wijzigen:
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
- Connector gebruikt het adres van de container in plaats van 127.0.0.1
Host
<Host appBase="${site.appbase}" xmlBase="${site.xmlbase}" unpackWARs="${site.unpackwars}" workDir="${site.tempdir}" errorReportValveClass="com.microsoft.azure.appservice.AppServiceErrorReportValve" name="localhost" autoDeploy="true">
appBase
is ingesteld opAZURE_SITE_APP_BASE
, wat standaard is ingesteld op lokaalWebappsLocalPath
xmlBase
is ingesteld opAZURE_SITE_HOME
, wat standaard is ingesteld op/site/wwwroot
unpackWARs
is ingesteld opAZURE_UNPACK_WARS
, wat standaard is ingesteld optrue
workDir
is ingesteld opJAVA_TMP_DIR
, welke standaardwaardenTMP
errorReportValveClass
maakt gebruik van onze aangepaste foutrapportklep
Ventiel
<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
is ingesteld opAZURE_LOGGING_DIR
, wat standaard is ingesteld ophome\logFiles
maxDays
is aanWEBSITE_HTTPLOGGING_RETENTION_DAYS
, wat standaard0
[voor altijd]
In Linux heeft het allemaal dezelfde aanpassing, plus:
Voegt enkele fout- en rapportagepagina's toe aan de klep:
<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>
Volgende stappen
Ga naar het Azure voor Java-ontwikkelaarscentrum om azure-snelstartgidsen, zelfstudies en Java-referentiedocumentatie te vinden.