Wdrażanie i konfigurowanie aplikacji Tomcat, JBoss lub Java SE w usłudze aplikacja systemu Azure Service
W tym artykule przedstawiono najbardziej typową konfigurację wdrażania i środowiska uruchomieniowego dla aplikacji Java w usłudze App Service. Jeśli nigdy nie używasz usługi aplikacja systemu Azure Service, najpierw zapoznaj się z przewodnikiem Szybki start języka Java. Odpowiedzi na ogólne pytania dotyczące korzystania z usługi App Service, które nie są specyficzne dla programowania w języku Java, znajdują się w często zadawanych pytaniach dotyczących usługi App Service.
usługa aplikacja systemu Azure uruchamia aplikacje internetowe Java w w pełni zarządzanej usłudze w trzech wariantach:
- Java SE — może uruchomić aplikację wdrożoną jako pakiet JAR zawierający serwer osadzony (taki jak Spring Boot, Dropwizard, Quarkus lub jeden z osadzonym serwerem Tomcat lub Jetty).
- Tomcat — wbudowany serwer Tomcat może uruchamiać aplikację wdrożona jako pakiet WAR.
- JBoss EAP — obsługiwane tylko w przypadku aplikacji systemu Linux w warstwach cenowych Bezpłatna, Premium v3 i Izolowana wersja 2. Wbudowany serwer JBoss EAP może uruchamiać aplikację wdrożona jako pakiet WAR lub EAR.
Uwaga
W przypadku aplikacji Spring zalecamy używanie usługi Azure Spring Apps. Można jednak nadal używać usługi aplikacja systemu Azure jako miejsca docelowego. Aby uzyskać porady, zobacz Wskazówki dotyczące miejsca docelowego obciążenia w języku Java.
Pokaż wersję języka Java
Aby wyświetlić bieżącą wersję języka Java, uruchom następujące polecenie w usłudze Cloud Shell:
az webapp config show --resource-group <resource-group-name> --name <app-name> --query linuxFxVersion
Aby wyświetlić wszystkie obsługiwane wersje języka Java, uruchom następujące polecenie w usłudze Cloud Shell:
az webapp list-runtimes --os linux | grep "JAVA\|TOMCAT\|JBOSSEAP"
Aby uzyskać więcej informacji na temat obsługi wersji, zobacz Zasady obsługi środowiska uruchomieniowego języka usługi App Service.
Wdrażanie aplikacji
Narzędzia Build Tools
Maven
Za pomocą wtyczki Maven dla usługi Azure Web Apps możesz łatwo przygotować projekt Java maven dla aplikacji internetowej platformy Azure za pomocą jednego polecenia w katalogu głównym projektu:
mvn com.microsoft.azure:azure-webapp-maven-plugin:2.13.0:config
To polecenie dodaje wtyczkę i powiązaną konfigurację azure-webapp-maven-plugin
, wyświetlając monit o wybranie istniejącej aplikacji internetowej platformy Azure lub utworzenie nowej. Podczas konfigurowania próbuje wykryć, czy aplikacja powinna zostać wdrożona w środowisku Java SE, Tomcat lub (tylko system Linux) JBoss EAP. Następnie możesz wdrożyć aplikację Java na platformie Azure przy użyciu następującego polecenia:
mvn package azure-webapp:deploy
Oto przykładowa konfiguracja w pliku pom.xml
:
<plugin>
<groupId>com.microsoft.azure</groupId>
<artifactId>azure-webapp-maven-plugin</artifactId>
<version>2.11.0</version>
<configuration>
<subscriptionId>111111-11111-11111-1111111</subscriptionId>
<resourceGroup>spring-boot-xxxxxxxxxx-rg</resourceGroup>
<appName>spring-boot-xxxxxxxxxx</appName>
<pricingTier>B2</pricingTier>
<region>westus</region>
<runtime>
<os>Linux</os>
<webContainer>Java SE</webContainer>
<javaVersion>Java 17</javaVersion>
</runtime>
<deployment>
<resources>
<resource>
<type>jar</type>
<directory>${project.basedir}/target</directory>
<includes>
<include>*.jar</include>
</includes>
</resource>
</resources>
</deployment>
</configuration>
</plugin>
Gradle
Skonfiguruj wtyczkę Gradle dla usługi Azure Web Apps , dodając wtyczkę do pliku
build.gradle
:plugins { id "com.microsoft.azure.azurewebapp" version "1.10.0" }
Skonfiguruj szczegóły aplikacji internetowej. Odpowiednie zasoby platformy Azure są tworzone, jeśli nie istnieją. Poniżej przedstawiono przykładową konfigurację, aby uzyskać szczegółowe informacje, zapoznaj się z tym dokumentem.
azurewebapp { subscription = '<your subscription id>' resourceGroup = '<your resource group>' appName = '<your app name>' pricingTier = '<price tier like 'P1v2'>' region = '<region like 'westus'>' runtime { os = 'Linux' webContainer = 'Tomcat 10.0' // or 'Java SE' if you want to run an executable jar javaVersion = 'Java 17' } appSettings { <key> = <value> } auth { type = 'azure_cli' // support azure_cli, oauth2, device_code and service_principal } }
Wdróż za pomocą jednego polecenia.
gradle azureWebAppDeploy
Środowiska IDE
Platforma Azure zapewnia bezproblemowe środowisko programowania w usłudze Java App Service w popularnych środowiskach IDE Języka Java, w tym:
- VS Code: Java Web Apps z programem Visual Studio Code
- IntelliJ IDEA:Tworzenie aplikacji internetowej Hello World dla usługi aplikacja systemu Azure przy użyciu środowiska IntelliJ
- Eclipse:Tworzenie aplikacji internetowej Hello World dla usługi aplikacja systemu Azure przy użyciu środowiska Eclipse
Kudu API
Aby wdrożyć pliki .jar w środowisku Java SE, użyj /api/publish
punktu końcowego witryny Kudu. Aby uzyskać więcej informacji na temat tego interfejsu API, zobacz tę dokumentację.
Uwaga
Aby zidentyfikować i uruchomić aplikację, aplikacja .jar musi mieć nazwę app.jar
dla usługi App Service. Wtyczka Maven wykonuje to automatycznie podczas wdrażania. Jeśli nie chcesz zmienić nazwy pliku JAR na app.jar, możesz przekazać skrypt powłoki za pomocą polecenia , aby uruchomić aplikację .jar. Wklej ścieżkę bezwzględną do tego skryptu w polu tekstowym Plik startowy w sekcji Konfiguracja portalu. Skrypt uruchamiania nie jest uruchamiany z katalogu, do którego został umieszczony. W związku z tym zawsze należy używać ścieżek bezwzględnych do odwoływania się do plików w skrypcie startowym (na przykład: java -jar /home/myapp/myapp.jar
).
Aby wdrożyć pliki war w usłudze Tomcat, użyj punktu końcowego /api/wardeploy/
do postu pliku archiwum. Aby uzyskać więcej informacji na temat tego interfejsu API, zobacz tę dokumentację.
Aby wdrożyć pliki war na platformie JBoss, użyj punktu końcowego /api/wardeploy/
do postu pliku archiwum. Aby uzyskać więcej informacji na temat tego interfejsu API, zobacz tę dokumentację.
Aby wdrożyć pliki ear, użyj protokołu FTP. Aplikacja .ear jest wdrażana w katalogu głównym kontekstu zdefiniowanym w konfiguracji aplikacji. Jeśli na przykład katalog główny kontekstu aplikacji to <context-root>myapp</context-root>
, możesz przeglądać witrynę w ścieżce /myapp
: http://my-app-name.azurewebsites.net/myapp
. Jeśli chcesz, aby aplikacja internetowa była obsługiwana w ścieżce głównej, upewnij się, że aplikacja ustawia katalog główny kontekstu na ścieżkę główną: <context-root>/</context-root>
. Aby uzyskać więcej informacji, zobacz Ustawianie katalogu głównego kontekstu aplikacji internetowej.
Nie wdrażaj pliku war ani .jar przy użyciu protokołu FTP. Narzędzie FTP jest przeznaczone do przekazywania skryptów uruchamiania, zależności lub innych plików środowiska uruchomieniowego. Nie jest to optymalny wybór w przypadku wdrażania aplikacji internetowych.
Ponowne zapisywanie lub przekierowywanie adresu URL
Aby przepisać lub przekierować adres URL, użyj jednego z dostępnych rewriterów adresów URL, takich jak UrlRewriteFilter.
Tomcat zapewnia również zawór do ponownego zapisywania.
JBoss zapewnia również zawór do ponownego zapisywania.
Rejestrowanie i debugowanie aplikacji
Raporty wydajności, wizualizacje ruchu i kontrole kondycji są dostępne dla każdej aplikacji za pośrednictwem witryny Azure Portal. Aby uzyskać więcej informacji, zobacz omówienie diagnostyki usługi aplikacja systemu Azure Service.
Przesyłanie strumieniowe dzienników diagnostycznych
Dostęp do dzienników konsoli wygenerowanych z poziomu kontenera można uzyskać.
Najpierw włącz rejestrowanie kontenerów, uruchamiając następujące polecenie:
az webapp log config --name <app-name> --resource-group <resource-group-name> --docker-container-logging filesystem
Zastąp <app-name>
wartości i <resource-group-name>
nazwami odpowiednimi dla aplikacji internetowej.
Po włączeniu rejestrowania kontenerów uruchom następujące polecenie, aby wyświetlić strumień dziennika:
az webapp log tail --name <app-name> --resource-group <resource-group-name>
Jeśli nie widzisz dzienników konsoli, sprawdź ponownie w ciągu 30 sekund.
Aby zatrzymać przesyłanie strumieniowe dzienników w dowolnym momencie, wpisz Ctrl+C.
Możesz również sprawdzić pliki dziennika w przeglądarce pod adresem https://<app-name>.scm.azurewebsites.net/api/logs/docker
.
Aby uzyskać więcej informacji, zobacz Stream logs in Cloud Shell (Dzienniki usługi Stream w usłudze Cloud Shell).
Dostęp do konsoli SSH w systemie Linux
Aby otworzyć bezpośrednią sesję SSH w kontenerze, należy uruchomić aplikację.
Wklej następujący adres URL do przeglądarki i zastąp wartość <app-name>
nazwą swojej aplikacji:
https://<app-name>.scm.azurewebsites.net/webssh/host
Jeśli nie masz jeszcze uwierzytelnienia, musisz uwierzytelnić się w subskrypcji platformy Azure, aby nawiązać połączenie. Po uwierzytelnieniu zostanie wyświetlona powłoka w przeglądarce umożliwiająca uruchamianie poleceń w kontenerze.
Uwaga
Wszelkie zmiany wprowadzone poza katalogiem /home są przechowywane w samym kontenerze i nie są zachowywane po ponownym uruchomieniu aplikacji.
Aby otworzyć zdalną sesję SSH z komputera lokalnego, zobacz Otwieranie sesji SSH z poziomu powłoki zdalnej.
Narzędzia do rozwiązywania problemów z systemem Linux
Wbudowane obrazy Java są oparte na systemie operacyjnym Alpine Linux . apk
Użyj menedżera pakietów, aby zainstalować wszystkie narzędzia do rozwiązywania problemów lub polecenia.
Java Profiler
Wszystkie środowiska uruchomieniowe Języka Java w usłudze aplikacja systemu Azure są dostarczane z narzędziem JDK Flight Recorder do profilowania obciążeń Java. Służy do rejestrowania zdarzeń JVM, systemu i aplikacji oraz rozwiązywania problemów w aplikacjach.
Aby dowiedzieć się więcej na temat programu Java Profiler, odwiedź dokumentację aplikacja systemu Azure Insights.
Flight Recorder
Wszystkie środowiska uruchomieniowe Języka Java w usłudze App Service są dostarczane z narzędziem Java Flight Recorder. Służy do rejestrowania zdarzeń JVM, systemu i aplikacji oraz rozwiązywania problemów w aplikacjach Java.
Za pomocą protokołu SSH w usłudze App Service uruchom jcmd
polecenie , aby wyświetlić listę wszystkich uruchomionych procesów Java. Oprócz jcmd
siebie powinna być widoczna aplikacja Java z numerem identyfikatora 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
Wykonaj następujące polecenie, aby uruchomić 30-sekundowe nagranie maszyny wirtualnej JVM. Profiluje maszynę JVM i tworzy plik JFR o nazwie jfr_example.jfr w katalogu głównym. (Zastąp wartość 116 identyfikatorem pid aplikacji Java).
jcmd 116 JFR.start name=MyRecording settings=profile duration=30s filename="/home/jfr_example.jfr"
W 30-sekundowym interwale można sprawdzić, czy nagranie odbywa się, uruchamiając polecenie jcmd 116 JFR.check
. Polecenie wyświetla wszystkie nagrania dla danego procesu Java.
Nagrywanie ciągłe
Narzędzie Java Flight Recorder umożliwia ciągłe profilowanie aplikacji Java przy minimalnym wpływie na wydajność środowiska uruchomieniowego. W tym celu uruchom następujące polecenie interfejsu wiersza polecenia platformy Azure, aby utworzyć ustawienie aplikacji o nazwie JAVA_OPTS z wymaganą konfiguracją. Zawartość ustawienia aplikacji JAVA_OPTS jest przekazywana do polecenia po uruchomieniu java
aplikacji.
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
Po rozpoczęciu nagrywania można w dowolnym momencie zrzucić bieżące dane nagrywania JFR.dump
przy użyciu polecenia .
jcmd <pid> JFR.dump name=continuous_recording filename="/home/recording1.jfr"
Analizowanie .jfr
plików
Użyj protokołu FTPS , aby pobrać plik JFR na komputer lokalny. Aby przeanalizować plik JFR, pobierz i zainstaluj narzędzie Java Mission Control. Aby uzyskać instrukcje dotyczące narzędzia Java Mission Control, zapoznaj się z dokumentacją pakietu JMC i instrukcjami dotyczącymi instalacji.
Rejestrowanie aplikacji
Włącz rejestrowanie aplikacji za pośrednictwem witryny Azure Portal lub interfejsu wiersza polecenia platformy Azure, aby skonfigurować usługę App Service w celu zapisania standardowych strumieni błędów konsoli aplikacji i standardowych strumieni błędów konsoli do lokalnego systemu plików lub usługi Azure Blob Storage. Jeśli potrzebujesz dłuższego przechowywania, skonfiguruj aplikację do zapisywania danych wyjściowych w kontenerze usługi Blob Storage.
Dzienniki aplikacji Java i Tomcat można znaleźć w katalogu /home/LogFiles/Application/ .
Rejestrowanie usługi Azure Blob Storage dla aplikacji opartych na systemie Linux można skonfigurować tylko przy użyciu usługi Azure Monitor.
Jeśli aplikacja używa logback lub Log4j do śledzenia, możesz przekazać te ślady do przeglądu w usłudze aplikacja systemu Azure Insights, korzystając z instrukcji konfiguracji struktury rejestrowania w artykule Eksploruj dzienniki śledzenia języka Java w usłudze Application Insights.
Uwaga
Ze względu na znaną lukę w zabezpieczeniach CVE-2021-44228 należy użyć usługi Log4j w wersji 2.16 lub nowszej.
Dostosowywanie i dostrajanie
usługa aplikacja systemu Azure obsługuje dostrajanie i dostosowywanie za pośrednictwem witryny Azure Portal i interfejsu wiersza polecenia. Zapoznaj się z następującymi artykułami dotyczącymi konfiguracji aplikacji internetowej innej niż Java:
- Konfigurowanie ustawień aplikacji
- Konfigurowanie domeny niestandardowej
- Konfigurowanie powiązań TLS/SSL
- Dodawanie sieci CDN
- Konfigurowanie witryny Kudu
Lokalne kopiowanie zawartości aplikacji
Ustaw ustawienie JAVA_COPY_ALL
aplikacji na wartość , aby true
skopiować zawartość aplikacji do lokalnego procesu roboczego z udostępnionego systemu plików. To ustawienie pomaga rozwiązać problemy z blokowaniem plików.
Ustawianie opcji środowiska uruchomieniowego języka Java
Aby ustawić przydzieloną pamięć lub inne opcje środowiska uruchomieniowego JVM, utwórz ustawienie aplikacji o nazwie JAVA_OPTS
z opcjami. Usługa App Service przekazuje to ustawienie jako zmienną środowiskową do środowiska uruchomieniowego Java po uruchomieniu.
W witrynie Azure Portal w obszarze Ustawienia aplikacji internetowej utwórz nowe ustawienie aplikacji o nazwie JAVA_OPTS
zawierające inne ustawienia, takie jak -Xms512m -Xmx1204m
.
W witrynie Azure Portal w obszarze Ustawienia aplikacji internetowej utwórz nowe ustawienie aplikacji o nazwie CATALINA_OPTS
zawierające inne ustawienia, takie jak -Xms512m -Xmx1204m
.
Aby skonfigurować ustawienie aplikacji z poziomu wtyczki Maven, dodaj tagi ustawień/wartości w sekcji wtyczki platformy Azure. W poniższym przykładzie ustawiono określony minimalny i maksymalny rozmiar sterty Java:
<appSettings>
<property>
<name>JAVA_OPTS</name>
<value>-Xms1024m -Xmx1024m</value>
</property>
</appSettings>
Uwaga
Nie musisz tworzyć pliku web.config w przypadku korzystania z serwera Tomcat w usłudze Windows App Service.
Deweloperzy z jedną aplikacją z jednym miejscem wdrożenia w planie usługi App Service mogą korzystać z następujących opcji:
- Wystąpienia B1 i S1:
-Xms1024m -Xmx1024m
- Wystąpienia B2 i S2:
-Xms3072m -Xmx3072m
- Wystąpienia B3 i S3:
-Xms6144m -Xmx6144m
- Wystąpienia P1v2:
-Xms3072m -Xmx3072m
- Wystąpienia P2v2:
-Xms6144m -Xmx6144m
- Wystąpienia P3v2:
-Xms12800m -Xmx12800m
- Wystąpienia P1v3:
-Xms6656m -Xmx6656m
- Wystąpienia P2v3:
-Xms14848m -Xmx14848m
- Wystąpienia P3v3:
-Xms30720m -Xmx30720m
- Wystąpienia I1:
-Xms3072m -Xmx3072m
- Wystąpienia I2:
-Xms6144m -Xmx6144m
- Wystąpienia I3:
-Xms12800m -Xmx12800m
- Wystąpienia I1v2:
-Xms6656m -Xmx6656m
- Wystąpienia I2v2:
-Xms14848m -Xmx14848m
- Wystąpienia I3v2:
-Xms30720m -Xmx30720m
Podczas dostrajania ustawień sterty aplikacji przejrzyj szczegóły planu usługi App Service i uwzględnij wiele aplikacji i miejsca wdrożenia, aby znaleźć optymalną alokację pamięci.
Włączanie gniazd internetowych
Włącz obsługę gniazd internetowych w witrynie Azure Portal w ustawieniach aplikacji dla aplikacji. Aby ustawienie zaczęły obowiązywać, należy ponownie uruchomić aplikację.
Włącz obsługę gniazd internetowych przy użyciu interfejsu wiersza polecenia platformy Azure za pomocą następującego polecenia:
az webapp config set --name <app-name> --resource-group <resource-group-name> --web-sockets-enabled true
Następnie uruchom ponownie aplikację:
az webapp stop --name <app-name> --resource-group <resource-group-name>
az webapp start --name <app-name> --resource-group <resource-group-name>
Ustawianie domyślnego kodowania znaków
W witrynie Azure Portal w obszarze Ustawienia aplikacji internetowej utwórz nowe ustawienie aplikacji o nazwie o JAVA_OPTS
wartości -Dfile.encoding=UTF-8
.
Alternatywnie możesz skonfigurować ustawienie aplikacji przy użyciu wtyczki App Service Maven. Dodaj nazwę ustawienia i tagi wartości w konfiguracji wtyczki:
<appSettings>
<property>
<name>JAVA_OPTS</name>
<value>-Dfile.encoding=UTF-8</value>
</property>
</appSettings>
Wstępne kompilowanie plików JSP
Aby zwiększyć wydajność aplikacji Tomcat, możesz skompilować pliki JSP przed wdrożeniem w usłudze App Service. Możesz użyć wtyczki Maven dostarczonej przez usługę Apache Sling lub za pomocą tego pliku kompilacji Ant.
robots933456 w dziennikach
W dziennikach kontenera może zostać wyświetlony następujący komunikat:
2019-04-08T14:07:56.641002476Z "-" - - [08/Apr/2019:14:07:56 +0000] "GET /robots933456.txt HTTP/1.1" 404 415 "-" "-"
Możesz bezpiecznie zignorować ten komunikat. /robots933456.txt
jest fikcyjną ścieżką adresu URL, za pomocą której usługa App Service sprawdza, czy kontener jest w stanie obsługiwać żądania. Odpowiedź 404 oznacza po prostu, że ścieżka nie istnieje, ale pozwala usłudze App Service sprawdzić, czy kontener jest w dobrej kondycji i jest gotowy do reagowania na żądania.
Wybieranie wersji środowiska uruchomieniowego Java
Usługa App Service umożliwia użytkownikom wybranie wersji głównej maszyny JVM, takiej jak Java 8 lub Java 11, oraz wersji poprawki, takiej jak 1.8.0_232 lub 11.0.5. Możesz również automatycznie zaktualizować wersję poprawki, gdy staną się dostępne nowe wersje pomocnicze. W większości przypadków aplikacje produkcyjne powinny używać przypiętych wersji JVM poprawki. Zapobiega to nieoczekiwanym awariom podczas automatycznej aktualizacji wersji poprawki. Wszystkie aplikacje internetowe Java używają 64-bitowych maszyn JVM i nie można jej konfigurować.
Jeśli używasz serwera Tomcat, możesz przypiąć wersję poprawki serwera Tomcat. W systemie Windows można niezależnie przypiąć wersje poprawek maszyn wirtualnych JVM i Tomcat. W systemie Linux możesz przypiąć wersję poprawki serwera Tomcat; wersja poprawki maszyny wirtualnej JVM jest również przypięta, ale nie można jej oddzielnie konfigurować.
Jeśli zdecydujesz się przypiąć wersję pomocniczą, musisz okresowo aktualizować wersję pomocniczą JVM w aplikacji. Aby upewnić się, że aplikacja działa w nowszej wersji pomocniczej, utwórz miejsce przejściowe i zwiększ wersję pomocniczą w miejscu przejściowym. Po potwierdzeniu, że aplikacja działa poprawnie w nowej wersji pomocniczej, możesz zamienić miejsca przejściowe i produkcyjne.
Uruchamianie interfejsu wiersza polecenia narzędzia JBoss
W sesji SSH aplikacji JBoss możesz uruchomić interfejs wiersza polecenia JBoss za pomocą następującego polecenia:
$JBOSS_HOME/bin/jboss-cli.sh --connect
W zależności od tego, gdzie JBoss znajduje się w cyklu życia serwera, połączenie może nie być możliwe. Odczekaj kilka minut i spróbuj ponownie. Takie podejście jest przydatne w przypadku szybkiego sprawdzania bieżącego stanu serwera (na przykład w celu sprawdzenia, czy źródło danych jest prawidłowo skonfigurowane).
Ponadto zmiany wprowadzone na serwerze za pomocą interfejsu wiersza polecenia JBoss w sesji SSH nie są utrwalane po ponownym uruchomieniu aplikacji. Za każdym razem, gdy aplikacja zostanie uruchomiona, serwer JBoss EAP rozpoczyna się od czystej instalacji. Podczas cyklu życia uruchamiania usługa App Service wykonuje niezbędne konfiguracje serwera i wdraża aplikację. Aby wprowadzić wszelkie trwałe zmiany na serwerze JBoss, użyj niestandardowego skryptu uruchamiania lub polecenia uruchamiania. Aby zapoznać się z przykładem kompleksowego, zobacz Konfigurowanie źródeł danych dla aplikacji Tomcat, JBoss lub Java SE w usłudze aplikacja systemu Azure Service.
Alternatywnie możesz ręcznie skonfigurować usługę App Service tak, aby uruchamiała dowolny plik podczas uruchamiania. Na przykład:
az webapp config set --resource-group <group-name> --name <app-name> --startup-file /home/site/scripts/foo.sh
Aby uzyskać więcej informacji na temat poleceń interfejsu wiersza polecenia, które można uruchomić, zobacz:
Klastrowanie
Usługa App Service obsługuje klastrowanie dla protokołu JBoss EAP w wersji 7.4.1 lub nowszej. Aby włączyć klastrowanie, aplikacja internetowa musi być zintegrowana z siecią wirtualną. Gdy aplikacja internetowa jest zintegrowana z siecią wirtualną, jest uruchamiana ponownie, a instalacja protokołu EAP JBoss automatycznie rozpoczyna się od konfiguracji klastrowanej. Po uruchomieniu wielu wystąpień z skalowaniem automatycznym wystąpienia JBoss EAP komunikują się ze sobą za pośrednictwem podsieci określonej w integracji sieci wirtualnej. Klastrowanie można wyłączyć, tworząc ustawienie aplikacji o nazwie WEBSITE_DISABLE_CLUSTERING
z dowolną wartością.
Uwaga
Jeśli włączasz integrację sieci wirtualnej z szablonem usługi ARM, musisz ręcznie ustawić właściwość vnetPrivatePorts
na wartość 2
. Jeśli włączysz integrację sieci wirtualnej z interfejsu wiersza polecenia lub portalu, ta właściwość zostanie ustawiona automatycznie.
Po włączeniu klastrowania wystąpienia protokołu JBoss EAP używają protokołu odnajdywania FILE_PING JGroups w celu odnajdywania nowych wystąpień i utrwalania informacji klastra, takich jak członkowie klastra, ich identyfikatory i adresy IP. W usłudze App Service te pliki znajdują się w obszarze /home/clusterinfo/
. Pierwsze wystąpienie protokołu EAP do uruchomienia uzyskuje uprawnienia do odczytu/zapisu w pliku członkostwa w klastrze. Inne wystąpienia odczytują plik, znajdują węzeł podstawowy i koordynują go z tym węzłem, który ma zostać uwzględniony w klastrze i dodawany do pliku.
Uwaga
Możesz uniknąć przekroczenia limitu czasu klastrowania JBoss, czyszcząc przestarzałe pliki odnajdywania podczas uruchamiania aplikacji.
Typy planów usługi App Service w wersji 3 w warstwie Premium w wersji 3 i izolowanej w wersji 2 można opcjonalnie dystrybuować między Strefy dostępności w celu zwiększenia odporności i niezawodności obciążeń o znaczeniu krytycznym dla działania firmy. Ta architektura jest również nazywana nadmiarowością stref. Funkcja klastrowania JBoss EAP jest zgodna z funkcją nadmiarowości strefy.
Reguły automatycznego skalowania
Podczas konfigurowania reguł skalowania automatycznego na potrzeby skalowania w poziomie ważne jest, aby stopniowo (pojedynczo) usuwać wystąpienia w celu zapewnienia, że każde usunięte wystąpienie może przenieść swoje działanie (takie jak obsługa transakcji bazy danych) do innego elementu członkowskiego klastra. Podczas konfigurowania reguł skalowania automatycznego w portalu w celu skalowania w dół użyj następujących opcji:
- Operacja: "Zmniejsz liczbę według"
- Schładz: "5 minut" lub więcej
- Liczba wystąpień: 1
Nie trzeba przyrostowo dodawać wystąpień (skalowanie w poziomie), można dodać wiele wystąpień do klastra naraz.
Plany usługi App Service
Protokół JBoss EAP jest dostępny w następujących warstwach cenowych: F1, P0v3, P1mv3, P2mv3, P3mv3, P4mv3 i P5mv3.
Cykl życia serwera JBoss
Aplikacja JBoss EAP w usłudze App Service przechodzi przez pięć odrębnych faz przed faktycznym uruchomieniem serwera.
- 1. Faza konfiguracji środowiska
- 2. Faza uruchamiania serwera
- 3. Faza konfiguracji serwera
- 4. Faza wdrażania aplikacji
- 5. Faza ponownego ładowania serwera
Zapoznaj się z odpowiednimi sekcjami poniżej, aby uzyskać szczegółowe informacje, a także możliwości dostosowywania go (na przykład za pomocą ustawień aplikacji).
1. Faza konfiguracji środowiska
- Usługa SSH jest uruchamiana w celu włączenia bezpiecznych sesji SSH z kontenerem.
- Magazyn kluczy środowiska uruchomieniowego Java jest aktualizowany przy użyciu wszystkich certyfikatów publicznych i prywatnych zdefiniowanych w witrynie Azure Portal.
- Certyfikaty publiczne są dostarczane przez platformę w katalogu /var/ssl/certs i są ładowane do $JRE_HOME/lib/security/cacerts.
- Certyfikaty prywatne są dostarczane przez platformę w katalogu /var/ssl/private i są ładowane do $JRE_HOME/lib/security/client.jks.
- Jeśli w tym kroku zostaną załadowane jakiekolwiek certyfikaty w magazynie kluczy Java, właściwości
javax.net.ssl.keyStore
javax.net.ssl.keyStorePassword
ijavax.net.ssl.keyStoreType
zostaną dodane do zmiennej środowiskowejJAVA_TOOL_OPTIONS
. - Niektóre początkowe konfiguracje JVM są określane, takie jak katalogi rejestrowania i parametry stert pamięci Java:
- Jeśli podasz flagi
–Xms
lub–Xmx
dla pamięci w ustawieniuJAVA_OPTS
aplikacji , te wartości zastąpią te, które są dostarczane przez platformę. - Jeśli skonfigurujesz ustawienie
WEBSITES_CONTAINER_STOP_TIME_LIMIT
aplikacji , wartość zostanie przekazana do właściwościorg.wildfly.sigterm.suspend.timeout
środowiska uruchomieniowego , która kontroluje maksymalny czas oczekiwania zamknięcia (w sekundach), gdy program JBoss zostanie zatrzymany.
- Jeśli podasz flagi
- Jeśli aplikacja jest zintegrowana z siecią wirtualną, środowisko uruchomieniowe usługi App Service przekazuje listę portów, które mają być używane do komunikacji między serwerami w zmiennej środowiskowej
WEBSITE_PRIVATE_PORTS
i uruchamia program JBoss przy użyciuclustering
konfiguracji.standalone
W przeciwnym razie używana jest konfiguracja.- W przypadku
clustering
konfiguracji używany jest plik konfiguracji serwera standalone-azure-full-ha.xml . - W przypadku
standalone
konfiguracji używany jest plik konfiguracji serwera standalone-full.xml .
- W przypadku
2. Faza uruchamiania serwera
- Jeśli program JBoss zostanie uruchomiony w
clustering
konfiguracji:- Każde wystąpienie JBoss otrzymuje identyfikator wewnętrzny z zakresu od 0 do liczby wystąpień, do których aplikacja jest skalowana w poziomie.
- Jeśli niektóre pliki znajdują się w ścieżce magazynu transakcji dla tego wystąpienia serwera (przy użyciu jego identyfikatora wewnętrznego), oznacza to, że to wystąpienie serwera ma miejsce identyczne wystąpienie usługi, które uległo awarii wcześniej i pozostawiło niezatwierdzone transakcje. Serwer jest skonfigurowany do wznowienia pracy nad tymi transakcjami.
- Niezależnie od tego, czy narzędzie JBoss rozpoczyna się od
clustering
konfiguracji lubstandalone
, jeśli wersja serwera ma wartość 7.4 lub nowszą, a środowisko uruchomieniowe korzysta z języka Java 17, konfiguracja zostanie zaktualizowana w celu włączenia podsystemu Elytron pod kątem zabezpieczeń. - Jeśli skonfigurujesz ustawienie
WEBSITE_JBOSS_OPTS
aplikacji , wartość zostanie przekazana do skryptu uruchamiania JBoss. To ustawienie może służyć do udostępniania ścieżek do plików właściwości i większej liczby flag mających wpływ na uruchomienie JBoss.
3. Faza konfiguracji serwera
- Na początku tej fazy usługa App Service najpierw czeka, aż serwer JBoss i interfejs administracyjny będą gotowe do odbierania żądań przed kontynuowaniem. Może to potrwać kilka sekund, jeśli usługa Application Insights jest włączona.
- Gdy zarówno serwer JBoss, jak i interfejs administracyjny są gotowe, usługa App Service wykonuje następujące czynności:
- Dodaje moduł
azure.appservice
JBoss, który udostępnia klasy narzędzi do rejestrowania i integracji z usługą App Service. - Aktualizuje rejestrator konsoli tak, aby używał trybu bezbarwnego, tak aby pliki dziennika nie są pełne sekwencji ucieczki kolorów.
- Konfiguruje integrację z dziennikami usługi Azure Monitor.
- Aktualizuje powiązania adresów IP interfejsów WSDL i zarządzania.
- Dodaje moduł
azure.appservice.easyauth
JBoss na potrzeby integracji z uwierzytelnianiem usługi App Service i identyfikatorem Entra firmy Microsoft. - Aktualizuje konfigurację rejestrowania dzienników dostępu oraz nazwę i rotację głównego pliku dziennika serwera.
- Dodaje moduł
- Jeśli ustawienie
WEBSITE_SKIP_AUTOCONFIGURE_DATABASE
aplikacji nie jest zdefiniowane, automatycznie wykrywa adresy URL JDBC usługi App Service w ustawieniach aplikacji usługi App Service. Jeśli istnieją prawidłowe adresy URL JDBC dla baz danych PostgreSQL, MySQL, MariaDB, Oracle, SQL Server lub Azure SQL Database, dodaje odpowiednie sterowniki do serwera i dodaje źródło danych dla każdego adresu URL JDBC i ustawia nazwę JNDI dla każdego źródła danych najava:jboss/env/jdbc/<app-setting-name>_DS
, gdzie<app-setting-name>
jest nazwą ustawienia aplikacji. clustering
Jeśli konfiguracja jest włączona, sprawdzany jest rejestrator konsoli, który ma zostać skonfigurowany.- Jeśli istnieją pliki JAR wdrożone w katalogu /home/site/libs , zostanie utworzony nowy moduł globalny ze wszystkimi tymi plikami JAR.
- Na końcu fazy usługa App Service uruchamia niestandardowy skrypt uruchamiania, jeśli istnieje. Logika wyszukiwania niestandardowego skryptu uruchamiania w następujący sposób:
- Jeśli skonfigurowano polecenie uruchamiania (w witrynie Azure Portal z interfejsem wiersza polecenia platformy Azure itp.), uruchom je; inaczej
- Jeśli ścieżka /home/site/scripts/startup.sh istnieje, użyj jej; w przeciwnym razie,
- Jeśli ścieżka /home/startup.sh istnieje, użyj jej.
Niestandardowe polecenie uruchamiania lub skrypt jest uruchamiane jako użytkownik główny (nie ma potrzeby sudo
), aby móc zainstalować pakiety systemu Linux lub uruchomić interfejs wiersza polecenia JBoss, aby wykonać więcej poleceń instalacji/dostosowywania narzędzia JBoss (tworzenie źródeł danych, instalowanie kart zasobów) itp. Aby uzyskać informacje na temat poleceń zarządzania pakietami systemu Ubuntu, zobacz dokumentację systemu Ubuntu Server. Aby zapoznać się z poleceniami interfejsu wiersza polecenia platformy JBoss, zobacz JBoss Management CLI Guide (Przewodnik po interfejsie wiersza polecenia zarządzania platformą JBoss).
4. Faza wdrażania aplikacji
Skrypt uruchamiania wdraża aplikacje na platformie JBoss, wyszukując następujące lokalizacje w kolejności pierwszeństwa:
- Jeśli skonfigurowano ustawienie
WEBSITE_JAVA_WAR_FILE_NAME
aplikacji , wdróż plik wyznaczony przez niego. - Jeśli /home/site/wwwroot/app.war istnieje, wdróż go.
- Jeśli istnieją inne pliki EAR i WAR w katalogu /home/site/wwwroot, wdróż je.
- Jeśli plik /home/site/wwwroot/webapps istnieje, wdróż w nim pliki i katalogi. Pliki WAR są wdrażane jako same aplikacje, a katalogi są wdrażane jako "eksplodowane" (nieskompresowane) aplikacje internetowe.
- Jeśli w katalogu /home/site/wwwroot istnieją jakiekolwiek autonomiczne strony JSP, skopiuj je do katalogu głównego serwera internetowego i wdróż je jako jedną aplikację internetową.
- Jeśli nie znaleziono jeszcze żadnych plików możliwych do wdrożenia, w kontekście głównym wdróż domyślną stronę powitalną (stronę parkingu).
5. Faza ponownego ładowania serwera
- Po zakończeniu kroków wdrażania serwer JBoss zostanie ponownie załadowany, aby zastosować wszelkie zmiany, które wymagają ponownego załadowania serwera.
- Po ponownym załadowaniu serwera aplikacje wdrożone na serwerze JBoss EAP powinny być gotowe do odpowiadania na żądania.
- Serwer jest uruchamiany do momentu zatrzymania lub ponownego uruchomienia aplikacji usługi App Service. Możesz ręcznie zatrzymać lub ponownie uruchomić aplikację usługi App Service albo wyzwolić ponowne uruchomienie podczas wdrażania plików lub wprowadzić zmiany konfiguracji w aplikacji usługi App Service.
- Jeśli serwer JBoss kończy się nieprawidłowo w
clustering
konfiguracji, wykonywana jest ostateczna funkcja o nazwieemit_alert_tx_store_not_empty
. Funkcja sprawdza, czy proces JBoss pozostawił w dysku plik magazynu transakcji nonempty; Jeśli tak, w konsoli jest rejestrowany błąd:Error: finishing server with non-empty store for node XXXX
. Po uruchomieniu nowego wystąpienia serwera wyszukuje te nieistniejące pliki magazynu transakcji w celu wznowienia pracy (zobacz 2. Faza uruchamiania serwera).
Konfiguracja punktu odniesienia serwera Tomcat
Uwaga
Ta sekcja dotyczy tylko systemu Linux.
Deweloperzy języka Java mogą dostosowywać ustawienia serwera, rozwiązywać problemy i wdrażać aplikacje w usłudze Tomcat z pewnością, jeśli wiedzą o pliku server.xml i szczegółach konfiguracji serwera Tomcat. Możliwe dostosowania obejmują:
- Dostosowywanie konfiguracji serwera Tomcat: dzięki zrozumieniu pliku server.xml i szczegółów konfiguracji serwera Tomcat można dostosować ustawienia serwera w celu dopasowania ich do potrzeb aplikacji.
- Debugowanie: po wdrożeniu aplikacji na serwerze Tomcat deweloperzy muszą znać konfigurację serwera, aby debugować wszelkie problemy, które mogą wystąpić. Obejmuje to sprawdzanie dzienników serwera, badanie plików konfiguracji i identyfikowanie wszelkich błędów, które mogą wystąpić.
- Rozwiązywanie problemów z serwerem Tomcat: Nieuchronnie deweloperzy języka Java napotykają problemy z serwerem Tomcat, takie jak problemy z wydajnością lub błędy konfiguracji. Dzięki zrozumieniu pliku server.xml i szczegółów konfiguracji serwera Tomcat deweloperzy mogą szybko diagnozować i rozwiązywać te problemy, co pozwala zaoszczędzić czas i nakład pracy.
- Wdrażanie aplikacji w usłudze Tomcat: aby wdrożyć aplikację internetową Java w usłudze Tomcat, deweloperzy muszą wiedzieć, jak skonfigurować plik server.xml i inne ustawienia serwera Tomcat. Zrozumienie tych szczegółów jest niezbędne do pomyślnego wdrażania aplikacji i zapewnienia, że działają bezproblemowo na serwerze.
Podczas tworzenia aplikacji z wbudowanym serwerem Tomcat do hostowania obciążenia Java (pliku WAR lub pliku JAR) istnieją pewne ustawienia, które są gotowe do skonfigurowania serwera Tomcat. Aby uzyskać szczegółowe informacje, w tym domyślną konfigurację serwera internetowego Tomcat, możesz zapoznać się z oficjalną dokumentacją serwera Apache Tomcat.
Ponadto istnieją pewne przekształcenia, które są dalej stosowane na podstawie server.xml dystrybucji Tomcat po uruchomieniu. Są to przekształcenia ustawień łącznika, hosta i zaworu.
Najnowsze wersje serwera Tomcat mają server.xml (8.5.58 i 9.0.38). Starsze wersje serwera Tomcat nie używają przekształceń i mogą mieć inne zachowanie w rezultacie.
Łącznik
<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
jest ustawiona na wartość16384
URIEncoding
jest ustawiona na wartośćUTF-8
conectionTimeout
jest ustawiona naWEBSITE_TOMCAT_CONNECTION_TIMEOUT
wartość , która jest domyślnie ustawiona na240000
maxThreads
jest ustawiona naWEBSITE_CATALINA_MAXTHREADS
wartość , która jest domyślnie ustawiona na200
maxConnections
jest ustawiona naWEBSITE_CATALINA_MAXCONNECTIONS
wartość , która jest domyślnie ustawiona na10000
Uwaga
Ustawienia connectionTimeout, maxThreads i maxConnections można dostosować za pomocą ustawień aplikacji
Poniżej przedstawiono przykładowe polecenia interfejsu wiersza polecenia, których można użyć do zmiany wartości conectionTimeout, maxThreads lub maxConnections:
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
- Łącznik używa adresu kontenera zamiast 127.0.0.1
Gospodarz
<Host appBase="${site.appbase}" xmlBase="${site.xmlbase}" unpackWARs="${site.unpackwars}" workDir="${site.tempdir}" errorReportValveClass="com.microsoft.azure.appservice.AppServiceErrorReportValve" name="localhost" autoDeploy="true">
appBase
jest ustawiona naAZURE_SITE_APP_BASE
wartość , która jest domyślnie ustawiona na wartość lokalnąWebappsLocalPath
xmlBase
jest ustawiona naAZURE_SITE_HOME
wartość , która jest domyślnie ustawiona na/site/wwwroot
unpackWARs
jest ustawiona naAZURE_UNPACK_WARS
wartość , która jest domyślnie ustawiona natrue
workDir
jest ustawiona naJAVA_TMP_DIR
wartość , która jest domyślnie ustawionaTMP
errorReportValveClass
używa naszego niestandardowego zaworu raportu o błędach
Zawór
<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
jest ustawiona naAZURE_LOGGING_DIR
wartość , która jest domyślnie ustawiona nahome\logFiles
maxDays
ma wartośćWEBSITE_HTTPLOGGING_RETENTION_DAYS
, która jest domyślnie ustawiona na0
[na zawsze]
W systemie Linux ma wszystkie te same dostosowania, a także:
Dodaje do zaworu niektóre strony błędów i raportowania:
<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>
Następne kroki
Odwiedź centrum Azure for Java Developers, aby znaleźć przewodniki Szybki start platformy Azure, samouczki i dokumentację referencyjną języka Java.