Развертывание и настройка приложения Tomcat, JBoss или Java SE в службе приложение Azure
В этой статье показана наиболее распространенная конфигурация развертывания и среды выполнения для приложений Java в Служба приложений. Если вы раньше не использовали Службу приложений Azure, мы рекомендуем сначала ознакомиться с кратким руководством по Java. Ответы на общие вопросы об использовании службы приложений, не относящиеся к разработке для Java, можно найти в разделе вопросов и ответов о Службе приложений Azure.
приложение Azure служба запускает веб-приложения Java в полностью управляемой службе в трех вариантах:
- Java SE — может запускать приложение, развернутое как JAR-пакет, содержащий внедренный сервер (например, Spring Boot, Dropwizard, Quarkus или один с внедренным сервером Tomcat или Jetty).
- Tomcat — встроенный сервер Tomcat может запускать приложение, развернутое как пакет WAR.
- JBoss EAP — поддерживается только для приложений Linux в ценовой категории "Бесплатный", "Премиум" версии 3 и "Изолированный" версии 2. Встроенный сервер JBoss EAP может запускать приложение, развернутое как пакет WAR или EAR.
Примечание.
Для приложений Spring рекомендуется использовать Azure Spring Apps. Однако вы по-прежнему можете использовать службу приложение Azure в качестве назначения. Рекомендации по назначению рабочей нагрузки Java см. в руководстве по назначению рабочей нагрузки Java.
Отображение версии Java
Чтобы отобразить сведения о текущей версии Java, выполните в Cloud Shell следующую команду.
az webapp config show --resource-group <resource-group-name> --name <app-name> --query linuxFxVersion
Чтобы отобразить сведения обо всех поддерживаемых версиях Java, выполните в Cloud Shell следующую команду.
az webapp list-runtimes --os linux | grep "JAVA\|TOMCAT\|JBOSSEAP"
Дополнительные сведения о поддержке версий см. в Служба приложений политике поддержки среды выполнения языка.
Развертывание приложения
Build Tools
Maven
Подключаемый модуль Maven для веб-приложений Azure позволяет легко подготовить проект Maven на Java для веб-приложения Azure с помощью одной команды в корневом каталоге проекта:
mvn com.microsoft.azure:azure-webapp-maven-plugin:2.13.0:config
Эта команда добавляет подключаемый azure-webapp-maven-plugin
модуль и связанную конфигурацию, запрашивая выбрать существующее веб-приложение Azure или создать новую. Во время настройки он пытается определить, следует ли развертывать приложение в Java SE, Tomcat или (только Linux) JBoss EAP. После этого вы можете развернуть приложение Java в Azure, используя приведенную ниже команду.
mvn package azure-webapp:deploy
Ниже приведен пример конфигурации в 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
Настройте подключаемый модуль Gradle для Azure веб-приложения, добавив подключаемый модуль в ваш
build.gradle
:plugins { id "com.microsoft.azure.azurewebapp" version "1.10.0" }
Настройте сведения о веб-приложении. Соответствующие ресурсы Azure создаются, если они не существуют. Ниже приведен пример конфигурации, дополнительные сведения см. в этом документе.
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 } }
Выполните развертывание с помощью одной команды.
gradle azureWebAppDeploy
Интерфейсы IDE
Azure поддерживает удобные возможности для разработки Java-приложений в Службе приложений в популярных интегрированных средах разработки Java, включая:
- VS Code: веб-приложения Java с Visual Studio Code
- IntelliJ IDEA:создание веб-приложения Hello World для Службы приложений Azure с помощью IntelliJ
- Eclipse:создание веб-приложения Hello World для Службы приложений Azure с помощью Eclipse
API Kudu
Чтобы развернуть файлы JAR в Java SE, используйте конечную точку /api/publish
сайта Kudu. Дополнительные сведения об этом API см. в этой документации.
Примечание.
Чтобы Служба приложений Azure могла идентифицировать и запускать ваше приложение JAR, ему необходимо назначить имя app.jar
. Подключаемый модуль Maven выполняет это автоматически во время развертывания. Если вы не хотите переименовать JAR-файл в app.jar, можно отправить скрипт оболочки с помощью команды, чтобы запустить приложение .jar. Вставьте абсолютный путь в этот скрипт в текстовом поле Файл запуска в разделе конфигурации на портале. Скрипт запуска выполняется не в том каталоге, в который он помещен. Поэтому всегда используйте абсолютные пути для создания ссылок на файлы в скрипте запуска (например, java -jar /home/myapp/myapp.jar
).
Чтобы развернуть файлы WAR в Tomcat, используйте конечную точку /api/wardeploy/
для публикации файла архива. Дополнительные сведения об этом API см. в этой документации.
Чтобы развернуть файлы WAR в JBoss, используйте конечную точку /api/wardeploy/
для публикации файла архива. Дополнительные сведения об этом API см. в этой документации.
Чтобы развернуть файлы EAR, используйте протокол FTP. Приложение .ear развертывается в корневом каталоге контекста, определенном в конфигурации приложения. Например, если корень контекста приложения — <context-root>myapp</context-root>
, вы можете найти сайт по пути /myapp
: http://my-app-name.azurewebsites.net/myapp
. Если вы хотите, чтобы веб-приложение обслуживалось в корневом пути, убедитесь, что приложение устанавливает корневой каталог контекста в корневой путь: <context-root>/</context-root>
Дополнительные сведения см. в разделе Установка корня контекста веб-приложения.
Не развертывайте .war или .jar с помощью FTP. Средство FTP предназначено для передачи сценариев запуска, зависимостей или других файлов среды выполнения. Это не оптимальный выбор для развертывания веб-приложений.
Перезапись или перенаправление URL-адреса
Чтобы переписать или перенаправить URL-адрес, используйте один из доступных средств перезаписи URL-адресов, например UrlRewriteFilter.
Tomcat также предоставляет перезапись клапана.
JBoss также предоставляет перезапись клапана.
Ведение журнала и отладка приложений
Отчеты о производительности, визуализация трафика и проверка работоспособности доступны на портале Azure для каждого приложения. Дополнительные сведения см. в статье Обзор диагностики Службы приложений Azure.
Потоковая передача журналов диагностики
Можно получить доступ к журналам консоли, которые были созданы в контейнере.
Сначала включите ведение журнала контейнера, выполнив следующую команду:
az webapp log config --name <app-name> --resource-group <resource-group-name> --docker-container-logging filesystem
Замените <app-name>
и <resource-group-name>
именами, подходящими для вашего веб-приложения.
После включения ведения журнала контейнера, выполните следующую команду, чтобы просмотреть поток данных журнала.
az webapp log tail --name <app-name> --resource-group <resource-group-name>
Если журналы консоли не отображаются, проверьте еще раз через 30 секунд.
Чтобы остановить потоковую передачу журналов, нажмите клавиши CTRL+C.
Вы также можете проверить файлы журнала в браузере на странице https://<app-name>.scm.azurewebsites.net/api/logs/docker
.
Дополнительные сведения см. в разделе Потоковая передача журналов в Cloud Shell.
Доступ к консоли SSH в Linux
Чтобы открыть прямой сеанс SSH с контейнером, необходимо запустить приложение.
Вставьте следующий URL-адрес в браузер и замените <app-name>
именем вашего приложения:
https://<app-name>.scm.azurewebsites.net/webssh/host
Если вы не прошли аутентификацию, это потребуется сделать, подключившись с помощью подписки Azure. После выполнения проверки подлинности отобразится оболочка в браузере. Здесь можно запускать команды внутри контейнера.
Примечание.
Любые изменения, внесенные не в каталоге /home, сохраняются в самом контейнере и не применяются до перезапуска приложения.
Чтобы открыть удаленный сеанс SSH на локальном компьютере см. инструкцию в разделе Открытие сеанса SSH из удаленной оболочки.
Средства устранения неполадок Linux
Встроенные образы Java основаны на операционной системе Alpine Linux. Используйте диспетчер пакетов apk
, чтобы установить любые средства или команды для устранения неполадок.
Профилировщик Java
Все среды выполнения Java в службе приложение Azure входят в JDK Flight Recorder для профилирования рабочих нагрузок Java. Его можно использовать для записи событий JVM, системы и приложений и устранения неполадок в приложениях.
Дополнительные сведения о Профилировщике Java см. в документации по приложение Azure Insights.
«Черный ящик»
Все среды выполнения Java в Служба приложений входят в пакет записи тестов Java. Его можно использовать для записи событий JVM, системы и приложений и устранения неполадок в приложениях Java.
Подключитесь к Службе приложений Azure по протоколу SSH и выполните команду jcmd
, чтобы просмотреть список всех запущенных процессов Java. Кроме jcmd
того, вы увидите приложение Java, работающее с идентификатором процесса (pid).
078990bbcd11:/home# jcmd
Picked up JAVA_TOOL_OPTIONS: -Djava.net.preferIPv4Stack=true
147 sun.tools.jcmd.JCmd
116 /home/site/wwwroot/app.jar
Выполните следующую команду, чтобы запустить 30-секундную запись JVM. Он профили JVM и создает JFR-файл с именем jfr_example.jfr в домашнем каталоге. (Замените 116 идентификатором PID приложения Java.)
jcmd 116 JFR.start name=MyRecording settings=profile duration=30s filename="/home/jfr_example.jfr"
В течение 30-секундного интервала можно проверить запись, выполнив команду jcmd 116 JFR.check
. Команда отображает все записи для данного процесса Java.
Непрерывная запись
Вы можете использовать средство записи тестов Java для непрерывного профилирования приложения Java с минимальным воздействием на производительность среды выполнения. Для этого выполните следующую команду Azure CLI, чтобы создать параметр приложения JAVA_OPTS с требуемой конфигурацией. Содержимое параметра приложения JAVA_OPTS передается команде java
при запуске приложения.
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
После запуска записи можно в любое время сбросить текущие данные записи с помощью JFR.dump
команды.
jcmd <pid> JFR.dump name=continuous_recording filename="/home/recording1.jfr"
Анализ файлов .jfr
Используйте FTPS, чтобы скачать JFR-файл на локальный компьютер. Чтобы проанализировать JFR-файл, скачайте и установите Java Mission Control. Инструкции по Java Mission Control см. в документации по JMC и инструкциям по установке.
Ведение журнала приложений
Включите ведение журнала приложений с помощью портала Azure или Azure CLI, чтобы настроить службу приложений для записи выходных данных стандартной консоли приложения и потоков ошибок стандартной консоли в локальную файловую систему или хранилище BLOB-объектов Azure. Если необходимо более длительное хранение, настройте приложение для записи выходных данных в контейнер больших двоичных объектов.
Журналы приложений Java и Tomcat можно найти в каталоге /home/LogFiles/Application/.
Хранилище BLOB-объектов Azure ведение журнала для приложений на основе Linux можно настроить только с помощью Azure Monitor.
Если приложение использует Logback или Log4j для трассировки, то эти данные трассировки можно передать в Azure Application Insights для просмотра, выполнив инструкции по настройке платформы ведения журнала в разделе Просмотр журналов трассировки Java в Application Insights.
Примечание.
Из-за известной уязвимости CVE-2021-44228 обязательно используйте Log4j версии 2.16 или более поздней.
Настройка
Служба приложений Azure поддерживает настройку с помощью портала Azure и интерфейса командной строки. Ознакомьтесь со следующими статьями о настройке конкретных веб-приложений не на платформе Java:
- Настройка параметров приложения
- Настройка личного домена
- Настройка привязок TLS/SSL
- Добавление CDN
- Настройка сайта Kudu
Локальное копирование содержимого приложения
Задайте параметр JAVA_COPY_ALL
приложения, чтобы true
скопировать содержимое приложения в локальную рабочую роль из общей файловой системы. Этот параметр помогает устранить проблемы с блокировкой файлов.
Настройка параметров среды выполнения Java
Чтобы настроить выделенную память или другие параметры среды выполнения виртуальной машины Java, создайте параметр приложения с именем JAVA_OPTS
с параметрами. При запуске Служба приложений Azure передает этот параметр в качестве переменной среды в среду выполнения Java.
В портал Azure в разделе "Параметры приложения" для веб-приложения создайте новый параметр приложения, который JAVA_OPTS
содержит другие параметры, например-Xms512m -Xmx1204m
.
В портал Azure в разделе "Параметры приложения" для веб-приложения создайте новый параметр приложения, который CATALINA_OPTS
содержит другие параметры, например-Xms512m -Xmx1204m
.
Чтобы настроить параметр приложения из подключаемого модуля Maven, добавьте теги "параметр/значение" в раздел подключаемого модуля Azure. В следующем примере задаются минимальный и максимальный размеры кучи для Java.
<appSettings>
<property>
<name>JAVA_OPTS</name>
<value>-Xms1024m -Xmx1024m</value>
</property>
</appSettings>
Примечание.
При использовании Tomcat в Windows Служба приложений не требуется создать файл web.config.
Разработчики, запускающие отдельное приложение в одном слоте развертывания в плане службы приложений, могут использовать следующие параметры.
- Экземпляры B1 и S1:
-Xms1024m -Xmx1024m
- Экземпляры B2 и S2:
-Xms3072m -Xmx3072m
- Экземпляры B3 и S3:
-Xms6144m -Xmx6144m
- Экземпляры P1v2:
-Xms3072m -Xmx3072m
- Экземпляры P2v2:
-Xms6144m -Xmx6144m
- Экземпляры P3v2:
-Xms12800m -Xmx12800m
- Экземпляры P1v3:
-Xms6656m -Xmx6656m
- Экземпляры P2v3:
-Xms14848m -Xmx14848m
- Экземпляры P3v3:
-Xms30720m -Xmx30720m
- Экземпляры I1:
-Xms3072m -Xmx3072m
- Экземпляры I2:
-Xms6144m -Xmx6144m
- Экземпляры I3:
-Xms12800m -Xmx12800m
- Экземпляры I1v2:
-Xms6656m -Xmx6656m
- Экземпляры I2v2:
-Xms14848m -Xmx14848m
- Экземпляры I3v2:
-Xms30720m -Xmx30720m
При настройке параметров кучи приложения просмотрите сведения о плане службы приложений и примите во внимание, что наличие нескольких приложений и одного слота развертывания требует оптимального выделения памяти.
Включение веб-сокетов
Включите для приложения поддержку веб-сокетов на портале Azure в разделе Параметры приложения. Чтобы параметр вступил в силу, необходимо перезапустить приложение.
Включите поддержку веб-сокетов с помощью Azure CLI, выполнив следующую команду.
az webapp config set --name <app-name> --resource-group <resource-group-name> --web-sockets-enabled true
Затем перезапустите приложение.
az webapp stop --name <app-name> --resource-group <resource-group-name>
az webapp start --name <app-name> --resource-group <resource-group-name>
Настройка кодировки по умолчанию
На портале Azure в разделе Параметры приложения для веб-приложения создайте параметр приложения JAVA_OPTS
со значением -Dfile.encoding=UTF-8
.
Можно также настроить параметр приложения с помощью подключаемого модуля Maven для службы приложений. Добавьте теги имени и значения параметра в конфигурацию подключаемого модуля.
<appSettings>
<property>
<name>JAVA_OPTS</name>
<value>-Dfile.encoding=UTF-8</value>
</property>
</appSettings>
Предварительная компиляция JSP-файлов
Чтобы повысить производительность приложений Tomcat, можно скомпилировать JSP-файлы перед развертыванием в службе приложений. Вы можете использовать подключаемый модуль Maven, предоставляемый Apache Sling, или использовать этот файла сборки Ant.
robots933456 в журналах
В журналах контейнера может отобразиться следующее сообщение:
2019-04-08T14:07:56.641002476Z "-" - - [08/Apr/2019:14:07:56 +0000] "GET /robots933456.txt HTTP/1.1" 404 415 "-" "-"
Это сообщение можно проигнорировать. /robots933456.txt
— это фиктивный URL-путь, с помощью которого Служба приложений проверяет, может ли контейнер обслуживать запросы. Ответ 404 означает, что путь не существует. При этом он информирует Службу приложений о том, что контейнер работоспособен и готов отвечать на запросы.
Выбор версии среды выполнения Java
Служба приложений позволяет пользователям выбрать основной номер версии виртуальной машины Java, например Java 8 или Java 11, а также номер исправления, например 1.8.0_232 или 11.0.5. Кроме того, можно выбрать автоматическое обновление номера исправления при появлении новых дополнительных версий. В большинстве случаев рабочие приложения должны использовать закрепленные версии JVM исправлений. Это предотвращает непредвиденные сбои во время автоматического обновления версии исправлений. Все веб-приложения Java используют 64-разрядные виртуальные машины JVM и не настраивается.
Если вы используете Tomcat, можно закрепить версию исправления Tomcat. На Windows версии исправления виртуальной машины Java и Tomcat можно закрепить независимо друг от друга. В Linux можно закрепить версию исправлений Tomcat; Версия исправления JVM также закреплена, но не настраивается отдельно.
Если вы решили закрепить дополнительную версию, необходимо периодически обновлять дополнительную версию JVM в приложении. Чтобы убедиться, что приложение выполняется на более новой дополнительной версии, создайте промежуточный слот и добавите дополнительную версию в промежуточном слоте. Убедившись, что приложение работает правильно в новой дополнительной версии, вы можете переключить промежуточные и рабочие слоты.
Запуск интерфейса командной строки JBoss
В сеансе SSH приложения JBoss можно запустить интерфейс командной строки JBoss с помощью следующей команды:
$JBOSS_HOME/bin/jboss-cli.sh --connect
В зависимости от того, где JBoss находится в жизненном цикле сервера, возможно, вы не сможете подключиться. Подождите несколько минут и повторите попытку. Этот подход полезен для быстрого проверки текущего состояния сервера (например, чтобы узнать, правильно ли настроен источник данных).
Кроме того, изменения, внесенные на сервер с помощью интерфейса командной строки JBoss в сеансе SSH, не сохраняются после перезапуска приложения. При каждом запуске приложения сервер JBoss EAP начинается с чистой установки. Во время жизненного цикла запуска Служба приложений выполняет необходимые конфигурации сервера и развертывает приложение. Чтобы внести любые постоянные изменения на серверЕ JBoss, используйте настраиваемый скрипт запуска или команду запуска. Полный пример см. в разделе "Настройка источников данных" для приложения Tomcat, JBoss или Java SE в службе приложение Azure.
Кроме того, можно вручную настроить Служба приложений для запуска любого файла при запуске. Например:
az webapp config set --resource-group <group-name> --name <app-name> --startup-file /home/site/scripts/foo.sh
Дополнительные сведения о командах CLI, которые можно выполнить, см. в следующих статье:
Кластеризация
Служба приложений поддерживает кластеризацию для JBoss EAP версии 7.4.1 и выше. Чтобы включить кластеризацию, веб-приложение должно быть интегрировано с виртуальной сетью. При интеграции веб-приложения с виртуальной сетью она перезапускается, а установка JBoss EAP автоматически запускается с кластеризованной конфигурацией. При запуске нескольких экземпляров с автомасштабированием экземпляры JBoss EAP взаимодействуют друг с другом по подсети, указанной в интеграции виртуальной сети. Кластеризацию можно отключить, создав параметр приложения с именем WEBSITE_DISABLE_CLUSTERING
и с любым значением.
Примечание.
Если вы включаете интеграцию виртуальной сети с шаблоном ARM, необходимо вручную задать для свойства vnetPrivatePorts
значение 2
. Если включить интеграцию виртуальной сети с помощью интерфейса командной строки или портала, это свойство устанавливается автоматически.
Если кластеризация включена, то экземпляры JBoss EAP используют протокол обнаружения FILE_PING JGroups для обнаружения новых экземпляров и сохранения сведений о кластере, таких как члены кластера, их идентификаторы и IP-адреса. В службе приложений эти файлы находятся в папке /home/clusterinfo/
. Первый экземпляр EAP для запуска получает разрешения на чтение и запись в файле членства в кластере. Другие экземпляры считывают файл, находят основной узел и координируется с этим узлом, который необходимо включить в кластер и добавить в файл.
Примечание.
Вы можете избежать времени ожидания кластеризации JBoss, очищая устаревшие файлы обнаружения во время запуска приложения.
Типы планов службы приложений "Премиум" версии 3 и "Изолированный" версии 2 также можно распределить по зонам доступности для повышения устойчивости и надежности критически важных для бизнеса рабочих нагрузок. Эта архитектура также называется избыточностью между зонами. Функция кластеризации JBoss EAP совместима с функцией избыточности зоны.
Правила автомасштабирования
При настройке правил автомасштабирования для горизонтального масштабирования важно удалять экземпляры постепенно (по одному за раз), чтобы каждый удаленный экземпляр может передавать свое действие (например, обработку транзакции базы данных) другому члену кластера. При настройке правил автомасштабирования на портале для уменьшения масштаба используйте следующие параметры:
- Операция: "Уменьшить количество на".
- Ожидание: "5 минут" или больше.
- Число экземпляров: 1.
Вам не нужно добавочно добавлять экземпляры (масштабирование), одновременно добавлять несколько экземпляров в кластер.
Планы службы приложений
JBoss EAP доступен в следующих ценовых категориях: F1, P0v3, P1mv3, P2mv3, P3mv3, P4mv3 и P5mv3.
Жизненный цикл сервера JBoss
Приложение JBoss EAP в Служба приложений проходит пять разных этапов перед запуском сервера.
- 1. Этап установки среды
- 2. Этап запуска сервера
- 3. Этап настройки сервера
- 4. Этап развертывания приложений
- 5. Этап перезагрузки сервера
Дополнительные сведения см. в соответствующих разделах, а также о возможностях его настройки (например, с помощью параметров приложения).
1. Этап установки среды
- Служба SSH запускается для включения безопасных сеансов SSH с контейнером.
- Хранилище ключей среды выполнения Java обновляется с помощью всех общедоступных и частных сертификатов, определенных в портал Azure.
- Общедоступные сертификаты предоставляются платформой в каталоге /var/ssl/certs, и они загружаются в $JRE_HOME/lib/security/cacerts.
- Частные сертификаты предоставляются платформой в каталоге /var/ssl/private directory, и они загружаются в $JRE_HOME/lib/security/client.jks.
- Если все сертификаты загружаются в хранилище ключей Java на этом шаге, свойства
javax.net.ssl.keyStore
javax.net.ssl.keyStorePassword
иjavax.net.ssl.keyStoreType
добавляются вJAVA_TOOL_OPTIONS
переменную среды. - Некоторые начальные конфигурации JVM определяются, такие как каталоги ведения журнала и параметры кучи памяти Java:
- Если вы предоставляете
–Xms
или–Xmx
флаги для памяти в параметреJAVA_OPTS
приложения, эти значения переопределяют те, которые предоставляются платформой. - При настройке параметра
WEBSITES_CONTAINER_STOP_TIME_LIMIT
приложения значение передается свойству среды выполненияorg.wildfly.sigterm.suspend.timeout
, которое управляет максимальным временем ожидания завершения работы (в секундах) при остановке JBoss.
- Если вы предоставляете
- Если приложение интегрировано с виртуальной сетью, среда выполнения Служба приложений передает список портов, которые будут использоваться для взаимодействия между серверами в переменной
WEBSITE_PRIVATE_PORTS
среды и запуска JBoss с помощьюclustering
конфигурации.standalone
В противном случае используется конфигурация.clustering
Для конфигурации используется файл конфигурации сервера standalone-azure-full-ha.xml.standalone
Для конфигурации используется файл конфигурации сервера standalone-full.xml.
2. Этап запуска сервера
- Если JBoss запускается в
clustering
конфигурации:- Каждый экземпляр JBoss получает внутренний идентификатор от 0 до количества экземпляров, в которых приложение масштабируется.
- Если некоторые файлы находятся в пути к хранилищу транзакций для этого экземпляра сервера (с помощью внутреннего идентификатора), это означает, что экземпляр сервера занимает место идентичного экземпляра службы, который произошел сбой ранее и оставил незафиксированные транзакции позади. Сервер настроен для возобновления работы с этими транзакциями.
- Независимо от того, запускается ли JBoss, начиная с
clustering
версии сервераstandalone
7.4 или более поздней, а среда выполнения использует Java 17, конфигурация обновляется, чтобы включить подсистему Elytron для обеспечения безопасности. - При настройке параметра
WEBSITE_JBOSS_OPTS
приложения значение передается в скрипт запуска JBoss. Этот параметр можно использовать для предоставления путей к файлам свойств и дополнительным флагам, влияющим на запуск JBoss.
3. Этап настройки сервера
- На начале этого этапа Служба приложений сначала ожидает как сервера JBoss, так и интерфейса администрирования для получения запросов перед продолжением. Это может занять несколько секунд, если Application Insights включена.
- Когда сервер JBoss и интерфейс администрирования готовы, Служба приложений выполняет следующие действия:
- Добавляет модуль
azure.appservice
JBoss, который предоставляет служебные классы для ведения журнала и интеграции с Служба приложений. - Обновляет средство ведения журнала консоли, чтобы использовать бесцветный режим, чтобы файлы журналов не были заполнены последовательности экранирования цветов.
- Настраивает интеграцию с журналами Azure Monitor.
- Обновляет IP-адреса привязки интерфейсов WSDL и управления.
- Добавляет модуль
azure.appservice.easyauth
JBoss для интеграции с проверкой подлинности Служба приложений и идентификатором Microsoft Entra. - Обновляет конфигурацию ведения журнала для журналов доступа и имя и смену файла журнала основного сервера.
- Добавляет модуль
- Если параметр
WEBSITE_SKIP_AUTOCONFIGURE_DATABASE
приложения не определен, Служба приложений URL-адреса JDBC autodetects в параметрах приложения Служба приложений. Если допустимые URL-адреса JDBC существуют для PostgreSQL, MySQL, MariaDB, Oracle, SQL Server или База данных SQL Azure, он добавляет соответствующие драйверы на сервер и добавляет источник данных для каждого URL-адреса JDBC и задает имя JNDI для каждого источникаjava:jboss/env/jdbc/<app-setting-name>_DS
данных, где<app-setting-name>
указано имя параметра приложения. clustering
Если конфигурация включена, проверяется средство ведения журнала консоли.- Если в каталоге /home/site/libs развернуты JAR-файлы, создается новый глобальный модуль со всеми этими JAR-файлами.
- В конце этапа Служба приложений запускает пользовательский скрипт запуска, если он существует. Логика поиска для пользовательского скрипта запуска следующим образом:
- Если вы настроили команду запуска (в портал Azure с помощью Azure CLI и т. д.), выполните ее; в противном случае
- Если путь /home/site/scripts/startup.sh существует, используйте его; в противном случае
- Если путь /home/startup.sh существует, используйте его.
Пользовательская команда запуска или скрипт запускается от имени корневого пользователя (не требуется sudo
), чтобы они могли устанавливать пакеты Linux или запускать интерфейс командной строки JBoss для выполнения дополнительных команд установки и настройки JBoss (создание источников данных, установка адаптеров ресурсов) и т. д. Сведения о командах управления пакетами Ubuntu см. в документации по Ubuntu Server. Сведения о командах интерфейса командной строки JBoss см. в руководстве по интерфейсу командной строки JBoss.
4. Этап развертывания приложений
Скрипт запуска развертывает приложения в JBoss, просматривая следующие расположения в порядке приоритета:
- Если вы настроили параметр
WEBSITE_JAVA_WAR_FILE_NAME
приложения, разверните файл, назначенный им. - Если существует /home/site/wwwroot/app.war , разверните его.
- Если в /home/site/wwwroot существуют другие ФАЙЛЫ EAR и WAR, разверните их.
- Если существует /home/site/wwwroot/webapps , разверните файлы и каталоги в нем. WAR-файлы развертываются как сами приложения, а каталоги развертываются как "взрывные" (несжатые) веб-приложения.
- Если какие-либо автономные страницы JSP существуют в файле /home/site/wwwroot, скопируйте их в корневой каталог веб-сервера и разверните их как одно веб-приложение.
- Если развертываемые файлы еще не найдены, разверните страницу приветствия по умолчанию (страницу парковки) в корневом контексте.
5. Этап перезагрузки сервера
- После завершения действий развертывания сервер JBoss перезагрузится, чтобы применить любые изменения, требующие перезагрузки сервера.
- После перезагрузки сервера приложение, развернутое на сервере JBoss EAP, должно быть готово к реагированию на запросы.
- Сервер запускается до тех пор, пока приложение Служба приложений не будет остановлено или перезапущено. Вы можете вручную остановить или перезапустить приложение Служба приложений или запустить перезапуск при развертывании файлов или внести изменения конфигурации в приложение Служба приложений.
- Если сервер JBoss завершает работу ненормально в
clustering
конфигурации, выполняется последняя функцияemit_alert_tx_store_not_empty
. Функция проверяет, оставил ли процесс JBoss файл хранилища транзакций nonempty на диске; Если это так, в консоли регистрируется ошибка:Error: finishing server with non-empty store for node XXXX
При запуске нового экземпляра сервера он ищет эти файлы хранилища транзакций nonempty для возобновления работы (см . 2). Этап запуска сервера).
Базовая конфигурация Tomcat
Примечание.
Этот раздел относится только к Linux.
Разработчики Java могут настраивать параметры сервера, устранять проблемы и развертывать приложения в Tomcat с уверенностью, если они знают о файле server.xml и конфигурации Tomcat. Возможные настройки:
- Настройка конфигурации Tomcat: понимая сведения о конфигурации server.xml и сведения о конфигурации Tomcat, можно точно настроить параметры сервера в соответствии с потребностями своих приложений.
- Отладка. При развертывании приложения на сервере Tomcat разработчики должны знать конфигурацию сервера для отладки любых проблем, которые могут возникнуть. Это включает проверку журналов сервера, изучение файлов конфигурации и выявление ошибок, которые могут возникнуть.
- Устранение неполадок Tomcat: неизбежно разработчики Java сталкиваются с проблемами с сервером Tomcat, такими как проблемы с производительностью или ошибки конфигурации. Понимая server.xml файл и сведения о конфигурации Tomcat, разработчики могут быстро диагностировать и устранять эти проблемы, что может сэкономить время и усилия.
- Развертывание приложений в Tomcat. Чтобы развернуть веб-приложение Java в Tomcat, разработчикам необходимо знать, как настроить файл server.xml и другие параметры Tomcat. Понимание этих сведений важно для успешного развертывания приложений и обеспечения плавной работы на сервере.
При создании приложения со встроенным tomcat для размещения рабочей нагрузки Java (WAR-файла или JAR-файла) существуют определенные параметры, которые вы получаете из поля для конфигурации Tomcat. Для получения подробных сведений см. официальную документацию по Apache Tomcat, включая конфигурацию по умолчанию для веб-сервера Tomcat.
Кроме того, существуют некоторые преобразования, которые применяются далее поверх server.xml распределения Tomcat при запуске. Это преобразования в параметры соединителя, узла и клапана.
Последние версии Tomcat имеют server.xml (8.5.58 и 9.0.38 далее). Старые версии Tomcat не используют преобразования и могут иметь другое поведение в результате.
Соединитель
<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
задано значение16384
URIEncoding
задано значениеUTF-8
conectionTimeout
имеет значениеWEBSITE_TOMCAT_CONNECTION_TIMEOUT
, для которого по умолчанию задано значение240000
maxThreads
имеет значениеWEBSITE_CATALINA_MAXTHREADS
, для которого по умолчанию задано значение200
maxConnections
имеет значениеWEBSITE_CATALINA_MAXCONNECTIONS
, для которого по умолчанию задано значение10000
Примечание.
Параметры connectionTimeout, maxThreads и maxConnections можно настроить с помощью параметров приложения.
Ниже приведены примеры команд CLI, которые можно использовать для изменения значений conectionTimeout, maxThreads или 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
- Соединитель использует адрес контейнера вместо 127.0.0.1
Хост
<Host appBase="${site.appbase}" xmlBase="${site.xmlbase}" unpackWARs="${site.unpackwars}" workDir="${site.tempdir}" errorReportValveClass="com.microsoft.azure.appservice.AppServiceErrorReportValve" name="localhost" autoDeploy="true">
appBase
имеет значениеAZURE_SITE_APP_BASE
, для которого по умолчанию задан локальныйWebappsLocalPath
xmlBase
имеет значениеAZURE_SITE_HOME
, для которого по умолчанию задано значение/site/wwwroot
unpackWARs
имеет значениеAZURE_UNPACK_WARS
, для которого по умолчанию задано значениеtrue
workDir
имеет значениеJAVA_TMP_DIR
, для которого задано значение по умолчаниюTMP
errorReportValveClass
использует наш настраиваемый клапан отчета об ошибках
Клапан
<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
имеет значениеAZURE_LOGGING_DIR
, для которого по умолчанию задано значениеhome\logFiles
maxDays
значениеWEBSITE_HTTPLOGGING_RETENTION_DAYS/>, значение которого по умолчанию 0
равно [навсегда]
В Linux она имеет одну и ту же настройку, а также:
Добавляет некоторые страницы ошибок и отчетов в клапан:
<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>
Следующие шаги
Посетите центр Azure для разработчиков Java, чтобы найти краткие руководства Azure, руководства и справочную документацию по Java.