Konfigurera en Java-app för Azure App Service
Kommentar
För Spring-program rekommenderar vi att du använder Azure Spring Apps. Du kan dock fortfarande använda Azure App Service som mål. Mer information finns i Vägledning för Java-arbetsbelastningsmål.
Med Azure App Service kan Java-utvecklare snabbt skapa, distribuera och skala sina Java SE-, Tomcat- och JBoss EAP-webbprogram på en fullständigt hanterad tjänst. Distribuera program med Maven-plugin-program, från kommandoraden eller i redigeringsprogram som IntelliJ, Eclipse eller Visual Studio Code.
Den här guiden innehåller viktiga begrepp och instruktioner för Java-utvecklare som använder App Service. Om du aldrig har använt Azure App Service bör du läsa igenom Java-snabbstarten först. Allmänna frågor om hur du använder App Service som inte är specifika för Java-utveckling besvaras i Vanliga frågor och svar om App Service.
Visa Java-version
Om du vill visa den aktuella Java-versionen kör du följande kommando i Cloud Shell:
az webapp config show --name <app-name> --resource-group <resource-group-name> --query "[javaVersion, javaContainer, javaContainerVersion]"
Om du vill visa alla Java-versioner som stöds kör du följande kommando i Cloud Shell:
az webapp list-runtimes --os windows | grep java
Om du vill visa den aktuella Java-versionen kör du följande kommando i Cloud Shell:
az webapp config show --resource-group <resource-group-name> --name <app-name> --query linuxFxVersion
Om du vill visa alla Java-versioner som stöds kör du följande kommando i Cloud Shell:
az webapp list-runtimes --os linux | grep "JAVA\|TOMCAT\|JBOSSEAP"
Mer information om versionsstöd finns i Supportprincip för språkkörning i App Service.
Distribuera din app
Build Tools
Maven
Med Plugin-programmet Maven för Azure Web Apps kan du enkelt förbereda ditt Maven Java-projekt för Azure Web App med ett kommando i projektroten:
mvn com.microsoft.azure:azure-webapp-maven-plugin:2.11.0:config
Det här kommandot lägger till ett azure-webapp-maven-plugin
plugin-program och en relaterad konfiguration genom att uppmana dig att välja en befintlig Azure-webbapp eller skapa en ny. Sedan kan du distribuera din Java-app till Azure med följande kommando:
mvn package azure-webapp:deploy
Här är en exempelkonfiguration i 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
Konfigurera Gradle-plugin-programmet för Azure Web Apps genom att lägga till plugin-programmet i :
build.gradle
plugins { id "com.microsoft.azure.azurewebapp" version "1.7.1" }
Konfigurera information om webbappen. Motsvarande Azure-resurser skapas om de inte finns. Här är en exempelkonfiguration för mer information i det här dokumentet.
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 } }
Distribuera med ett kommando.
gradle azureWebAppDeploy
IDE:er
Azure ger sömlös Utveckling av Java App Service i populära Java-ID:er, inklusive:
- VS Code: Java Web Apps med Visual Studio Code
- IntelliJ IDEA:Skapa en Hello World-webbapp för Azure App Service med IntelliJ
- Eclipse:Skapa en Hello World-webbapp för Azure App Service med Eclipse
Kudu API
Java SE
Om du vill distribuera .jar filer till Java SE använder du /api/publish/
slutpunkten för Kudu-webbplatsen. Mer information om det här API:et finns i den här dokumentationen.
Kommentar
Ditt .jar-program måste namnges app.jar
för Att App Service ska kunna identifiera och köra ditt program. Plugin-programmet Maven gör detta åt dig automatiskt under distributionen. Om du inte vill byta namn på jar-filen till app.jar kan du ladda upp ett gränssnittsskript med kommandot för att köra din .jar-app. Klistra in den absoluta sökvägen till det här skriptet i textrutan Startfil i avsnittet Konfiguration i portalen. Startskriptet körs inte från den katalog som det placeras i. Använd därför alltid absoluta sökvägar för att referera till filer i startskriptet (till exempel: java -jar /home/myapp/myapp.jar
).
Tomcat
Om du vill distribuera .war-filer till Tomcat använder du /api/wardeploy/
slutpunkten för att PUBLICERA din arkivfil. Mer information om det här API:et finns i den här dokumentationen.
JBoss-EAP
Om du vill distribuera .war-filer till JBoss använder du /api/wardeploy/
slutpunkten för att PUBLICERA din arkivfil. Mer information om det här API:et finns i den här dokumentationen.
Om du vill distribuera .ear-filer använder du FTP. .ear-programmet distribueras till kontextroten som definierats i programmets konfiguration. Om kontextroten för din app till exempel är <context-root>myapp</context-root>
kan du bläddra på webbplatsen på /myapp
sökvägen: http://my-app-name.azurewebsites.net/myapp
. Om du vill att webbappen ska hanteras i rotsökvägen kontrollerar du att appen anger kontextroten till rotsökvägen: <context-root>/</context-root>
. Mer information finns i Ange kontextroten för ett webbprogram.
Distribuera inte .war eller .jar med FTP. FTP-verktyget är utformat för att ladda upp startskript, beroenden eller andra körningsfiler. Det är inte det optimala valet för att distribuera webbappar.
Logga och felsöka appar
Prestandarapporter, trafikvisualiseringar och hälsokontroller är tillgängliga för varje app via Azure-portalen. Mer information finns i Översikt över Azure App Service-diagnostik.
Strömma diagnostikloggar
Om du vill komma åt konsolloggarna som genereras i din programkod i App Service aktiverar du diagnostisk loggning genom att köra följande kommando i Cloud Shell:
az webapp log config --resource-group <resource-group-name> --name <app-name> --docker-container-logging filesystem --level Verbose
Möjliga värden för --level
är: Error
, Warning
, Info
och Verbose
. Varje efterföljande nivå omfattar den föregående nivån. Exempel: Error
omfattar endast felmeddelanden och Verbose
omfattar alla meddelanden.
När diagnostisk loggning har aktiverats kör du följande kommando för att visa loggströmmen:
az webapp log tail --resource-group <resource-group-name> --name <app-name>
Om du inte ser konsolloggarna omedelbart kan du titta efter igen efter 30 sekunder.
Kommentar
Du kan även granska loggfilerna från din webbläsare via https://<app-name>.scm.azurewebsites.net/api/logs/docker
.
Skriv Ctrl
+C
när som helst för att stoppa loggströmningen.
Du kan komma åt konsolloggarna som genereras inifrån containern.
Aktivera först containerloggning genom att köra följande kommando:
az webapp log config --name <app-name> --resource-group <resource-group-name> --docker-container-logging filesystem
Ersätt <app-name>
och <resource-group-name>
med de namn som är lämpliga för din webbapp.
När containerloggning har aktiverats kör du följande kommando för att visa loggströmmen:
az webapp log tail --name <app-name> --resource-group <resource-group-name>
Om du inte ser konsolloggarna omedelbart kan du titta efter igen efter 30 sekunder.
Om du vill stoppa loggströmningen när som helst skriver du Ctrl+C.
Du kan också granska loggfilerna i en webbläsare på https://<app-name>.scm.azurewebsites.net/api/logs/docker
.
Mer information finns i Stream-loggar i Cloud Shell.
SSH-konsolåtkomst
Om du ska öppna en SSH-direktsession med din container måste appen vara igång.
Klistra in följande URL i webbläsaren och ersätt <app-name>
med namnet på appen:
https://<app-name>.scm.azurewebsites.net/webssh/host
Om du inte redan har autentiserats måste du autentisera dig med din Azure-prenumeration för att kunna ansluta. När autentiseringen är klar visas ett gränssnitt i webbläsaren där du kan köra kommandon i containern.
Kommentar
Eventuella ändringar som du gör utanför katalogen /start lagras i själva containern och finns inte kvar om appen startas om.
Om du vill öppna en SSH-fjärrsession från den lokala datorn, kan du läsa mer i Öppna SSH-session från fjärrgränssnitt.
Verktyg för felsökning
De inbyggda Java-avbildningarna baseras på operativsystemet Alpine Linux . apk
Använd pakethanteraren för att installera felsökningsverktyg eller kommandon.
Java Profiler
Alla Java-körningar i Azure App Service levereras med JDK Flight Recorder för profilering av Java-arbetsbelastningar. Du kan använda den för att registrera JVM-, system- och programhändelser och felsöka problem i dina program.
Mer information om Java Profiler finns i Dokumentationen om Azure Application Insights.
Flight Recorder
Alla Java-körningar i App Service levereras med Java Flight Recorder. Du kan använda den för att registrera JVM-, system- och programhändelser och felsöka problem i dina Java-program.
Tidsförd inspelning
Om du vill ta en tidsbaserad inspelning behöver du PID (process-ID) för Java-programmet. Om du vill hitta PID:en öppnar du en webbläsare till webbappens SCM-webbplats på https://<your-site-name>.scm.azurewebsites.net/ProcessExplorer/
. Den här sidan visar de processer som körs i webbappen. Hitta processen med namnet "java" i tabellen och kopiera motsvarande PID (process-ID).
Öppna sedan felsökningskonsolen i det översta verktygsfältet på SCM-platsen och kör följande kommando. Ersätt <pid>
med det process-ID som du kopierade tidigare. Det här kommandot startar en 30-sekunders profilerarinspelning av ditt Java-program och genererar en fil med namnet timed_recording_example.jfr
i C:\home
katalogen.
jcmd <pid> JFR.start name=TimedRecording settings=profile duration=30s filename="C:\home\timed_recording_example.JFR"
SSH till Din App Service och kör jcmd
kommandot för att se en lista över alla Java-processer som körs. Förutom själva jcmd bör du se att Java-programmet körs med ett process-ID-nummer (pid).
078990bbcd11:/home# jcmd
Picked up JAVA_TOOL_OPTIONS: -Djava.net.preferIPv4Stack=true
147 sun.tools.jcmd.JCmd
116 /home/site/wwwroot/app.jar
Kör följande kommando för att starta en 30-sekunders inspelning av JVM. Den profilerar JVM och skapar en JFR-fil med namnet jfr_example.jfr i hemkatalogen. (Ersätt 116 med pid för din Java-app.)
jcmd 116 JFR.start name=MyRecording settings=profile duration=30s filename="/home/jfr_example.jfr"
Under 30-sekundersintervallet kan du verifiera att inspelningen sker genom att köra jcmd 116 JFR.check
. Kommandot visar alla inspelningar för den angivna Java-processen.
Kontinuerlig inspelning
Du kan använda Java Flight Recorder för att kontinuerligt profilera ditt Java-program med minimal påverkan på körningsprestanda. Det gör du genom att köra följande Azure CLI-kommando för att skapa en appinställning med namnet JAVA_OPTS med nödvändig konfiguration. Innehållet i JAVA_OPTS appinställning skickas till java
kommandot när appen startas.
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
När inspelningen startar kan du när som helst dumpa aktuella inspelningsdata med hjälp av JFR.dump
kommandot .
jcmd <pid> JFR.dump name=continuous_recording filename="/home/recording1.jfr"
Analysera .jfr
filer
Använd FTPS för att ladda ned JFR-filen till den lokala datorn. Om du vill analysera JFR-filen laddar du ned och installerar Java Mission Control. Anvisningar om Java Mission Control finns i JMC-dokumentationenoch installationsanvisningarna.
Apploggning
Aktivera programloggning via Azure-portalen eller Azure CLI för att konfigurera App Service för att skriva programmets standardkonsolutdata och standardkonsolfelströmmar till det lokala filsystemet eller Azure Blob Storage. Loggning till den lokala App Service-filsysteminstansen inaktiveras 12 timmar efter att den har konfigurerats. Om du behöver längre kvarhållning konfigurerar du programmet för att skriva utdata till en Blob Storage-container. Dina Java- och Tomcat-apploggar finns i katalogen /home/LogFiles/Application/ .
Aktivera programloggning via Azure-portalen eller Azure CLI för att konfigurera App Service för att skriva programmets standardkonsolutdata och standardkonsolfelströmmar till det lokala filsystemet eller Azure Blob Storage. Om du behöver längre kvarhållning konfigurerar du programmet för att skriva utdata till en Blob Storage-container. Dina Java- och Tomcat-apploggar finns i katalogen /home/LogFiles/Application/ .
Azure Blob Storage-loggning för Linux-baserade appar kan bara konfigureras med Azure Monitor.
Om ditt program använder Logback eller Log4j för spårning kan du vidarebefordra dessa spårningar för granskning till Azure Application Insights med hjälp av konfigurationsinstruktionerna för loggningsramverket i Utforska Java-spårningsloggar i Application Insights.
Kommentar
På grund av kända säkerhetsrisker cve-2021-44228, se till att använda Log4j version 2.16 eller senare.
Anpassning och justering
Azure App Service stöder direktjustering och anpassning via Azure-portalen och CLI. Läs följande artiklar om konfiguration av icke-Java-specifika webbappar:
- Konfigurera appinställningar
- Konfigurera en anpassad domän
- Konfigurera TLS/SSL-bindningar
- Lägga till ett CDN
- Konfigurera Kudu-webbplatsen
Kopiera appinnehåll lokalt
Ange appinställningen JAVA_COPY_ALL
till true
för att kopiera appinnehållet till den lokala arbetaren från det delade filsystemet. Den här inställningen hjälper dig att åtgärda problem med fillåsning.
Ange Java-körningsalternativ
Om du vill ange allokerat minne eller andra JVM-körningsalternativ skapar du en appinställning med namnet JAVA_OPTS
med alternativen. App Service skickar den här inställningen som en miljövariabel till Java-körningen när den startas.
I Azure-portalen, under Program Inställningar för webbappen, skapar du en ny appinställning med namnet JAVA_OPTS
Java SE eller CATALINA_OPTS
tomcat som innehåller andra inställningar, till exempel -Xms512m -Xmx1204m
.
Om du vill konfigurera appinställningen från Plugin-programmet Maven lägger du till inställnings-/värdetaggar i avsnittet Azure-plugin-program. I följande exempel anges en specifik minsta och högsta Java-heapstorlek:
<appSettings>
<property>
<name>JAVA_OPTS</name>
<value>-Xms1024m -Xmx1024m</value>
</property>
</appSettings>
Kommentar
Du behöver inte skapa en web.config-fil när du använder Tomcat i Windows App Service.
Utvecklare som kör ett enda program med ett distributionsfack i sin App Service-plan kan använda följande alternativ:
- B1- och S1-instanser:
-Xms1024m -Xmx1024m
- B2- och S2-instanser:
-Xms3072m -Xmx3072m
- B3- och S3-instanser:
-Xms6144m -Xmx6144m
- P1v2-instanser:
-Xms3072m -Xmx3072m
- P2v2-instanser:
-Xms6144m -Xmx6144m
- P3v2-instanser:
-Xms12800m -Xmx12800m
- P1v3-instanser:
-Xms6656m -Xmx6656m
- P2v3-instanser:
-Xms14848m -Xmx14848m
- P3v3-instanser:
-Xms30720m -Xmx30720m
- I1-instanser:
-Xms3072m -Xmx3072m
- I2-instanser:
-Xms6144m -Xmx6144m
- I3-instanser:
-Xms12800m -Xmx12800m
- I1v2-instanser:
-Xms6656m -Xmx6656m
- I2v2-instanser:
-Xms14848m -Xmx14848m
- I3v2-instanser:
-Xms30720m -Xmx30720m
När du justerar inställningarna för programmets heap granskar du din App Service-planinformation och tar hänsyn till att flera program och distributionsfack måste hitta den optimala allokeringen av minne.
Aktivera webbsocketer
Aktivera stöd för webb socketar i Azure-portalen i programmets programinställningar . Du måste starta om programmet för att inställningen ska börja gälla.
Aktivera stöd för web socket med hjälp av Azure CLI med följande kommando:
az webapp config set --name <app-name> --resource-group <resource-group-name> --web-sockets-enabled true
Starta sedan om programmet:
az webapp stop --name <app-name> --resource-group <resource-group-name>
az webapp start --name <app-name> --resource-group <resource-group-name>
Ange standardteckenkodning
I Azure-portalen, under Program Inställningar för webbappen, skapar du en ny appinställning med namnet JAVA_OPTS
med värdet -Dfile.encoding=UTF-8
.
Du kan också konfigurera appinställningen med hjälp av Plugin-programmet App Service Maven. Lägg till inställningsnamnet och värdetaggar i plugin-konfigurationen:
<appSettings>
<property>
<name>JAVA_OPTS</name>
<value>-Dfile.encoding=UTF-8</value>
</property>
</appSettings>
Förkompilera JSP-filer
För att förbättra prestanda för Tomcat-program kan du kompilera dina JSP-filer innan du distribuerar till App Service. Du kan använda Plugin-programmet Maven som tillhandahålls av Apache Sling eller använda den här Ant-byggfilen.
Säkra program
Java-program som körs i App Service har samma uppsättning rekommenderade säkerhetsmetoder som andra program.
Autentisera användare (Enkel autentisering)
Konfigurera appautentisering i Azure-portalen med alternativet Autentisering och auktorisering . Därifrån kan du aktivera autentisering med hjälp av Microsoft Entra-ID eller sociala inloggningar som Facebook, Google eller GitHub. Konfigurationen av Azure-portalen fungerar bara när du konfigurerar en enda autentiseringsprovider. Mer information finns i Konfigurera din App Service-app så att den använder Microsoft Entra-inloggning och relaterade artiklar för andra identitetsprovidrar. Om du behöver aktivera flera inloggningsleverantörer följer du anvisningarna i Anpassa inloggningar och utloggningar.
Java SE
Spring Boot-utvecklare kan använda Microsoft Entra Spring Boot Starter för att skydda program med välbekanta Spring Security-anteckningar och API:er. Se till att öka den maximala sidhuvudstorleken i filen application.properties . Vi föreslår värdet 16384
.
Tomcat
Ditt Tomcat-program kan komma åt användarens anspråk direkt från servleten genom att casta objektet Principal till ett Map-objekt. Objektet Map
mappar varje anspråkstyp till en samling anspråk för den typen. I följande kodexempel request
är en instans av HttpServletRequest
.
Map<String, Collection<String>> map = (Map<String, Collection<String>>) request.getUserPrincipal();
Nu kan du inspektera objektet Map
för ett specifikt anspråk. Följande kodfragment itererar till exempel genom alla anspråkstyper och skriver ut innehållet i varje samling.
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);
}
}
}
Om du vill logga ut användare använder du /.auth/ext/logout
sökvägen. Om du vill utföra andra åtgärder kan du läsa dokumentationen om Anpassa inloggningar och utloggningar. Det finns också officiell dokumentation om Tomcat HttpServletRequest-gränssnittet och dess metoder. Följande servlet-metoder är också hydratiserade baserat på din App Service-konfiguration:
public boolean isSecure()
public String getRemoteAddr()
public String getRemoteHost()
public String getScheme()
public int getServerPort()
Om du vill inaktivera den här funktionen skapar du en programinställning med namnet WEBSITE_AUTH_SKIP_PRINCIPAL
med värdet 1
. Om du vill inaktivera alla servlet-filter som lagts till av App Service skapar du en inställning med namnet WEBSITE_SKIP_FILTERS
med värdet 1
.
Konfigurera TLS/SSL
Om du vill ladda upp ett befintligt TLS/SSL-certifikat och binda det till ditt programs domännamn följer du anvisningarna i Skydda ett anpassat DNS-namn med en TLS/SSL-bindning i Azure App Service. Du kan också konfigurera appen för att framtvinga TLS/SSL.
Använda KeyVault-referenser
Azure KeyVault tillhandahåller centraliserad hantering av hemligheter med åtkomstprinciper och granskningshistorik. Du kan lagra hemligheter (till exempel lösenord eller anslutningssträng) i KeyVault och få åtkomst till dessa hemligheter i ditt program via miljövariabler.
Följ först anvisningarna för att ge din app åtkomst till ett nyckelvalv och göra en KeyVault-referens till din hemlighet i en programinställning. Du kan kontrollera att referensen matchar hemligheten genom att skriva ut miljövariabeln vid fjärråtkomst till App Service-terminalen.
Om du vill mata in dessa hemligheter i spring- eller Tomcat-konfigurationsfilen använder du syntax för miljövariabelinmatning (${MY_ENV_VAR}
). Information om Spring-konfigurationsfiler finns i den här dokumentationen om externaliserade konfigurationer.
Använda Java Key Store
Som standard läses alla offentliga eller privata certifikat som laddas upp till App Service Linux in i respektive Java Key Stores när containern startar. När du har laddat upp certifikatet måste du starta om App Service för att det ska läsas in i Java Key Store. Offentliga certifikat läses in i nyckelarkivet på $JRE_HOME/lib/security/cacerts
och privata certifikat lagras i $JRE_HOME/lib/security/client.jks
.
Det kan krävas mer konfiguration för att kryptera din JDBC-anslutning med certifikat i Java Key Store. Se dokumentationen för din valda JDBC-drivrutin.
Initiera Java Key Store
Om du vill initiera import java.security.KeyStore
objektet läser du in keystore-filen med lösenordet. Standardlösenordet för båda nyckelarkiven är 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());
Läs in nyckelarkivet manuellt
Du kan läsa in certifikat manuellt till nyckelarkivet. Skapa en appinställning, SKIP_JAVA_KEYSTORE_LOAD
, med värdet 1
för att inaktivera App Service från att läsa in certifikaten i nyckelarkivet automatiskt. Alla offentliga certifikat som laddas upp till App Service via Azure-portalen lagras under /var/ssl/certs/
. Privata certifikat lagras under /var/ssl/private/
.
Du kan interagera eller felsöka Java Key Tool genom att öppna en SSH-anslutning till Din App Service och köra kommandot keytool
. En lista över kommandon finns i dokumentationen för nyckelverktyget. Mer information om KeyStore-API :et finns i den officiella dokumentationen.
Konfigurera APM-plattformar
Det här avsnittet visar hur du ansluter Java-program som distribuerats i Azure App Service med Azure Monitor Application Insights-, NewRelic- och AppDynamics-programprestandaövervakningsplattformar (APM).
Konfigurera Application Insights
Azure Monitor Application Insights är en molnbaserad programövervakningstjänst som gör det möjligt för kunder att observera fel, flaskhalsar och användningsmönster för att förbättra programmets prestanda och minska tiden till lösning (MTTR). Med några klick eller CLI-kommandon kan du aktivera övervakning för dina Node.js- eller Java-appar, automatiskt samla in loggar, mått och distribuerade spårningar, vilket eliminerar behovet av att inkludera en SDK i din app. Mer information om tillgängliga appinställningar för att konfigurera agenten finns i Application Insights-dokumentationen.
Azure Portal
Om du vill aktivera Application Insights från Azure-portalen går du till Application Insights på menyn till vänster och väljer Aktivera Application Insights. Som standard används en ny application insights-resurs med samma namn som webbappen. Du kan välja att använda en befintlig application insights-resurs eller ändra namnet. Välj Använd längst ned.
Azure CLI
Om du vill aktivera via Azure CLI måste du skapa en Application Insights-resurs och ange ett par appinställningar på Azure-portalen för att ansluta Application Insights till din webbapp.
Aktivera Application Insights-tillägget
az extension add -n application-insights
Skapa en Application Insights-resurs med följande CLI-kommando. Ersätt platshållarna med önskat resursnamn och din grupp.
az monitor app-insights component create --app <resource-name> -g <resource-group> --location westus2 --kind web --application-type web
Observera värdena för
connectionString
ochinstrumentationKey
, du behöver dessa värden i nästa steg.Om du vill hämta en lista över andra platser kör du
az account list-locations
.
Ange instrumenteringsnyckeln, anslutningssträng och övervakningsagentversionen som appinställningar i webbappen. Ersätt
<instrumentationKey>
och<connectionString>
med värdena från föregående steg.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"
Ange instrumenteringsnyckeln, anslutningssträng och övervakningsagentversionen som appinställningar i webbappen. Ersätt
<instrumentationKey>
och<connectionString>
med värdena från föregående steg.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"
Konfigurera ny relik
Skapa ett NewRelic-konto på NewRelic.com
Ladda ned Java-agenten från NewRelic. Det har ett filnamn som liknar newrelic-java-x.x.x.zip.
Kopiera licensnyckeln. Du behöver den för att konfigurera agenten senare.
SSH till din App Service-instans och skapa en ny katalog /home/site/wwwroot/apm.
Ladda upp de uppackade Java-agentfilerna i NewRelic till en katalog under /home/site/wwwroot/apm. Filerna för din agent ska finnas i /home/site/wwwroot/apm/newrelic.
Ändra YAML-filen på /home/site/wwwroot/apm/newrelic/newrelic.yml och ersätt platshållarlicensvärdet med din egen licensnyckel.
I Azure-portalen bläddrar du till ditt program i App Service och skapar en ny programinställning.
- För Java SE-appar skapar du en miljövariabel med namnet
JAVA_OPTS
med värdet-javaagent:/home/site/wwwroot/apm/newrelic/newrelic.jar
. - För Tomcat skapar du en miljövariabel med namnet
CATALINA_OPTS
med värdet-javaagent:/home/site/wwwroot/apm/newrelic/newrelic.jar
.
- För Java SE-appar skapar du en miljövariabel med namnet
Skapa ett NewRelic-konto på NewRelic.com
Ladda ned Java-agenten från NewRelic. Det har ett filnamn som liknar newrelic-java-x.x.x.zip.
Kopiera din licensnyckel. Du behöver den för att konfigurera agenten senare.
SSH till din App Service-instans och skapa en ny katalog /home/site/wwwroot/apm.
Ladda upp de uppackade Java-agentfilerna i NewRelic till en katalog under /home/site/wwwroot/apm. Filerna för din agent ska finnas i /home/site/wwwroot/apm/newrelic.
Ändra YAML-filen på /home/site/wwwroot/apm/newrelic/newrelic.yml och ersätt platshållarlicensvärdet med din egen licensnyckel.
I Azure-portalen bläddrar du till ditt program i App Service och skapar en ny programinställning.
- För Java SE-appar skapar du en miljövariabel med namnet
JAVA_OPTS
med värdet-javaagent:/home/site/wwwroot/apm/newrelic/newrelic.jar
. - För Tomcat skapar du en miljövariabel med namnet
CATALINA_OPTS
med värdet-javaagent:/home/site/wwwroot/apm/newrelic/newrelic.jar
.
- För Java SE-appar skapar du en miljövariabel med namnet
Om du redan har en miljövariabel för
JAVA_OPTS
ellerCATALINA_OPTS
lägger du till-javaagent:/...
alternativet i slutet av det aktuella värdet.
Konfigurera AppDynamics
Skapa ett AppDynamics-konto på AppDynamics.com
Ladda ned Java-agenten från AppDynamics webbplats. Filnamnet liknar AppServerAgent-x.x.x.xxxxx.zip
Använd Kudu-konsolen för att skapa en ny katalog /home/site/wwwroot/apm.
Ladda upp Java-agentfilerna till en katalog under /home/site/wwwroot/apm. Filerna för din agent ska finnas i /home/site/wwwroot/apm/appdynamics.
I Azure-portalen bläddrar du till ditt program i App Service och skapar en ny programinställning.
- För Java SE-appar skapar du en miljövariabel med namnet
JAVA_OPTS
med värdet-javaagent:/home/site/wwwroot/apm/appdynamics/javaagent.jar -Dappdynamics.agent.applicationName=<app-name>
där<app-name>
är ditt App Service-namn. - För Tomcat-appar skapar du en miljövariabel med namnet
CATALINA_OPTS
med värdet-javaagent:/home/site/wwwroot/apm/appdynamics/javaagent.jar -Dappdynamics.agent.applicationName=<app-name>
där<app-name>
är ditt App Service-namn.
- För Java SE-appar skapar du en miljövariabel med namnet
Skapa ett AppDynamics-konto på AppDynamics.com
Ladda ned Java-agenten från AppDynamics webbplats. Filnamnet liknar AppServerAgent-x.x.x.xxxxx.zip
SSH till din App Service-instans och skapa en ny katalog /home/site/wwwroot/apm.
Ladda upp Java-agentfilerna till en katalog under /home/site/wwwroot/apm. Filerna för din agent ska finnas i /home/site/wwwroot/apm/appdynamics.
I Azure-portalen bläddrar du till ditt program i App Service och skapar en ny programinställning.
- För Java SE-appar skapar du en miljövariabel med namnet
JAVA_OPTS
med värdet-javaagent:/home/site/wwwroot/apm/appdynamics/javaagent.jar -Dappdynamics.agent.applicationName=<app-name>
där<app-name>
är ditt App Service-namn. - För Tomcat-appar skapar du en miljövariabel med namnet
CATALINA_OPTS
med värdet-javaagent:/home/site/wwwroot/apm/appdynamics/javaagent.jar -Dappdynamics.agent.applicationName=<app-name>
där<app-name>
är ditt App Service-namn.
- För Java SE-appar skapar du en miljövariabel med namnet
Kommentar
Om du redan har en miljövariabel för JAVA_OPTS
eller CATALINA_OPTS
lägger du till -javaagent:/...
alternativet i slutet av det aktuella värdet.
Konfigurera datakällor
Java SE
För att ansluta till datakällor i Spring Boot-program rekommenderar vi att du skapar anslutningssträng och matar in dem i filen application.properties.
I avsnittet "Konfiguration" på App Service-sidan anger du ett namn för strängen, klistrar in JDBC-anslutningssträng i värdefältet och anger typen "Anpassad". Du kan också ange den här anslutningssträng som platsinställning.
Den här anslutningssträng är tillgänglig för vårt program som en miljövariabel med namnet
CUSTOMCONNSTR_<your-string-name>
. Exempel:CUSTOMCONNSTR_exampledb
I filen application.properties refererar du till den här anslutningssträng med miljövariabelns namn. I vårt exempel använder vi följande.
app.datasource.url=${CUSTOMCONNSTR_exampledb}
Mer information finns i Spring Boot-dokumentationen om dataåtkomst och externaliserade konfigurationer.
Tomcat
De här anvisningarna gäller för alla databasanslutningar. Du måste fylla platshållarna med den valda databasens drivrutinsklassnamn och JAR-fil. Tillhandahålls är en tabell med klassnamn och drivrutinsnedladdningar för vanliga databaser.
Databas | Namn på drivrutinsklass | JDBC-drivrutin |
---|---|---|
PostgreSQL | org.postgresql.Driver |
Ladda ned |
MySQL | com.mysql.jdbc.Driver |
Ladda ned (välj "Plattformsoberoende") |
SQL Server | com.microsoft.sqlserver.jdbc.SQLServerDriver |
Ladda ned |
Om du vill konfigurera Tomcat att använda Java Database Anslut ivity (JDBC) eller Java Persistence API (JPA) anpassar CATALINA_OPTS
du först miljövariabeln som tomcat läser in vid start. Ange dessa värden via en appinställning i Plugin-programmet App Service Maven:
<appSettings>
<property>
<name>CATALINA_OPTS</name>
<value>"$CATALINA_OPTS -Ddbuser=${DBUSER} -Ddbpassword=${DBPASSWORD} -DconnURL=${CONNURL}"</value>
</property>
</appSettings>
Eller ange miljövariablerna på sidan Konfigurationsprogram>Inställningar i Azure-portalen.
Bestäm sedan om datakällan ska vara tillgänglig för ett program eller för alla program som körs på Tomcat-servleten.
Datakällor på programnivå
Skapa en context.xml fil i meta-INF/ -katalogen i projektet. Skapa meta-INF/-katalogen om den inte finns.
I context.xml lägger du till ett
Context
element för att länka datakällan till en JNDI-adress.driverClassName
Ersätt platshållaren med drivrutinens klassnamn från tabellen ovan.<Context> <Resource name="jdbc/dbconnection" type="javax.sql.DataSource" url="${connURL}" driverClassName="<insert your driver class name>" username="${dbuser}" password="${dbpassword}" /> </Context>
Uppdatera programmets web.xml för att använda datakällan i ditt program.
<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>
Delade resurser på servernivå
Tomcat-installationer på App Service i Windows finns i delat utrymme i App Service-planen. Du kan inte direkt ändra en Tomcat-installation för serveromfattande konfiguration. Om du vill göra konfigurationsändringar på servernivå i Tomcat-installationen måste du kopiera Tomcat till en lokal mapp där du kan ändra Tomcats konfiguration.
Automatisera skapandet av anpassad Tomcat vid appstart
Du kan använda ett startskript för att utföra åtgärder innan en webbapp startar. Startskriptet för att anpassa Tomcat måste utföra följande steg:
- Kontrollera om Tomcat redan har kopierats och konfigurerats lokalt. I så fall kan startskriptet sluta här.
- Kopiera Tomcat lokalt.
- Gör de nödvändiga konfigurationsändringarna.
- Ange att konfigurationen har slutförts.
Skapa en fil med namnet startup.cmd
eller startup.ps1
i katalogen för wwwroot
Windows-appar. Den här filen körs automatiskt innan Tomcat-servern startar.
Här är ett PowerShell-skript som slutför dessa steg:
# 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
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
Transformering
Ett vanligt användningsfall för att anpassa en Tomcat-version är att ändra , eller web.xml
Tomcat-konfigurationsfilernaserver.xml
context.xml
. App Service ändrar redan dessa filer för att tillhandahålla plattformsfunktioner. Om du vill fortsätta att använda dessa funktioner är det viktigt att bevara innehållet i dessa filer när du gör ändringar i dem. För att åstadkomma detta rekommenderar vi att du använder en XSL-transformering (XSLT). Använd en XSL-transformering för att göra ändringar i XML-filerna samtidigt som det ursprungliga innehållet i filen bevaras.
Exempel på XSLT-fil
Den här exempeltransformeringen lägger till en ny anslutningsnod i server.xml
. Observera identitetstransformeringen, som bevarar det ursprungliga innehållet i filen.
<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>
Funktion för XSL-transformering
PowerShell har inbyggda verktyg för att transformera XML-filer med hjälp av XSL-transformeringar. Följande skript är en exempelfunktion som du kan använda i startup.ps1
för att utföra transformering:
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
}
Appinställningar
Plattformen måste också veta var din anpassade version av Tomcat är installerad. Du kan ange installationens plats i appinställningen CATALINA_BASE
.
Du kan använda Azure CLI för att ändra den här inställningen:
az webapp config appsettings set -g $MyResourceGroup -n $MyUniqueApp --settings CATALINA_BASE="%LOCAL_EXPANDED%\tomcat"
Eller så kan du ändra inställningen manuellt i Azure-portalen:
- Gå till Inställningar> Konfigurationsprograminställningar.>
- Välj Ny programinställning.
- Använd dessa värden för att skapa inställningen:
- Namn:
CATALINA_BASE
- Värde:
"%LOCAL_EXPANDED%\tomcat"
- Namn:
Exempel på startup.ps1
Följande exempelskript kopierar en anpassad Tomcat till en lokal mapp, utför en XSL-transformering och anger att transformeringen lyckades:
# 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
}
Slutför konfigurationen
Slutligen placerar du drivrutins-JAR:erna i Tomcat-klassökvägen och startar om Din App Service. Kontrollera att JDBC-drivrutinsfilerna är tillgängliga för Tomcat-klassladdaren genom att placera dem i katalogen /home/site/lib . I Cloud Shell kör du az webapp deploy --type=lib
för varje drivrutins-JAR:
az webapp deploy --resource-group <group-name> --name <app-name> --src-path <jar-name>.jar --type=lib --target-path <jar-name>.jar
Tomcat
De här anvisningarna gäller för alla databasanslutningar. Du måste fylla platshållarna med den valda databasens drivrutinsklassnamn och JAR-fil. Tillhandahålls är en tabell med klassnamn och drivrutinsnedladdningar för vanliga databaser.
Databas | Namn på drivrutinsklass | JDBC-drivrutin |
---|---|---|
PostgreSQL | org.postgresql.Driver |
Ladda ned |
MySQL | com.mysql.jdbc.Driver |
Ladda ned (välj "Plattformsoberoende") |
SQL Server | com.microsoft.sqlserver.jdbc.SQLServerDriver |
Ladda ned |
Om du vill konfigurera Tomcat att använda Java Database Anslut ivity (JDBC) eller Java Persistence API (JPA) anpassar CATALINA_OPTS
du först miljövariabeln som tomcat läser in vid start. Ange dessa värden via en appinställning i Plugin-programmet App Service Maven:
<appSettings>
<property>
<name>CATALINA_OPTS</name>
<value>"$CATALINA_OPTS -Ddbuser=${DBUSER} -Ddbpassword=${DBPASSWORD} -DconnURL=${CONNURL}"</value>
</property>
</appSettings>
Eller ange miljövariablerna på sidan Konfigurationsprogram>Inställningar i Azure-portalen.
Bestäm sedan om datakällan ska vara tillgänglig för ett program eller för alla program som körs på Tomcat-servleten.
Datakällor på programnivå
Skapa en context.xml fil i meta-INF/ -katalogen i projektet. Skapa meta-INF/-katalogen om den inte finns.
I context.xml lägger du till ett
Context
element för att länka datakällan till en JNDI-adress.driverClassName
Ersätt platshållaren med drivrutinens klassnamn från tabellen ovan.<Context> <Resource name="jdbc/dbconnection" type="javax.sql.DataSource" url="${connURL}" driverClassName="<insert your driver class name>" username="${dbuser}" password="${dbpassword}" /> </Context>
Uppdatera programmets web.xml för att använda datakällan i ditt program.
<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>
Delade resurser på servernivå
Om du lägger till en delad datakälla på servernivå måste du redigera Tomcats server.xml. Ladda först upp ett startskript och ange sökvägen till skriptet i Startkommando för konfiguration>. Du kan ladda upp startskriptet med FTP.
Startskriptet gör en xsl-transformering till server.xml-filen och matar ut den resulterande XML-filen till /usr/local/tomcat/conf/server.xml
. Startskriptet ska installera libxslt via apk. XSL-filen och startskriptet kan laddas upp via FTP. Nedan visas ett exempel på ett startskript.
# 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
I följande exempel lägger XSL-filen till en ny anslutningsnod i 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>
Slutför konfigurationen
Placera slutligen drivrutins-JAR:erna i Tomcat-klassökvägen och starta om App Service.
- Kontrollera att JDBC-drivrutinsfilerna är tillgängliga för Tomcat-klassladdaren genom att placera dem i katalogen /home/site/lib . I Cloud Shell kör du
az webapp deploy --type=lib
för varje drivrutins-JAR:
az webapp deploy --resource-group <group-name> --name <app-name> --src-path <jar-name>.jar --type=lib --path <jar-name>.jar
Om du har skapat en datakälla på servernivå startar du om App Service Linux-programmet. Tomcat återställs CATALINA_BASE
till /home/tomcat
och använder den uppdaterade konfigurationen.
JBoss EAP-datakällor
Det finns tre grundläggande steg när du registrerar en datakälla med JBoss EAP: ladda upp JDBC-drivrutinen, lägga till JDBC-drivrutinen som en modul och registrera modulen. App Service är en tillståndslös värdtjänst, så konfigurationskommandona för att lägga till och registrera datakällmodulen måste skriptas och tillämpas när containern startar.
Hämta databasens JDBC-drivrutin.
Skapa en XML-moduldefinitionsfil för JDBC-drivrutinen. I följande exempel visas en moduldefinition för 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>
Placera dina JBoss CLI-kommandon i en fil med namnet
jboss-cli-commands.cli
. JBoss-kommandona måste lägga till modulen och registrera den som en datakälla. I följande exempel visas JBoss CLI-kommandona för 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
Skapa ett startskript som
startup_script.sh
anropar JBoss CLI-kommandona. I följande exempel visas hur du anropar dinjboss-cli-commands.cli
. Senare konfigurerar du App Service för att köra det här skriptet när containern startar.$JBOSS_HOME/bin/jboss-cli.sh --connect --file=/home/site/deployments/tools/jboss-cli-commands.cli
Med valfri FTP-klient laddar du upp JDBC-drivrutinen,
jboss-cli-commands.cli
,startup_script.sh
och moduldefinitionen till/site/deployments/tools/
.Konfigurera platsen så att den körs
startup_script.sh
när containern startar. I Azure-portalen navigerar du till Kommandot Configuration>General Inställningar> Startup. Ange startkommandofältet till/home/site/deployments/tools/startup_script.sh
. Spara dina ändringar.
För att bekräfta att datakällan har lagts till i JBoss-servern, SSH i webbappen och kör $JBOSS_HOME/bin/jboss-cli.sh --connect
. När du är ansluten till JBoss kör /subsystem=datasources:read-resource
du för att skriva ut en lista över datakällorna.
robots933456 i loggar
Följande meddelande kan visas i containerloggarna:
2019-04-08T14:07:56.641002476Z "-" - - [08/Apr/2019:14:07:56 +0000] "GET /robots933456.txt HTTP/1.1" 404 415 "-" "-"
Du kan ignorera det här meddelandet. /robots933456.txt
är en dummysökväg för URL:en som App Service använder till att kontrollera om containern kan hantera begäranden. Ett 404-svar innebär helt enkelt att sökvägen inte finns, men det låter App Service veta att containern är felfri och redo att svara på begäranden.
Välja en Java-körningsversion
Med App Service kan användare välja huvudversionen av JVM, till exempel Java 8 eller Java 11, och korrigeringsversionen, till exempel 1.8.0_232 eller 11.0.5. Du kan också välja att uppdatera korrigeringsversionen automatiskt när nya delversioner blir tillgängliga. I de flesta fall bör produktionsappar använda fästa JVM-versioner för korrigeringar. Detta förhindrar oväntade avbrott under en automatisk uppdateringsversion. Alla Java-webbappar använder 64-bitars JVM:er och kan inte konfigureras.
Om du använder Tomcat kan du välja att fästa korrigeringsversionen av Tomcat. I Windows kan du fästa korrigeringsversionerna av JVM och Tomcat oberoende av varandra. I Linux kan du fästa korrigeringsversionen av Tomcat. korrigeringsversionen av JVM är också fäst men kan inte konfigureras separat.
Om du väljer att fästa delversionen måste du regelbundet uppdatera JVM-delversionen i appen. För att säkerställa att programmet körs på den nyare delversionen skapar du ett mellanlagringsfack och ökar delversionen på mellanlagringsplatsen. När du har bekräftat att programmet körs korrekt på den nya delversionen kan du byta mellanlagrings- och produktionsfack.
JBoss-EAP
Klustring i JBoss EAP
App Service stöder klustring för JBoss EAP-versioner 7.4.1 och senare. För att aktivera klustring måste webbappen vara integrerad med ett virtuellt nätverk. När webbappen är integrerad med ett virtuellt nätverk startas den om och JBoss EAP-installationen startar automatiskt med en klustrad konfiguration. JBoss EAP-instanserna kommunicerar via det undernät som anges i integreringen av det virtuella nätverket med hjälp av portarna som visas i WEBSITES_PRIVATE_PORTS
miljövariabeln vid körning. Du kan inaktivera klustring genom att skapa en appinställning med namnet WEBSITE_DISABLE_CLUSTERING
med valfritt värde.
Kommentar
Om du aktiverar integreringen av det virtuella nätverket med en ARM-mall måste du manuellt ange egenskapen vnetPrivatePorts
till värdet 2
. Om du aktiverar integrering av virtuella nätverk från CLI eller portalen ställs den här egenskapen in automatiskt.
När klustring är aktiverat använder JBoss EAP-instanserna identifieringsprotokollet FILE_PING JGroups för att identifiera nya instanser och spara klusterinformationen som klustermedlemmar, deras identifierare och deras IP-adresser. I App Service finns dessa filer under /home/clusterinfo/
. Den första EAP-instansen som startar hämtar läs-/skrivbehörigheter för klustermedlemskapsfilen. Andra instanser läser filen, hittar den primära noden och koordinerar med den noden som ska ingå i klustret och läggs till i filen.
App Service-typerna Premium V3 och Isolated V2 kan distribueras över Tillgänglighetszoner för att förbättra återhämtning och tillförlitlighet för dina affärskritiska arbetsbelastningar. Den här arkitekturen kallas även zonredundans. JBoss EAP-klustringsfunktionen är kompatibel med zonredundansfunktionen.
Regler för autoskalning
När du konfigurerar regler för automatisk skalning för horisontell skalning är det viktigt att ta bort instanser stegvis (en i taget) för att säkerställa att varje borttagen instans kan överföra sin aktivitet (till exempel hantering av en databastransaktion) till en annan medlem i klustret. Använd följande alternativ när du konfigurerar autoskalningsregler i portalen för att skala ned:
- Åtgärd: "Minska antalet med"
- Nedkylning: "5 minuter" eller större
- Antal instanser: 1
Du behöver inte stegvis lägga till instanser (skala ut), du kan lägga till flera instanser i klustret i taget.
JBoss EAP App Service-planer
JBoss EAP är endast tillgängligt på App Service-plantyperna Premium v3 och Isolerad v2. Kunder som skapade en JBoss EAP-webbplats på en annan nivå under den offentliga förhandsversionen bör skala upp till Premium- eller Isolerad maskinvarunivå för att undvika oväntat beteende.
Tomcat-baslinjekonfiguration i App Services
Java-utvecklare kan anpassa serverinställningarna, felsöka problem och distribuera program till Tomcat med säkerhet om de känner till server.xml fil- och konfigurationsinformation om Tomcat. Möjliga anpassningar är:
- Anpassa Tomcat-konfiguration: Genom att förstå server.xml-filen och Tomcats konfigurationsinformation kan du finjustera serverinställningarna så att de matchar behoven i deras program.
- Felsökning: När ett program distribueras på en Tomcat-server måste utvecklarna känna till serverkonfigurationen för att felsöka eventuella problem som kan uppstå. Detta inkluderar att kontrollera serverloggarna, undersöka konfigurationsfilerna och identifiera eventuella fel som kan uppstå.
- Felsökning av Tomcat-problem: Java-utvecklare stöter oundvikligen på problem med sin Tomcat-server, till exempel prestandaproblem eller konfigurationsfel. Genom att förstå server.xml fil och Tomcats konfigurationsinformation kan utvecklare snabbt diagnostisera och felsöka dessa problem, vilket kan spara tid och arbete.
- Distribuera program till Tomcat: För att distribuera en Java-webbapp till Tomcat måste utvecklare veta hur de konfigurerar server.xml-filen och andra Tomcat-inställningar. Att förstå den här informationen är viktigt för att distribuera program korrekt och se till att de fungerar smidigt på servern.
När du skapar en app med inbyggd Tomcat som värd för din Java-arbetsbelastning (en WAR-fil eller en JAR-fil) finns det vissa inställningar som du kommer ur rutan för Tomcat-konfiguration. Du kan läsa den officiella Apache Tomcat-dokumentationen för detaljerad information, inklusive standardkonfigurationen för Tomcat-webbservern.
Dessutom finns det vissa transformeringar som tillämpas ytterligare ovanpå server.xml för Tomcat-distribution vid start. Det här är transformeringar till inställningarna Anslut eller, Värd och Ventil.
Observera att de senaste versionerna av Tomcat har server.xml (8.5.58 och 9.0.38 och senare). Äldre versioner av Tomcat använder inte transformeringar och kan därför ha ett annat beteende.
Koppling
<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
är inställd på16384
URIEncoding
är inställd påUTF-8
conectionTimeout
är inställt påWEBSITE_TOMCAT_CONNECTION_TIMEOUT
, som standard är240000
maxThreads
är inställt påWEBSITE_CATALINA_MAXTHREADS
, som standard är200
maxConnections
är inställt påWEBSITE_CATALINA_MAXCONNECTIONS
, som standard är10000
Kommentar
Inställningarna connectionTimeout, maxThreads och max Anslut ions kan justeras med appinställningar
Följande är exempel på CLI-kommandon som du kan använda för att ändra värdena för conectionTimeout, maxThreads eller max Anslut 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
- Anslut eller använder containerns adress i stället för 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
är inställt påAZURE_SITE_APP_BASE
, som standard är lokalWebappsLocalPath
xmlBase
är inställt påAZURE_SITE_HOME
, som standard är/site/wwwroot
unpackWARs
är inställt påAZURE_UNPACK_WARS
, som standard ärtrue
workDir
är inställt påJAVA_TMP_DIR
, som standardTMP
errorReportValveClass
använder vår anpassade felrapportventil
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
är inställt påAZURE_LOGGING_DIR
, som standard ärhome\logFiles
maxDays
är tillWEBSITE_HTTPLOGGING_RETENTION_DAYS
, som standard till0
[forever]
I Linux har den samma anpassning, plus:
- Lägger till några fel- och rapporteringssidor i ventilen:
<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>
Nästa steg
Besök Azure for Java Developers Center för att hitta Azure-snabbstarter, självstudier och Java-referensdokumentation.