Konfigurace aplikace Java pro službu Aplikace Azure Service

Poznámka:

Pro aplikace Spring doporučujeme používat Azure Spring Apps. Službu Aplikace Azure však můžete použít jako cíl. Rady najdete v pokynech k cíli úloh v Javě.

Aplikace Azure Service umožňuje vývojářům v Javě rychle sestavovat, nasazovat a škálovat webové aplikace Java SE, Tomcat a JBoss EAP v plně spravované službě. Nasaďte aplikace pomocí modulů plug-in Maven, z příkazového řádku nebo v editorech, jako je IntelliJ, Eclipse nebo Visual Studio Code.

Tato příručka obsahuje klíčové koncepty a pokyny pro vývojáře v Javě, kteří používají App Service. Pokud jste službu Aplikace Azure Service nikdy nepoužívali, měli byste si nejprve přečíst rychlý start pro Javu. Obecné dotazy týkající se používání služby App Service, které nejsou specifické pro vývoj v Javě, najdete v nejčastějších dotazech ke službě App Service.

Zobrazit verzi Javy

Pokud chcete zobrazit aktuální verzi Javy, spusťte v Cloud Shellu následující příkaz:

az webapp config show --name <app-name> --resource-group <resource-group-name> --query "[javaVersion, javaContainer, javaContainerVersion]"

Pokud chcete zobrazit všechny podporované verze Javy, spusťte v Cloud Shellu následující příkaz:

az webapp list-runtimes --os windows | grep java

Pokud chcete zobrazit aktuální verzi Javy, spusťte v Cloud Shellu následující příkaz:

az webapp config show --resource-group <resource-group-name> --name <app-name> --query linuxFxVersion

Pokud chcete zobrazit všechny podporované verze Javy, spusťte v Cloud Shellu následující příkaz:

az webapp list-runtimes --os linux | grep "JAVA\|TOMCAT\|JBOSSEAP"

Další informace o podpoře verzí najdete v tématu Zásady podpory modulu runtime jazyka App Service.

Nasazení aplikace

Build Tools

Maven

S modulem plug-in Maven pro Azure Web Apps můžete snadno připravit projekt Maven Java pro Azure Web App jedním příkazem v kořenovém adresáři projektu:

mvn com.microsoft.azure:azure-webapp-maven-plugin:2.11.0:config

Tento příkaz přidá modul azure-webapp-maven-plugin plug-in a související konfiguraci tím, že vás vyzve k výběru existující webové aplikace Azure nebo vytvoření nové. Pak můžete aplikaci v Javě nasadit do Azure pomocí následujícího příkazu:

mvn package azure-webapp:deploy

Tady je ukázková konfigurace v pom.xml:

<plugin> 
  <groupId>com.microsoft.azure</groupId>  
  <artifactId>azure-webapp-maven-plugin</artifactId>  
  <version>2.11.0</version>  
  <configuration>
    <subscriptionId>111111-11111-11111-1111111</subscriptionId>
    <resourceGroup>spring-boot-xxxxxxxxxx-rg</resourceGroup>
    <appName>spring-boot-xxxxxxxxxx</appName>
    <pricingTier>B2</pricingTier>
    <region>westus</region>
    <runtime>
      <os>Linux</os>      
      <webContainer>Java SE</webContainer>
      <javaVersion>Java 11</javaVersion>
    </runtime>
    <deployment>
      <resources>
        <resource>
          <type>jar</type>
          <directory>${project.basedir}/target</directory>
          <includes>
            <include>*.jar</include>
          </includes>
        </resource>
      </resources>
    </deployment>
  </configuration>
</plugin> 

Gradle

  1. Nastavte modul plug-in Gradle pro Azure Web Apps tak, že do svého modulu plug-in přidáte build.gradle:

    plugins {
      id "com.microsoft.azure.azurewebapp" version "1.7.1"
    }
    
  2. Nakonfigurujte podrobnosti o webové aplikaci. Odpovídající prostředky Azure se vytvoří, pokud neexistují. Tady je ukázková konfigurace, kde najdete podrobnosti v tomto dokumentu.

    azurewebapp {
        subscription = '<your subscription id>'
        resourceGroup = '<your resource group>'
        appName = '<your app name>'
        pricingTier = '<price tier like 'P1v2'>'
        region = '<region like 'westus'>'
        runtime {
          os = 'Linux'
          webContainer = 'Tomcat 9.0' // or 'Java SE' if you want to run an executable jar
          javaVersion = 'Java 8'
        }
        appSettings {
            <key> = <value>
        }
        auth {
            type = 'azure_cli' // support azure_cli, oauth2, device_code and service_principal
        }
    }
    
  3. Nasazení pomocí jednoho příkazu

    gradle azureWebAppDeploy
    

Prostředí IDE

Azure poskytuje bezproblémové vývojové prostředí služby Java App Service v oblíbených prostředích Java IDEs, včetně následujících:

Kudu API

Java SE

Pokud chcete nasadit soubory .jar do Javy SE, použijte /api/publish/ koncový bod webu Kudu. Další informace o tomto rozhraní API najdete v této dokumentaci.

Poznámka:

Aby služba App Service identifikovala a spustila vaši aplikaci, musí být vaše .jar aplikace pojmenovaná app.jar . Modul plug-in Maven to udělá automaticky během nasazování. Pokud nechcete soubor JAR přejmenovat na app.jar, můžete nahrát skript prostředí pomocí příkazu pro spuštění .jar aplikace. Do textového pole Spouštěcí soubor vložte absolutní cestu k tomuto skriptu v části Konfigurace portálu. Spouštěcí skript se nespustí z adresáře, do kterého je umístěný. Proto ve spouštěcím skriptu vždy používejte absolutní cesty k referenčním souborům (například: java -jar /home/myapp/myapp.jar).

Tomcat

Pokud chcete nasadit soubory .war do Tomcatu, použijte /api/wardeploy/ koncový bod k odeslání archivu souboru. Další informace o tomto rozhraní API najdete v této dokumentaci.

JBoss EAP

Pokud chcete nasadit soubory .war do JBoss, použijte /api/wardeploy/ koncový bod k odeslání archivu souboru. Další informace o tomto rozhraní API najdete v této dokumentaci.

K nasazení souborů .ear použijte protokol FTP. Aplikace .ear se nasadí do kořene kontextu definovaného v konfiguraci vaší aplikace. Pokud je například kontextová kořen aplikace <context-root>myapp</context-root>, můžete web procházet na cestě /myapp : http://my-app-name.azurewebsites.net/myapp. Pokud chcete, aby byla vaše webová aplikace obsluhována v kořenové cestě, ujistěte se, že vaše aplikace nastaví kořen kontextu na kořenovou cestu: <context-root>/</context-root>. Další informace naleznete v tématu Nastavení kontextového kořene webové aplikace.

Nenasazujte své .war ani .jar pomocí FTP. Nástroj FTP je navržený tak, aby nahrál spouštěcí skripty, závislosti nebo jiné soubory modulu runtime. Není to optimální volba pro nasazení webových aplikací.

Protokolování a ladění aplikací

Sestavy výkonu, vizualizace provozu a kontroly stavu jsou dostupné pro každou aplikaci prostřednictvím webu Azure Portal. Další informace najdete v tématu Aplikace Azure Přehled diagnostiky služby.

Streamování diagnostických protokolů

Pokud chcete získat přístup k protokolům konzoly vygenerovaným v rámci kódu aplikace ve službě App Service, zapněte protokolování diagnostiky spuštěním následujícího příkazu v Cloud Shellu:

az webapp log config --resource-group <resource-group-name> --name <app-name> --docker-container-logging filesystem --level Verbose

Možné hodnoty pro --level jsou: Error, Warning, Info a Verbose. Každá další úroveň zahrnuje předchozí úroveň. Například Error zahrnuje jenom chybové zprávy a Verbose zahrnuje všechny zprávy.

Jakmile je aktivované protokolování diagnostiky, spusťte následující příkaz pro zobrazení streamu protokolů:

az webapp log tail --resource-group <resource-group-name> --name <app-name>

Pokud nevidíte protokoly konzoly okamžitě, podívejte se znovu za 30 sekund.

Poznámka:

Soubory protokolu můžete také zkontrolovat v prohlížeči na https://<app-name>.scm.azurewebsites.net/api/logs/docker.

Streamování protokolů můžete kdykoli zastavit zadáním Ctrl+C.

Přístup k protokolům konzoly vygenerovaným z kontejneru.

Nejprve zapněte protokolování kontejneru spuštěním následujícího příkazu:

az webapp log config --name <app-name> --resource-group <resource-group-name> --docker-container-logging filesystem

Nahraďte <app-name> názvy vhodné pro vaši webovou aplikaci a <resource-group-name> nahraďte je názvy.

Jakmile je protokolování kontejneru zapnuté, spuštěním následujícího příkazu zobrazte stream protokolu:

az webapp log tail --name <app-name> --resource-group <resource-group-name>

Pokud nevidíte protokoly konzoly okamžitě, podívejte se znovu za 30 sekund.

Pokud chcete streamování protokolů kdykoli zastavit, zadejte Ctrl+C.

Soubory protokolu můžete také zkontrolovat v prohlížeči na adrese https://<app-name>.scm.azurewebsites.net/api/logs/docker.

Další informace najdete v tématu Protokoly streamu v Cloud Shellu.

Přístup ke konzole SSH

Pokud chcete otevřít přímou relaci SSH s kontejnerem, vaše aplikace by měla být spuštěná.

Vložte následující adresu URL do vašeho prohlížeče a <app-name> nahraďte názvem vaší aplikace:

https://<app-name>.scm.azurewebsites.net/webssh/host

Pokud ještě nejste ověření, budete se muset ověřit s vaším předplatným Azure, abyste se mohli připojit. Po ověření se vám zobrazí prostředí prohlížeče, ve kterém můžete spouště příkazy uvnitř vašeho kontejneru.

Připojení SSH

Poznámka:

Všechny změny provedené mimo adresář /home se uloží ve vlastním kontejneru a po restartování aplikace se neuchovají.

Pokud chcete otevřít vzdálenou relaci SSH z místního počítače, projděte si téma věnované otevření relace SSH ze vzdáleného prostředí.

Nástroje pro řešení potíží

Integrované image Java jsou založené na operačním systému Alpine Linux . apk Pomocí správce balíčků nainstalujte všechny nástroje nebo příkazy pro řešení potíží.

Java Profiler

Všechny moduly runtime Javy ve službě Aplikace Azure jsou součástí nástroje JDK Flight Recorder pro profilaci úloh Javy. Můžete ho použít k zaznamenání událostí prostředí JVM, systému a aplikací a řešení problémů ve vašich aplikacích.

Další informace o nástroji Java Profiler najdete v dokumentaci k Aplikace Azure Přehledy.

Flight Recorder

Všechny moduly runtime Java ve službě App Service jsou součástí nástroje Java Flight Recorder. Můžete ho použít k zaznamenání událostí JVM, systému a aplikací a řešení problémů v aplikacích v Javě.

Timed Recording

K zaznamenávání časového limitu potřebujete PID (ID procesu) aplikace v Javě. Pokud chcete najít PID, otevřete prohlížeč na webu SCM vaší webové aplikace na adrese https://<your-site-name>.scm.azurewebsites.net/ProcessExplorer/. Tato stránka zobrazuje spuštěné procesy ve webové aplikaci. Vyhledejte v tabulce proces s názvem "java" a zkopírujte odpovídající KÓD PID (ID procesu).

Dále otevřete konzolu ladění na horním panelu nástrojů webu SCM a spusťte následující příkaz. Nahraďte <pid> ID procesu, které jste zkopírovali dříve. Tento příkaz spustí 30sekundový záznam profileru vaší aplikace Java a vygeneruje soubor pojmenovaný timed_recording_example.jfr v C:\home adresáři.

jcmd <pid> JFR.start name=TimedRecording settings=profile duration=30s filename="C:\home\timed_recording_example.JFR"

Připojte se ke službě App Service pomocí SSH a spusťte jcmd příkaz, abyste zobrazili seznam všech spuštěných procesů Javy. Kromě samotného jcmd byste měli vidět, že vaše aplikace v Javě běží s číslem ID procesu (pid).

078990bbcd11:/home# jcmd
Picked up JAVA_TOOL_OPTIONS: -Djava.net.preferIPv4Stack=true
147 sun.tools.jcmd.JCmd
116 /home/site/wwwroot/app.jar

Spuštěním následujícího příkazu spusťte 30sekundový záznam prostředí JVM. Profiluje JVM a vytvoří soubor JFR s názvem jfr_example.jfr v domovském adresáři. (Nahraďte 116 pid vaší aplikace v Javě.)

jcmd 116 JFR.start name=MyRecording settings=profile duration=30s filename="/home/jfr_example.jfr"

Během 30sekundového intervalu můžete ověřit, že záznam probíhá spuštěním jcmd 116 JFR.check. Příkaz zobrazí všechny nahrávky pro daný proces Javy.

Průběžný záznam

Pomocí nástroje Java Flight Recorder můžete průběžně profilovat aplikaci v Javě s minimálním dopadem na výkon modulu runtime. Spuštěním následujícího příkazu Azure CLI vytvořte nastavení aplikace s názvem JAVA_OPTS s potřebnou konfigurací. Obsah nastavení aplikace JAVA_OPTS se předá java příkazu při spuštění aplikace.

az webapp config appsettings set -g <your_resource_group> -n <your_app_name> --settings JAVA_OPTS=-XX:StartFlightRecording=disk=true,name=continuous_recording,dumponexit=true,maxsize=1024m,maxage=1d

Jakmile se záznam spustí, můžete pomocí příkazu kdykoli vyhodit aktuální data záznamu JFR.dump .

jcmd <pid> JFR.dump name=continuous_recording filename="/home/recording1.jfr"

Analýza .jfr souborů

Pomocí FTPS stáhněte soubor JFR do místního počítače. Pokud chcete analyzovat soubor JFR, stáhněte a nainstalujte Java Mission Control. Pokyny k nástroji Java Mission Control najdete v dokumentaci JMC a pokyny k instalaci.

Protokolování aplikace

Povolte protokolování aplikace prostřednictvím webu Azure Portal nebo Azure CLI a nakonfigurujte službu App Service tak, aby zapisuje standardní výstup konzoly a standardní datové proudy chyb konzoly do místního systému souborů nebo do služby Azure Blob Storage. Protokolování do místní instance systému souborů služby App Service je po konfiguraci zakázané 12 hodin. Pokud potřebujete delší dobu uchovávání, nakonfigurujte aplikaci tak, aby zapisuje výstup do kontejneru úložiště objektů blob. Protokoly aplikace Java a Tomcat najdete v adresáři /home/LogFiles/Application/ .

Povolte protokolování aplikace prostřednictvím webu Azure Portal nebo Azure CLI a nakonfigurujte službu App Service tak, aby zapisuje standardní výstup konzoly a standardní datové proudy chyb konzoly do místního systému souborů nebo do služby Azure Blob Storage. Pokud potřebujete delší dobu uchovávání, nakonfigurujte aplikaci tak, aby zapisuje výstup do kontejneru úložiště objektů blob. Protokoly aplikace Java a Tomcat najdete v adresáři /home/LogFiles/Application/ .

Protokolování služby Azure Blob Storage pro aplikace založené na Linuxu je možné nakonfigurovat pouze pomocí služby Azure Monitor.

Pokud vaše aplikace pro trasování používá logback nebo Log4j, můžete tyto trasování předat ke kontrole do Aplikace Azure Přehledy pomocí pokynů pro konfiguraci rozhraní protokolování v části Prozkoumání protokolů trasování Javy v aplikačním Přehledy.

Poznámka:

Kvůli známé chybě zabezpečení CVE-2021-44228 nezapomeňte použít Log4j verze 2.16 nebo novější.

Přizpůsobení a ladění

Aplikace Azure Služba podporuje oddělování a přizpůsobení prostřednictvím webu Azure Portal a rozhraní příkazového řádku. V následujících článcích najdete informace o konfiguraci webové aplikace, která není specifická pro Javu:

Místní kopírování obsahu aplikace

Nastavte nastavení JAVA_COPY_ALL aplikace tak, aby true se obsah aplikace zkopíroval do místního pracovního procesu ze sdíleného systému souborů. Toto nastavení pomáhá řešit problémy se zamykáním souborů.

Nastavení možností modulu runtime Java

Pokud chcete nastavit přidělenou paměť nebo jiné možnosti modulu runtime JVM, vytvořte nastavení aplikace s názvem JAVA_OPTS s možnostmi. App Service toto nastavení předá jako proměnnou prostředí modulu runtime Java při spuštění.

Na webu Azure Portal v části Application Nastavení pro webovou aplikaci vytvořte nové nastavení aplikace s názvem JAVA_OPTS Java SE nebo CATALINA_OPTS Tomcat, které zahrnuje další nastavení, například -Xms512m -Xmx1204m.

Pokud chcete nakonfigurovat nastavení aplikace z modulu plug-in Maven, přidejte do části Modul plug-in Azure značky nastavení/hodnoty. Následující příklad nastaví konkrétní minimální a maximální velikost haldy Java:

<appSettings>
    <property>
        <name>JAVA_OPTS</name>
        <value>-Xms1024m -Xmx1024m</value>
    </property>
</appSettings>

Poznámka:

Při používání tomcat ve Službě Windows App Service nemusíte vytvářet soubor web.config.

Vývojáři, kteří v plánu služby App Service používají jednu aplikaci s jedním slotem nasazení, můžou použít následující možnosti:

  • Instance B1 a S1: -Xms1024m -Xmx1024m
  • Instance B2 a S2: -Xms3072m -Xmx3072m
  • Instance B3 a S3: -Xms6144m -Xmx6144m
  • Instance P1v2: -Xms3072m -Xmx3072m
  • Instance P2v2: -Xms6144m -Xmx6144m
  • Instance P3v2: -Xms12800m -Xmx12800m
  • Instance P1v3: -Xms6656m -Xmx6656m
  • Instance P2v3: -Xms14848m -Xmx14848m
  • Instance P3v3: -Xms30720m -Xmx30720m
  • Instance I1: -Xms3072m -Xmx3072m
  • Instance I2: -Xms6144m -Xmx6144m
  • Instance I3: -Xms12800m -Xmx12800m
  • Instance I1v2: -Xms6656m -Xmx6656m
  • Instance I2v2: -Xms14848m -Xmx14848m
  • Instance I3v2: -Xms30720m -Xmx30720m

Při ladění nastavení haldy aplikace zkontrolujte podrobnosti plánu služby App Service a vezměte v úvahu několik aplikací a slotů nasazení, abyste našli optimální přidělení paměti.

Zapnutí webových soketů

Zapněte podporu webových soketů na webu Azure Portal v nastavení aplikace pro aplikaci. Aby se nastavení projevilo, musíte aplikaci restartovat.

Zapněte podporu webového soketu pomocí Azure CLI pomocí následujícího příkazu:

az webapp config set --name <app-name> --resource-group <resource-group-name> --web-sockets-enabled true

Pak restartujte aplikaci:

az webapp stop --name <app-name> --resource-group <resource-group-name>
az webapp start --name <app-name> --resource-group <resource-group-name>

Nastavení výchozího kódování znaků

Na webu Azure Portal v části Application Nastavení pro webovou aplikaci vytvořte nové nastavení aplikace s názvem JAVA_OPTS s hodnotou -Dfile.encoding=UTF-8.

Případně můžete nakonfigurovat nastavení aplikace pomocí modulu plug-in App Service Maven. Do konfigurace modulu plug-in přidejte značky názvu a hodnoty nastavení:

<appSettings>
    <property>
        <name>JAVA_OPTS</name>
        <value>-Dfile.encoding=UTF-8</value>
    </property>
</appSettings>

Předběžné kompilace souborů JSP

Pokud chcete zlepšit výkon aplikací Tomcat, můžete soubory JSP před nasazením do služby App Service zkompilovat. Můžete použít modul plug-in Maven, který poskytuje Apache Sling, nebo použít tento soubor sestavení Ant.

Zabezpečené aplikace

Aplikace v Javě spuštěné ve službě App Service mají stejnou sadu osvědčených postupů zabezpečení jako jiné aplikace.

Ověřování uživatelů (Easy Auth)

Na webu Azure Portal nastavte ověřování aplikací s možností Ověřování a autorizace . Odtud můžete povolit ověřování pomocí MICROSOFT Entra ID nebo sociálních přihlášení, jako je Facebook, Google nebo GitHub. Konfigurace webu Azure Portal funguje jenom při konfiguraci jednoho zprostředkovatele ověřování. Další informace najdete v tématu Konfigurace aplikace App Service tak, aby používala přihlášení Microsoft Entra a související články pro jiné zprostředkovatele identity. Pokud potřebujete povolit více poskytovatelů přihlašování, postupujte podle pokynů v části Přizpůsobení přihlášení a odhlášení.

Java SE

Vývojáři Spring Boot můžou pomocí úvodní sady Microsoft Entra Spring Boot zabezpečit aplikace pomocí známých poznámek a rozhraní API Spring Security. Nezapomeňte v souboru application.properties zvětšit maximální velikost záhlaví. Doporučujeme hodnotu 16384.

Tomcat

Aplikace Tomcat má přístup k deklarací identity uživatele přímo ze servletu přetypováním objektu Principal na objekt Map. Objekt Map mapuje každý typ deklarace identity na kolekci deklarací identity pro tento typ. V následujícím příkladu request kódu je instance HttpServletRequest.

Map<String, Collection<String>> map = (Map<String, Collection<String>>) request.getUserPrincipal();

Teď můžete objekt zkontrolovat Map pro jakoukoli konkrétní deklaraci identity. Například následující fragment kódu iteruje všechny typy deklarací identity a vytiskne obsah každé kolekce.

for (Object key : map.keySet()) {
        Object value = map.get(key);
        if (value != null && value instanceof Collection {
            Collection claims = (Collection) value;
            for (Object claim : claims) {
                System.out.println(claims);
            }
        }
    }

Pokud se chcete odhlásit uživatelům, použijte /.auth/ext/logout cestu. Pokud chcete provést další akce, projděte si dokumentaci k přizpůsobení přihlášení a odhlášení. K dispozici je také oficiální dokumentace k rozhraní Tomcat HttpServletRequest a jeho metod. Následující servletové metody jsou také hydratovány na základě vaší konfigurace služby App Service:

public boolean isSecure()
public String getRemoteAddr()
public String getRemoteHost()
public String getScheme()
public int getServerPort()

Chcete-li tuto funkci zakázat, vytvořte nastavení aplikace s názvem WEBSITE_AUTH_SKIP_PRINCIPAL hodnota 1. Pokud chcete zakázat všechny filtry servletu přidané službou App Service, vytvořte nastavení s názvem WEBSITE_SKIP_FILTERS hodnota 1.

Konfigurace protokolu TLS/SSL

Pokud chcete nahrát existující certifikát TLS/SSL a svázat ho s názvem domény vaší aplikace, postupujte podle pokynů v části Zabezpečení vlastního názvu DNS pomocí vazby TLS/SSL ve službě Aplikace Azure Service. Aplikaci můžete také nakonfigurovat tak, aby vynucuje protokol TLS/SSL.

Použití odkazů služby KeyVault

Azure KeyVault poskytuje centralizovanou správu tajných kódů pomocí zásad přístupu a historie auditu. Tajné kódy (například hesla nebo připojovací řetězec) můžete ukládat ve službě KeyVault a přistupovat k těmto tajným kódům ve vaší aplikaci prostřednictvím proměnných prostředí.

Nejprve postupujte podle pokynů pro udělení přístupu aplikace k trezoru klíčů a vytvořte odkaz na keyVault na tajný klíč v nastavení aplikace. Odkaz se dá ověřit tak, že při vzdáleném přístupu k terminálu služby App Service vytisknete proměnnou prostředí.

Pokud chcete tyto tajné kódy vložit do konfiguračního souboru Spring nebo Tomcat, použijte syntaxi injektáže proměnných prostředí (${MY_ENV_VAR}). Informace o konfiguračních souborech Spring najdete v této dokumentaci k externím konfiguracím.

Použití úložiště klíčů Java

Ve výchozím nastavení se všechny veřejné nebo privátní certifikáty nahrané do App Service Linux načtou do příslušných úložišť klíčů Java při spuštění kontejneru. Po nahrání certifikátu budete muset restartovat službu App Service, aby se načetla do úložiště klíčů Java. Veřejné certifikáty jsou načteny do úložiště klíčů v $JRE_HOME/lib/security/cacertsa soukromé certifikáty jsou uloženy v $JRE_HOME/lib/security/client.jks.

Pro šifrování připojení JDBC s certifikáty v úložišti klíčů Java může být potřeba další konfigurace. Projděte si dokumentaci ke zvolenému ovladači JDBC.

Inicializace úložiště klíčů Java

Chcete-li inicializovat import java.security.KeyStore objekt, načtěte soubor úložiště klíčů s heslem. Výchozí heslo pro obě úložiště klíčů je changeit.

KeyStore keyStore = KeyStore.getInstance("jks");
keyStore.load(
    new FileInputStream(System.getenv("JRE_HOME")+"/lib/security/cacerts"),
    "changeit".toCharArray());

KeyStore keyStore = KeyStore.getInstance("pkcs12");
keyStore.load(
    new FileInputStream(System.getenv("JRE_HOME")+"/lib/security/client.jks"),
    "changeit".toCharArray());

Ruční načtení úložiště klíčů

Certifikáty můžete do úložiště klíčů načíst ručně. Vytvořte nastavení aplikace s SKIP_JAVA_KEYSTORE_LOADhodnotou 1 zákazu automatického načítání certifikátů do úložiště klíčů službou App Service. Všechny veřejné certifikáty nahrané do služby App Service prostřednictvím webu Azure Portal se ukládají v části /var/ssl/certs/. Soukromé certifikáty jsou uloženy v rámci /var/ssl/private/.

Nástroj Java Key Tool můžete interagovat nebo ladit otevřením připojení SSH ke službě App Service a spuštěním příkazu keytool. Seznam příkazů najdete v dokumentaci k nástroji Key Tool. Další informace o rozhraní API úložiště klíčů najdete v oficiální dokumentaci.

Konfigurace platforem APM

V této části se dozvíte, jak připojit aplikace Java nasazené na Aplikace Azure Service s platformami APM (Application Přehledy, NewRelic a AppDynamics Application Performance Monitoring).

Konfigurace Application Insights

Azure Monitor Application Přehledy je cloudová nativní služba pro monitorování aplikací, která zákazníkům umožňuje sledovat selhání, kritické body a vzorce použití, aby zlepšili výkon aplikace a zkrátili střední dobu řešení (MTTR). Pomocí několika kliknutí nebo příkazů rozhraní příkazového řádku můžete povolit monitorování vašich Node.js nebo aplikací v Javě, automatické shromažďování protokolů, metrik a distribuovaných trasování, což eliminuje potřebu zahrnutí sady SDK do vaší aplikace. Další informace o dostupných nastaveních aplikace pro konfiguraci agenta najdete v dokumentaci k Přehledy aplikací.

portál Azure

Pokud chcete povolit Přehledy aplikace z webu Azure Portal, přejděte na Přehledy aplikace v nabídce na levé straně a vyberte Zapnout Přehledy aplikace. Ve výchozím nastavení se používá nový prostředek Application Insights se stejným názvem jako vaše webová aplikace. Můžete použít existující prostředek Application Insights nebo změnit název. Vyberte Použít v dolní části.

Azure CLI

Pokud chcete povolit prostřednictvím Azure CLI, musíte vytvořit prostředek Přehledy aplikace a nastavit na webu Azure Portal několik nastavení aplikace, abyste mohli připojit aplikační Přehledy k webové aplikaci.

  1. Povolení rozšíření Přehledy aplikací

    az extension add -n application-insights
    
  2. Pomocí následujícího příkazu rozhraní příkazového řádku vytvořte prostředek Přehledy aplikace. Zástupné symboly nahraďte požadovaným názvem a skupinou prostředků.

    az monitor app-insights component create --app <resource-name> -g <resource-group> --location westus2  --kind web --application-type web
    

    Poznamenejte si hodnoty a connectionStringinstrumentationKeytyto hodnoty budete potřebovat v dalším kroku.

    Pokud chcete načíst seznam dalších umístění, spusťte az account list-locationspříkaz .

  1. Nastavte instrumentační klíč, připojovací řetězec a verzi agenta monitorování jako nastavení aplikace ve webové aplikaci. Nahraďte <instrumentationKey> hodnoty z předchozího kroku a <connectionString> nahraďte je.

    az webapp config appsettings set -n <webapp-name> -g <resource-group> --settings "APPINSIGHTS_INSTRUMENTATIONKEY=<instrumentationKey>" "APPLICATIONINSIGHTS_CONNECTION_STRING=<connectionString>" "ApplicationInsightsAgent_EXTENSION_VERSION=~3" "XDT_MicrosoftApplicationInsights_Mode=default" "XDT_MicrosoftApplicationInsights_Java=1"
    
  1. Nastavte instrumentační klíč, připojovací řetězec a verzi agenta monitorování jako nastavení aplikace ve webové aplikaci. Nahraďte <instrumentationKey> hodnoty z předchozího kroku a <connectionString> nahraďte je.

    az webapp config appsettings set -n <webapp-name> -g <resource-group> --settings "APPINSIGHTS_INSTRUMENTATIONKEY=<instrumentationKey>" "APPLICATIONINSIGHTS_CONNECTION_STRING=<connectionString>" "ApplicationInsightsAgent_EXTENSION_VERSION=~3" "XDT_MicrosoftApplicationInsights_Mode=default"
    

Konfigurace New Relic

  1. Vytvoření účtu NewRelic na NewRelic.com

  2. Stáhněte agenta Java z NewRelic. Má název souboru podobný newrelic-java-x.x.x.zip.

  3. Zkopírujte licenční klíč, budete ho potřebovat k pozdější konfiguraci agenta.

  4. Připojte se ke své instanci služby App Service SSH a vytvořte nový adresář /home/site/wwwroot/apm.

  5. Nahrajte rozbalené soubory agenta NewRelic Java do adresáře v adresáři v části /home/site/wwwroot/apm. Soubory vašeho agenta by měly být na adrese /home/site/wwwroot/apm/newrelic.

  6. Upravte soubor YAML na adrese /home/site/wwwroot/apm/newrelic/newrelic.yml a nahraďte zástupnou hodnotu licence vlastním licenčním klíčem.

  7. Na webu Azure Portal přejděte do aplikace ve službě App Service a vytvořte nové nastavení aplikace.

    • Pro aplikace Java SE vytvořte proměnnou prostředí s názvem JAVA_OPTS s hodnotou -javaagent:/home/site/wwwroot/apm/newrelic/newrelic.jar.
    • Pro Tomcat vytvořte proměnnou prostředí s názvem CATALINA_OPTS s hodnotou -javaagent:/home/site/wwwroot/apm/newrelic/newrelic.jar.
  1. Vytvoření účtu NewRelic na NewRelic.com

  2. Stáhněte agenta Java z NewRelic. Má název souboru podobný newrelic-java-x.x.x.zip.

  3. Zkopírujte svůj licenční klíč, budete ho potřebovat k pozdější konfiguraci agenta.

  4. Připojte se ke své instanci služby App Service SSH a vytvořte nový adresář /home/site/wwwroot/apm.

  5. Nahrajte rozbalené soubory agenta NewRelic Java do adresáře v adresáři v části /home/site/wwwroot/apm. Soubory vašeho agenta by měly být na adrese /home/site/wwwroot/apm/newrelic.

  6. Upravte soubor YAML na adrese /home/site/wwwroot/apm/newrelic/newrelic.yml a nahraďte zástupnou hodnotu licence vlastním licenčním klíčem.

  7. Na webu Azure Portal přejděte do aplikace ve službě App Service a vytvořte nové nastavení aplikace.

    • Pro aplikace Java SE vytvořte proměnnou prostředí s názvem JAVA_OPTS s hodnotou -javaagent:/home/site/wwwroot/apm/newrelic/newrelic.jar.
    • Pro Tomcat vytvořte proměnnou prostředí s názvem CATALINA_OPTS s hodnotou -javaagent:/home/site/wwwroot/apm/newrelic/newrelic.jar.

Pokud již máte proměnnou prostředí pro JAVA_OPTS nebo CATALINA_OPTS, připojte -javaagent:/... možnost na konec aktuální hodnoty.

Konfigurace AppDynamics

  1. Vytvoření účtu AppDynamics na AppDynamics.com

  2. Stáhněte agenta Java z webu AppDynamics. Název souboru je podobný AppServerAgent-x.x.x.xxxxx.zip

  3. Pomocí konzoly Kudu vytvořte nový adresář /home/site/wwwroot/apm.

  4. Nahrajte soubory agenta Java do adresáře v umístění /home/site/wwwroot/apm. Soubory pro vašeho agenta by měly být v /home/site/wwwroot/apm/appdynamics.

  5. Na webu Azure Portal přejděte do aplikace ve službě App Service a vytvořte nové nastavení aplikace.

    • Pro aplikace Java SE vytvořte proměnnou prostředí s -javaagent:/home/site/wwwroot/apm/appdynamics/javaagent.jar -Dappdynamics.agent.applicationName=<app-name> názvemJAVA_OPTS, kde <app-name> je název vaší služby App Service.
    • Pro aplikace Tomcat vytvořte proměnnou prostředí s názvem CATALINA_OPTS , -javaagent:/home/site/wwwroot/apm/appdynamics/javaagent.jar -Dappdynamics.agent.applicationName=<app-name> kde <app-name> je název vaší služby App Service.
  1. Vytvoření účtu AppDynamics na AppDynamics.com

  2. Stáhněte agenta Java z webu AppDynamics. Název souboru je podobný AppServerAgent-x.x.x.xxxxx.zip

  3. Připojte se ke své instanci služby App Service SSH a vytvořte nový adresář /home/site/wwwroot/apm.

  4. Nahrajte soubory agenta Java do adresáře v umístění /home/site/wwwroot/apm. Soubory pro vašeho agenta by měly být v /home/site/wwwroot/apm/appdynamics.

  5. Na webu Azure Portal přejděte do aplikace ve službě App Service a vytvořte nové nastavení aplikace.

    • Pro aplikace Java SE vytvořte proměnnou prostředí s -javaagent:/home/site/wwwroot/apm/appdynamics/javaagent.jar -Dappdynamics.agent.applicationName=<app-name> názvemJAVA_OPTS, kde <app-name> je název vaší služby App Service.
    • Pro aplikace Tomcat vytvořte proměnnou prostředí s názvem CATALINA_OPTS , -javaagent:/home/site/wwwroot/apm/appdynamics/javaagent.jar -Dappdynamics.agent.applicationName=<app-name> kde <app-name> je název vaší služby App Service.

Poznámka:

Pokud již máte proměnnou prostředí pro JAVA_OPTS nebo CATALINA_OPTS, připojte -javaagent:/... možnost na konec aktuální hodnoty.

Konfigurace zdrojů dat

Java SE

Pokud se chcete připojit ke zdrojům dat v aplikacích Spring Boot, doporučujeme vytvořit připojovací řetězec a vložit je do souboru application.properties.

  1. V části Konfigurace na stránce služby App Service nastavte název řetězce, vložte připojovací řetězec JDBC do pole hodnoty a nastavte typ na Vlastní. Volitelně můžete tuto připojovací řetězec nastavit jako nastavení slotu.

    Tato připojovací řetězec je pro naši aplikaci přístupná jako proměnná prostředí s názvem CUSTOMCONNSTR_<your-string-name>. Například CUSTOMCONNSTR_exampledb.

  2. V souboru application.properties na tento připojovací řetězec odkazujte s názvem proměnné prostředí. V našem příkladu bychom použili následující.

    app.datasource.url=${CUSTOMCONNSTR_exampledb}
    

Další informace najdete v dokumentaci Spring Bootu k přístupu k datům a externalizovaným konfiguracím.

Tomcat

Tyto pokyny platí pro všechna připojení k databázi. Zástupné symboly musíte vyplnit názvem třídy ovladače zvolené databáze a souborem JAR. Poskytuje se tabulka s názvy tříd a stahováním ovladačů pro běžné databáze.

Databáze Název třídy ovladače Ovladač JDBC
PostgreSQL org.postgresql.Driver Stáhnout
MySQL com.mysql.jdbc.Driver Stáhnout (vybrat nezávislou platformu)
SQL Server com.microsoft.sqlserver.jdbc.SQLServerDriver Stáhnout

Pokud chcete nakonfigurovat Tomcat tak, aby používala Java Database Připojení ivity (JDBC) nebo ROZHRANÍ JPA (Java Persistence API), nejprve přizpůsobte CATALINA_OPTS proměnnou prostředí, která je načtena Tomcatem při spuštění. Nastavte tyto hodnoty prostřednictvím nastavení aplikace v modulu plug-in App Service Maven:

<appSettings>
    <property>
        <name>CATALINA_OPTS</name>
        <value>"$CATALINA_OPTS -Ddbuser=${DBUSER} -Ddbpassword=${DBPASSWORD} -DconnURL=${CONNURL}"</value>
    </property>
</appSettings>

Nebo nastavte proměnné prostředí na stránce konfigurační>aplikace Nastavení na webu Azure Portal.

Dále určete, jestli má být zdroj dat dostupný pro jednu aplikaci nebo pro všechny aplikace spuštěné na servletu Tomcat.

Zdroje dat na úrovni aplikace

  1. V adresáři META-INF/ projektu vytvořte soubor context.xml. Pokud neexistuje, vytvořte adresář META-INF/.

  2. V context.xml přidejte Context prvek pro propojení zdroje dat s adresou JNDI. driverClassName Nahraďte zástupný symbol názvem třídy ovladače z výše uvedené tabulky.

    <Context>
        <Resource
            name="jdbc/dbconnection"
            type="javax.sql.DataSource"
            url="${connURL}"
            driverClassName="<insert your driver class name>"
            username="${dbuser}"
            password="${dbpassword}"
        />
    </Context>
    
  3. Aktualizujte web.xml aplikace tak, aby používala zdroj dat ve vaší aplikaci.

    <resource-env-ref>
        <resource-env-ref-name>jdbc/dbconnection</resource-env-ref-name>
        <resource-env-ref-type>javax.sql.DataSource</resource-env-ref-type>
    </resource-env-ref>
    

Sdílené prostředky na úrovni serveru

Instalace Tomcat ve službě App Service ve Windows existují ve sdíleném prostoru v plánu služby App Service. Instalaci Tomcat nelze přímo upravit pro konfiguraci na úrovni serveru. Chcete-li provést změny konfigurace na úrovni serveru v instalaci Tomcat, musíte zkopírovat Tomcat do místní složky, ve které můžete upravit konfiguraci tomcat.

Automatizace vytváření vlastních zařízení Tomcat na spuštění aplikace

Spouštěcí skript můžete použít k provádění akcí před spuštěním webové aplikace. Spouštěcí skript pro přizpůsobení Tomcat musí provést následující kroky:

  1. Zkontrolujte, jestli se tomcat už zkopíroval a nakonfiguroval místně. Pokud ano, spouštěcí skript může skončit tady.
  2. Zkopírujte místně tomcat.
  3. Proveďte požadované změny konfigurace.
  4. Indikuje, že konfigurace byla úspěšně dokončena.

V případě aplikací pro Windows vytvořte soubor s názvem startup.cmd nebo startup.ps1 v wwwroot adresáři. Tento soubor se spustí automaticky před spuštěním serveru Tomcat.

Tady je skript PowerShellu, který provede následující kroky:

    # Check for marker file indicating that config has already been done
    if(Test-Path "$Env:LOCAL_EXPANDED\tomcat\config_done_marker"){
        return 0
    }

    # Delete previous Tomcat directory if it exists
    # In case previous config isn't completed or a new config should be forcefully installed
    if(Test-Path "$Env:LOCAL_EXPANDED\tomcat"){
        Remove-Item "$Env:LOCAL_EXPANDED\tomcat" --recurse
    }

    # Copy Tomcat to local
    # Using the environment variable $AZURE_TOMCAT90_HOME uses the 'default' version of Tomcat
    Copy-Item -Path "$Env:AZURE_TOMCAT90_HOME\*" -Destination "$Env:LOCAL_EXPANDED\tomcat" -Recurse

    # Perform the required customization of Tomcat
    {... customization ...}

    # Mark that the operation was a success
    New-Item -Path "$Env:LOCAL_EXPANDED\tomcat\config_done_marker" -ItemType File
Transformace

Běžným případem použití pro přizpůsobení verze Tomcat je úprava konfiguračních server.xmlsouborů , context.xmlnebo web.xml Tomcat. Služba App Service už tyto soubory upravuje tak, aby poskytovaly funkce platformy. Pokud chcete tyto funkce dál používat, je důležité při provádění změn zachovat obsah těchto souborů. K tomu doporučujeme použít transformaci XSL (XSLT). Transformace XSL slouží k provádění změn souborů XML při zachování původního obsahu souboru.

Příklad souboru XSLT

Tato ukázková transformace přidá nový uzel konektoru do server.xml. Všimněte si transformace identity, která zachovává původní obsah souboru.

    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" indent="yes"/>

    <!-- Identity transform: this ensures that the original contents of the file are included in the new file -->
    <!-- Ensure that your transform files include this block -->
    <xsl:template match="@* | node()" name="Copy">
      <xsl:copy>
        <xsl:apply-templates select="@* | node()"/>
      </xsl:copy>
    </xsl:template>

    <xsl:template match="@* | node()" mode="insertConnector">
      <xsl:call-template name="Copy" />
    </xsl:template>

    <xsl:template match="comment()[not(../Connector[@scheme = 'https']) and
                                   contains(., '&lt;Connector') and
                                   (contains(., 'scheme=&quot;https&quot;') or
                                    contains(., &quot;scheme='https'&quot;))]">
      <xsl:value-of select="." disable-output-escaping="yes" />
    </xsl:template>

    <xsl:template match="Service[not(Connector[@scheme = 'https'] or
                                     comment()[contains(., '&lt;Connector') and
                                               (contains(., 'scheme=&quot;https&quot;') or
                                                contains(., &quot;scheme='https'&quot;))]
                                    )]
                        ">
      <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>&#xa;</xsl:text>
      <!-- This is the new connector -->
      <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true" 
                 maxThreads="150" scheme="https" secure="true" 
                 keystoreFile="${{user.home}}/.keystore" keystorePass="changeit"
                 clientAuth="false" sslProtocol="TLS" />
    </xsl:template>

    </xsl:stylesheet>
Funkce transformace XSL

PowerShell obsahuje integrované nástroje pro transformaci souborů XML pomocí transformací XSL. Následující skript je ukázková funkce, kterou můžete použít startup.ps1 k provedení transformace:

    function TransformXML{
        param ($xml, $xsl, $output)

        if (-not $xml -or -not $xsl -or -not $output)
        {
            return 0
        }

        Try
        {
            $xslt_settings = New-Object System.Xml.Xsl.XsltSettings;
            $XmlUrlResolver = New-Object System.Xml.XmlUrlResolver;
            $xslt_settings.EnableScript = 1;

            $xslt = New-Object System.Xml.Xsl.XslCompiledTransform;
            $xslt.Load($xsl,$xslt_settings,$XmlUrlResolver);
            $xslt.Transform($xml, $output);

        }

        Catch
        {
            $ErrorMessage = $_.Exception.Message
            $FailedItem = $_.Exception.ItemName
            Write-Host  'Error'$ErrorMessage':'$FailedItem':' $_.Exception;
            return 0
        }
        return 1
    }
Nastavení aplikace

Platforma také potřebuje vědět, kde je nainstalovaná vaše vlastní verze Tomcat. Umístění instalace můžete nastavit v CATALINA_BASE nastavení aplikace.

Toto nastavení můžete změnit pomocí Azure CLI:

    az webapp config appsettings set -g $MyResourceGroup -n $MyUniqueApp --settings CATALINA_BASE="%LOCAL_EXPANDED%\tomcat"

Nebo můžete nastavení na webu Azure Portal změnit ručně:

  1. Přejděte na Nastavení> Konfigurovat>nastavení aplikace.
  2. Vyberte Nové nastavení aplikace.
  3. K vytvoření nastavení použijte tyto hodnoty:
    1. Název: CATALINA_BASE
    2. Hodnota: "%LOCAL_EXPANDED%\tomcat"
Příklad startup.ps1

Následující ukázkový skript zkopíruje vlastní Tomcat do místní složky, provede transformaci XSL a indikuje, že transformace proběhla úspěšně:

    # Locations of xml and xsl files
    $target_xml="$Env:LOCAL_EXPANDED\tomcat\conf\server.xml"
    $target_xsl="$Env:HOME\site\server.xsl"

    # Define the transform function
    # Useful if transforming multiple files
    function TransformXML{
        param ($xml, $xsl, $output)

        if (-not $xml -or -not $xsl -or -not $output)
        {
            return 0
        }

        Try
        {
            $xslt_settings = New-Object System.Xml.Xsl.XsltSettings;
            $XmlUrlResolver = New-Object System.Xml.XmlUrlResolver;
            $xslt_settings.EnableScript = 1;

            $xslt = New-Object System.Xml.Xsl.XslCompiledTransform;
            $xslt.Load($xsl,$xslt_settings,$XmlUrlResolver);
            $xslt.Transform($xml, $output);
        }

        Catch
        {
            $ErrorMessage = $_.Exception.Message
            $FailedItem = $_.Exception.ItemName
            echo  'Error'$ErrorMessage':'$FailedItem':' $_.Exception;
            return 0
        }
        return 1
    }

    $success = TransformXML -xml $target_xml -xsl $target_xsl -output $target_xml

    # Check for marker file indicating that config has already been done
    if(Test-Path "$Env:LOCAL_EXPANDED\tomcat\config_done_marker"){
        return 0
    }

    # Delete previous Tomcat directory if it exists
    # In case previous config isn't completed or a new config should be forcefully installed
    if(Test-Path "$Env:LOCAL_EXPANDED\tomcat"){
        Remove-Item "$Env:LOCAL_EXPANDED\tomcat" --recurse
    }

    md -Path "$Env:LOCAL_EXPANDED\tomcat"

    # Copy Tomcat to local
    # Using the environment variable $AZURE_TOMCAT90_HOME uses the 'default' version of Tomcat
    Copy-Item -Path "$Env:AZURE_TOMCAT90_HOME\*" "$Env:LOCAL_EXPANDED\tomcat" -Recurse

    # Perform the required customization of Tomcat
    $success = TransformXML -xml $target_xml -xsl $target_xsl -output $target_xml

    # Mark that the operation was a success if successful
    if($success){
        New-Item -Path "$Env:LOCAL_EXPANDED\tomcat\config_done_marker" -ItemType File
    }

Dokončení konfigurace

Nakonec umístíte jar ovladače do cesty ke třídě Tomcat a restartujete službu App Service. Ujistěte se, že soubory ovladačů JDBC jsou k dispozici pro zavaděč tříd Tomcat jejich umístěním do adresáře /home/site/lib . V Cloud Shellu spusťte az webapp deploy --type=lib pro každý soubor JAR ovladače:

az webapp deploy --resource-group <group-name> --name <app-name> --src-path <jar-name>.jar --type=lib --target-path <jar-name>.jar

Tomcat

Tyto pokyny platí pro všechna připojení k databázi. Zástupné symboly musíte vyplnit názvem třídy ovladače zvolené databáze a souborem JAR. Poskytuje se tabulka s názvy tříd a stahováním ovladačů pro běžné databáze.

Databáze Název třídy ovladače Ovladač JDBC
PostgreSQL org.postgresql.Driver Stáhnout
MySQL com.mysql.jdbc.Driver Stáhnout (vybrat nezávislou platformu)
SQL Server com.microsoft.sqlserver.jdbc.SQLServerDriver Stáhnout

Pokud chcete nakonfigurovat Tomcat tak, aby používala Java Database Připojení ivity (JDBC) nebo ROZHRANÍ JPA (Java Persistence API), nejprve přizpůsobte CATALINA_OPTS proměnnou prostředí, která je načtena Tomcatem při spuštění. Nastavte tyto hodnoty prostřednictvím nastavení aplikace v modulu plug-in App Service Maven:

<appSettings>
    <property>
        <name>CATALINA_OPTS</name>
        <value>"$CATALINA_OPTS -Ddbuser=${DBUSER} -Ddbpassword=${DBPASSWORD} -DconnURL=${CONNURL}"</value>
    </property>
</appSettings>

Nebo nastavte proměnné prostředí na stránce konfigurační>aplikace Nastavení na webu Azure Portal.

Dále určete, jestli má být zdroj dat dostupný pro jednu aplikaci nebo pro všechny aplikace spuštěné na servletu Tomcat.

Zdroje dat na úrovni aplikace

  1. V adresáři META-INF/ projektu vytvořte soubor context.xml. Pokud neexistuje, vytvořte adresář META-INF/.

  2. V context.xml přidejte Context prvek pro propojení zdroje dat s adresou JNDI. driverClassName Nahraďte zástupný symbol názvem třídy ovladače z výše uvedené tabulky.

    <Context>
        <Resource
            name="jdbc/dbconnection"
            type="javax.sql.DataSource"
            url="${connURL}"
            driverClassName="<insert your driver class name>"
            username="${dbuser}"
            password="${dbpassword}"
        />
    </Context>
    
  3. Aktualizujte web.xml aplikace tak, aby používala zdroj dat ve vaší aplikaci.

    <resource-env-ref>
        <resource-env-ref-name>jdbc/dbconnection</resource-env-ref-name>
        <resource-env-ref-type>javax.sql.DataSource</resource-env-ref-type>
    </resource-env-ref>
    

Sdílené prostředky na úrovni serveru

Přidání sdíleného zdroje dat na úrovni serveru vyžaduje úpravu server.xml tomcat. Nejprve nahrajte spouštěcí skript a nastavte cestu ke skriptu v konfiguračním>spouštěcím příkazu. Spouštěcí skript můžete nahrát pomocí ftp.

Spouštěcí skript provede transformaci xsl do souboru server.xml a výstupem výsledného souboru XML do /usr/local/tomcat/conf/server.xml. Spouštěcí skript by měl nainstalovat knihovnu libxslt prostřednictvím apk. Váš soubor xsl a spouštěcí skript lze nahrát přes FTP. Níže je uveden příklad spouštěcího skriptu.

# Install libxslt. Also copy the transform file to /home/tomcat/conf/
apk add --update libxslt

# Usage: xsltproc --output output.xml style.xsl input.xml
xsltproc --output /home/tomcat/conf/server.xml /home/tomcat/conf/transform.xsl /usr/local/tomcat/conf/server.xml

Následující příklad souboru XSL přidá nový uzel konektoru do tomcat server.xml.

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" indent="yes"/>

  <xsl:template match="@* | node()" name="Copy">
    <xsl:copy>
      <xsl:apply-templates select="@* | node()"/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="@* | node()" mode="insertConnector">
    <xsl:call-template name="Copy" />
  </xsl:template>

  <xsl:template match="comment()[not(../Connector[@scheme = 'https']) and
                                 contains(., '&lt;Connector') and
                                 (contains(., 'scheme=&quot;https&quot;') or
                                  contains(., &quot;scheme='https'&quot;))]">
    <xsl:value-of select="." disable-output-escaping="yes" />
  </xsl:template>

  <xsl:template match="Service[not(Connector[@scheme = 'https'] or
                                   comment()[contains(., '&lt;Connector') and
                                             (contains(., 'scheme=&quot;https&quot;') or
                                              contains(., &quot;scheme='https'&quot;))]
                                  )]
                      ">
    <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>&#xa;</xsl:text>
    <!-- This is the new connector -->
    <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true" 
               maxThreads="150" scheme="https" secure="true" 
               keystoreFile="${{user.home}}/.keystore" keystorePass="changeit"
               clientAuth="false" sslProtocol="TLS" />
  </xsl:template>

</xsl:stylesheet>

Dokončení konfigurace

Nakonec umístěte jar ovladače do cesty k třídě Tomcat a restartujte službu App Service.

  1. Ujistěte se, že soubory ovladačů JDBC jsou k dispozici pro zavaděč tříd Tomcat jejich umístěním do adresáře /home/site/lib . V Cloud Shellu spusťte az webapp deploy --type=lib pro každý soubor JAR ovladače:
az webapp deploy --resource-group <group-name> --name <app-name> --src-path <jar-name>.jar --type=lib --path <jar-name>.jar

Pokud jste vytvořili zdroj dat na úrovni serveru, restartujte aplikaci App Service Pro Linux. Tomcat se resetuje CATALINA_BASE/home/tomcat a použije aktualizovanou konfiguraci.

Zdroje dat JBoss EAP

Při registraci zdroje dat v JBoss EAP existují tři základní kroky: nahrání ovladače JDBC, přidání ovladače JDBC jako modulu a registrace modulu. App Service je bezstavová hostitelská služba, takže konfigurační příkazy pro přidání a registraci modulu zdroje dat musí být skriptovány a použity při spuštění kontejneru.

  1. Získejte ovladač JDBC databáze.

  2. Vytvořte definiční soubor modulu XML pro ovladač JDBC. Následující příklad ukazuje definici modulu pro PostgreSQL.

    <?xml version="1.0" ?>
    <module xmlns="urn:jboss:module:1.1" name="org.postgres">
        <resources>
        <!-- ***** IMPORTANT : REPLACE THIS PLACEHOLDER *******-->
        <resource-root path="/home/site/deployments/tools/postgresql-42.2.12.jar" />
        </resources>
        <dependencies>
            <module name="javax.api"/>
            <module name="javax.transaction.api"/>
        </dependencies>
    </module>
    
  3. Vložte příkazy JBoss CLI do souboru s názvem jboss-cli-commands.cli. Příkazy JBoss musí přidat modul a zaregistrovat ho jako zdroj dat. Následující příklad ukazuje příkazy rozhraní příkazového řádku JBoss pro PostgreSQL.

    #!/usr/bin/env bash
    module add --name=org.postgres --resources=/home/site/deployments/tools/postgresql-42.2.12.jar --module-xml=/home/site/deployments/tools/postgres-module.xml
    
    /subsystem=datasources/jdbc-driver=postgres:add(driver-name="postgres",driver-module-name="org.postgres",driver-class-name=org.postgresql.Driver,driver-xa-datasource-class-name=org.postgresql.xa.PGXADataSource)
    
    data-source add --name=postgresDS --driver-name=postgres --jndi-name=java:jboss/datasources/postgresDS --connection-url=${POSTGRES_CONNECTION_URL,env.POSTGRES_CONNECTION_URL:jdbc:postgresql://db:5432/postgres} --user-name=${POSTGRES_SERVER_ADMIN_FULL_NAME,env.POSTGRES_SERVER_ADMIN_FULL_NAME:postgres} --password=${POSTGRES_SERVER_ADMIN_PASSWORD,env.POSTGRES_SERVER_ADMIN_PASSWORD:example} --use-ccm=true --max-pool-size=5 --blocking-timeout-wait-millis=5000 --enabled=true --driver-class=org.postgresql.Driver --exception-sorter-class-name=org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLExceptionSorter --jta=true --use-java-context=true --valid-connection-checker-class-name=org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLValidConnectionChecker
    
  4. Vytvořte spouštěcí skript, startup_script.sh který volá příkazy rozhraní příkazového řádku JBoss. Následující příklad ukazuje, jak volat jboss-cli-commands.cli. Později nakonfigurujete službu App Service tak, aby při spuštění kontejneru spustila tento skript.

    $JBOSS_HOME/bin/jboss-cli.sh --connect --file=/home/site/deployments/tools/jboss-cli-commands.cli
    
  5. Pomocí libovolného klienta FTP nahrajte ovladač JDBC, jboss-cli-commands.clistartup_script.sha definici modulu do /site/deployments/tools/.

  6. Nakonfigurujte web tak, aby se spustil startup_script.sh při spuštění kontejneru. Na webu Azure Portal přejděte na příkaz Obecné konfigurace>Nastavení> Startup. Nastavte pole spouštěcího příkazu na /home/site/deployments/tools/startup_script.shhodnotu . Uloží změny.

Pokud chcete ověřit, že se zdroj dat přidal na server JBoss, připojte se přes SSH do vaší webové aplikace a spusťte $JBOSS_HOME/bin/jboss-cli.sh --connect. Po připojení k JBoss spusťte /subsystem=datasources:read-resource příkaz pro tisk seznamu zdrojů dat.

robots933456 v protokolech

V protokolech kontejneru se může zobrazit následující zpráva:

2019-04-08T14:07:56.641002476Z "-" - - [08/Apr/2019:14:07:56 +0000] "GET /robots933456.txt HTTP/1.1" 404 415 "-" "-"

Tuto zprávu klidně ignorujte. /robots933456.txt je fiktivní cesta URL, kterou App Service používá ke kontrole, jestli kontejner dokáže obsloužit požadavky. Odpověď 404 jednoduše indikuje, že příslušná cesta neexistuje, ale dá službě App Service vědět, že kontejner je v pořádku a je připravený reagovat na požadavky.

Volba verze modulu runtime Java

App Service umožňuje uživatelům zvolit hlavní verzi prostředí JVM, jako je Java 8 nebo Java 11, a verzi opravy, například 1.8.0_232 nebo 11.0.5. Můžete také zvolit, aby se verze oprav automaticky aktualizovala, jakmile budou k dispozici nové podverze. Ve většině případů by produkční aplikace měly používat připnuté verze JVM oprav. Tím se zabrání neočekávaným výpadkům během automatického aktualizace verze opravy. Všechny webové aplikace v Javě používají 64bitové virtuální počítače JVM a nedají se konfigurovat.

Pokud používáte Tomcat, můžete se rozhodnout připnout verzi opravy tomcat. Ve Windows můžete nezávisle připnout verze oprav prostředí JVM a Tomcat. V Linuxu můžete připnout verzi opravy Tomcat; Verze opravy prostředí JVM je také připnutá, ale není samostatně konfigurovatelná.

Pokud se rozhodnete připnout podverzi, musíte v aplikaci pravidelně aktualizovat podverzi JVM. Pokud chcete zajistit, aby vaše aplikace běžela v novější podverzi, vytvořte přípravný slot a v přípravném slotu navyšte podverzi. Jakmile ověříte, že aplikace funguje správně v nové podverzi, můžete prohodit přípravné a produkční sloty.

JBoss EAP

Clustering v JBoss EAP

App Service podporuje clustering pro JBoss EAP verze 7.4.1 a vyšší. Aby bylo možné povolit clustering, musí být vaše webová aplikace integrovaná s virtuální sítí. Když je webová aplikace integrovaná s virtuální sítí, restartuje se a instalace protokolu EAP JBoss se automaticky spustí s clusterovanou konfigurací. Instance protokolu EAP JBoss komunikují přes podsíť zadanou v integraci virtuální sítě pomocí portů zobrazených v WEBSITES_PRIVATE_PORTS proměnné prostředí za běhu. Clustering můžete zakázat vytvořením nastavení aplikace s názvem WEBSITE_DISABLE_CLUSTERING s libovolnou hodnotou.

Poznámka:

Pokud povolíte integraci virtuální sítě se šablonou ARM, musíte vlastnost vnetPrivatePorts nastavit ručně na hodnotu 2. Pokud povolíte integraci virtuální sítě z rozhraní příkazového řádku nebo portálu, nastaví se tato vlastnost automaticky.

Když je clustering povolený, instance EAP JBoss používají protokol zjišťování FILE_PING JGroups ke zjišťování nových instancí a uchování informací o clusteru, jako jsou členové clusteru, jejich identifikátory a jejich IP adresy. Ve službě App Service jsou tyto soubory pod /home/clusterinfo/. První instance protokolu EAP, která se má spustit, získá oprávnění ke čtení a zápisu v souboru členství v clusteru. Ostatní instance načtou soubor, najdou primární uzel a koordinují se s tímto uzlem, který se má zahrnout do clusteru a přidat do souboru.

Typy plánů služby App Service Úrovně Premium V3 a Izolované verze 2 je možné volitelně distribuovat napříč Zóny dostupnosti, aby se zlepšila odolnost a spolehlivost pro důležité obchodní úlohy. Tato architektura se také označuje jako redundance zón. Funkce clusteringu JBoss EAP je kompatibilní s funkcí redundance zón.

Pravidla automatického škálování

Při konfiguraci pravidel automatického škálování pro horizontální škálování je důležité odebrat instance postupně (po jednom) a zajistit tak, aby každá odebraná instance přenesla svoji aktivitu (například zpracování databázové transakce) do jiného člena clusteru. Při konfiguraci pravidel automatického škálování na portálu pro vertikální snížení kapacity použijte následující možnosti:

  • Operace: "Snížit počet o"
  • Vychladnutí: "5 minut" nebo vyšší
  • Počet instancí: 1

Nemusíte postupně přidávat instance (horizontální navýšení kapacity), do clusteru můžete postupně přidávat více instancí.

Plány app service JBoss EAP

Protokol JBoss EAP je k dispozici pouze u typů plánů služby App Service Úrovně Premium v3 a Izolované verze 2. Zákazníci, kteří vytvořili web protokolu EAP JBoss na jiné úrovni ve verzi Public Preview, by měli vertikálně navýšit kapacitu na úroveň hardwaru Úrovně Premium nebo Izolované prostředí, aby se zabránilo neočekávanému chování.

Základní konfigurace Tomcat ve službě App Services

Vývojáři v Javě můžou přizpůsobit nastavení serveru, řešit problémy a nasazovat aplikace do Tomcat s jistotou, pokud vědí o souboru server.xml a podrobnostech konfigurace Tomcatu. Mezi možná přizpůsobení patří:

  • Přizpůsobení konfigurace Tomcat: Pochopením server.xml souboru a podrobností o konfiguraci Tomcat můžete doladit nastavení serveru tak, aby odpovídalo potřebám jejich aplikací.
  • Ladění: Když je aplikace nasazená na serveru Tomcat, musí vývojáři znát konfiguraci serveru, aby mohli ladit případné problémy. To zahrnuje kontrolu protokolů serveru, zkoumání konfiguračních souborů a identifikaci chyb, ke kterým může dojít.
  • Řešení potíží se službou Tomcat: Vývojáři v Javě narazí na problémy se svým serverem Tomcat, jako jsou problémy s výkonem nebo chyby konfigurace. Díky pochopení server.xml souboru a podrobností o konfiguraci Tomcat můžou vývojáři tyto problémy rychle diagnostikovat a řešit, což může ušetřit čas a úsilí.
  • Nasazování aplikací do Tomcat: Pokud chcete nasadit webovou aplikaci Java do Tomcatu, musí vývojáři vědět, jak nakonfigurovat server.xml soubor a další nastavení Tomcatu. Pochopení těchto podrobností je nezbytné pro úspěšné nasazení aplikací a zajištění bezproblémového spuštění na serveru.

Když vytvoříte aplikaci s integrovanou službou Tomcat pro hostování úloh v Javě (soubor WAR nebo soubor JAR), jsou k dispozici určitá nastavení, která se dostanou mimo konfiguraci Tomcat. Podrobné informace, včetně výchozí konfigurace webového serveru Tomcat, najdete v oficiální dokumentaci k Apache Tomcat.

Kromě toho existují určité transformace, které jsou dále použity nad server.xml pro distribuci Tomcat po spuštění. Jedná se o transformace nastavení Připojení oru, hostitele a ventilu.

Mějte na paměti, že nejnovější verze Tomcat mají server.xml (8.5.58 a 9.0.38 dále). Starší verze Tomcat nepoužívají transformace a v důsledku toho můžou mít jiné chování.

Konektor

<Connector port="${port.http}" address="127.0.0.1" maxHttpHeaderSize="16384" compression="on" URIEncoding="UTF-8" connectionTimeout="${site.connectionTimeout}" maxThreads="${catalina.maxThreads}" maxConnections="${catalina.maxConnections}" protocol="HTTP/1.1" redirectPort="8443"/>
  • maxHttpHeaderSize je nastavená na 16384
  • URIEncoding je nastavená na UTF-8
  • conectionTimeout je nastavená na WEBSITE_TOMCAT_CONNECTION_TIMEOUThodnotu , která je výchozí hodnota 240000
  • maxThreads je nastavená na WEBSITE_CATALINA_MAXTHREADShodnotu , která je výchozí hodnota 200
  • maxConnections je nastavená na WEBSITE_CATALINA_MAXCONNECTIONShodnotu , která je výchozí hodnota 10000

Poznámka:

Nastavení connectionTimeout, maxThreads a max Připojení ions je možné ladit pomocí nastavení aplikace.

Následuje příklad příkazů rozhraní příkazového řádku, které můžete použít ke změně hodnot conectionTimeout, maxThreads nebo max Připojení ions:

az webapp config appsettings set --resource-group myResourceGroup --name myApp --settings WEBSITE_TOMCAT_CONNECTION_TIMEOUT=120000
az webapp config appsettings set --resource-group myResourceGroup --name myApp --settings WEBSITE_CATALINA_MAXTHREADS=100
az webapp config appsettings set --resource-group myResourceGroup --name myApp --settings WEBSITE_CATALINA_MAXCONNECTIONS=5000
  • Připojení or používá místo 127.0.0.1 adresu kontejneru.

Hostitelský počítač

<Host appBase="${site.appbase}" xmlBase="${site.xmlbase}" unpackWARs="${site.unpackwars}" workDir="${site.tempdir}" errorReportValveClass="com.microsoft.azure.appservice.AppServiceErrorReportValve" name="localhost" autoDeploy="true">
  • appBase je nastavená na AZURE_SITE_APP_BASEhodnotu , která výchozí hodnota je místní. WebappsLocalPath
  • xmlBase je nastavená na AZURE_SITE_HOMEhodnotu , která je výchozí hodnota /site/wwwroot
  • unpackWARs je nastavená na AZURE_UNPACK_WARShodnotu , která je výchozí hodnota true
  • workDir je nastavená na JAVA_TMP_DIRhodnotu , která výchozí nastavení TMP
  • errorReportValveClass používá náš vlastní ventil pro hlášení chyb.

Ventil

<Valve prefix="site_access_log.${catalina.instance.name}" pattern="%h %l %u %t &quot;%r&quot; %s %b %D %{x-arr-log-id}i" directory="${site.logdir}/http/RawLogs" maxDays="${site.logRetentionDays}" className="org.apache.catalina.valves.AccessLogValve" suffix=".txt"/>
  • directory je nastavená na AZURE_LOGGING_DIRhodnotu , která je výchozí hodnota home\logFiles
  • maxDays je na WEBSITE_HTTPLOGGING_RETENTION_DAYS, který se ve výchozím nastavení [ 0 navždy]

V Linuxu má všechna stejná přizpůsobení a navíc:

  • Přidá do ventilu několik chyb a nahlašuje stránky:
               <xsl:attribute name="appServiceErrorPage">
                   <xsl:value-of select="'${appService.valves.appServiceErrorPage}'"/>
               </xsl:attribute>

               <xsl:attribute name="showReport">
                   <xsl:value-of select="'${catalina.valves.showReport}'"/>
               </xsl:attribute>

               <xsl:attribute name="showServerInfo">
                   <xsl:value-of select="'${catalina.valves.showServerInfo}'"/>
               </xsl:attribute>

Další kroky

Navštivte centrum pro vývojáře v Azure pro Javu a najděte referenční dokumentaci k Azure pro rychlý start, kurzy a referenční dokumentaci k Javě.