Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье показана наиболее распространенная конфигурация развертывания и среды выполнения для приложений Java в Службе приложений Azure. Если вы впервые используете службу приложений Azure, сначала ознакомьтесь с кратким руководством по Java. Вы можете найти ответы на общие вопросы об использовании службы приложений, которые не относятся к разработке Java в службе приложений.
Служба приложений Azure запускает веб-приложения Java на полностью управляемой платформе в трех вариантах.
- Java Standard Edition (SE): может запускать приложение, развернутое в виде пакета JAR-файла Java, содержащего внедренный сервер (например, Spring Boot, Quarkus, Dropwizard или приложение с внедренным сервером Tomcat или Jetty).
- Tomcat: встроенный сервер Tomcat может запускать приложение, развернутое в виде пакета WAR (веб-архива).
- Платформа корпоративных приложений JBoss (EAP): встроенный сервер JBoss EAP может запускать приложение, развернутое как пакет WAR или корпоративного архива (EAR). Поддерживается для приложений Linux в наборе ценовых категорий, включая Бесплатная, Премиум v3 и Изолированная v2.
Отображение версии Java
Чтобы отобразить текущую версию Java, выполните следующую команду в Azure 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"
Получение версии Java в контейнере Linux
Для получения более подробной информации о версии в контейнере Linux откройте сеанс SSH с контейнером. Ниже приведены несколько примеров того, что можно запустить.
Чтобы просмотреть версию Java в сеансе SSH, выполните следующие действия.
java -version
Чтобы просмотреть версию сервера Tomcat в сеансе SSH, выполните следующие действия.
sh /usr/local/tomcat/version.sh
Или, если сервер Tomcat находится в пользовательском расположении, найдите version.sh
с помощью:
find / -name "version.sh"
Чтобы просмотреть версию сервера JBoss EAP в сеансе SSH:
$JBOSS_HOME/bin/jboss-cli.sh --connect --commands=:product-info
Дополнительные сведения о поддержке версий см. в разделе Политика поддержки времени выполнения языков в службе приложений.
Что происходит с устаревшими средами выполнения в сервисе приложений?
Устаревшие среды выполнения сняты с поддержки поддерживающей организацией или имеют значительные уязвимости. Соответственно, они удаляются из страниц создания и настройки на портале. Если устаревшая среда выполнения скрыта на портале, любое приложение, которое по-прежнему используется этой средой выполнения, продолжает выполняться.
Если вы хотите создать приложение с устаревшей версией среды выполнения, которая больше не отображается на портале, используйте Azure CLI, шаблон ARM или Bicep. Эти варианты развертывания позволяют создавать устаревшие среды выполнения, которые были удалены на портале, но по-прежнему поддерживаются.
Если среда выполнения полностью удалена из платформы службы приложений, владелец подписки Azure получает уведомление по электронной почте перед удалением.
Развертывание приложения
Инструменты сборки
Мейвен
Используя плагин Maven для веб-приложений 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 (IDEs), в том числе:
- VS Code: веб-приложения Java с Помощью Visual Studio Code.
- IntelliJ IDEA: создание веб-приложения Hello World для службы приложений Azure с помощью IntelliJ.
- Интегрированная среда разработки Eclipse. Создание веб-приложения Hello World для службы приложений Azure с помощью Eclipse.
API Kudu
Чтобы развернуть файлы Java-архива (JAR) в среде Java SE, используйте конечную точку /api/publish
сайта Kudu. Дополнительные сведения об этом API см. в этой документации.
Примечание.
Приложение JAR должно быть названо app.jar
для службы приложений для идентификации и запуска приложения.
Подключаемый модуль Maven автоматически присваивает приложению имя во время развертывания. Если вы не хотите переименовывать ваш JAR-файл в app.jar
, вы можете загрузить скрипт оболочки, который содержит команду для запуска вашего JAR-приложения. Вставьте абсолютный путь к этому скрипту в текстовое поле "Файл запуска " в разделе "Конфигурация " портала. Скрипт запуска не запускается из каталога, в который он находится. Поэтому всегда используйте абсолютные пути для создания ссылок на файлы в скрипте запуска (например, java -jar /home/myapp/myapp.jar
).
Чтобы развернуть WAR-файлы в Tomcat, используйте конечную точку /api/wardeploy/
, чтобы загрузить ваш архивный файл POST
. Дополнительные сведения об этом API см. в этой документации.
Чтобы развернуть WAR-файлы в JBoss EAP, используйте конечную точку /api/wardeploy/
в POST
архивный файл. Дополнительные сведения об этом 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 EAP также предоставляет модуль для перенаправления запросов.
Ведение журнала и отладка приложений
Отчеты о производительности, визуализация трафика и проверка работоспособности доступны на портале 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
. Для недавно созданных приложений используйте https://<app-name>-<random-hash>.scm.<region>.azurewebsites.net/
.
Дополнительные сведения см. в разделе Потоковая передача журналов в Cloud Shell.
Доступ к консоли SSH в Linux
Чтобы открыть прямой сеанс SSH с контейнером, ваше приложение должно быть запущено.
Вставьте следующий URL-адрес в браузер и замените <имя> приложения именем приложения:
https://<app-name>.scm.azurewebsites.net/webssh/host
Если вы не прошли аутентификацию, это потребуется сделать, подключившись с помощью подписки Azure. После аутентификации вы увидите оболочку в браузере, где можно запускать команды внутри контейнера.
Примечание.
Все изменения, внесенные за пределами /home
каталога, хранятся в самом контейнере и не сохраняются после перезапуска приложения.
Чтобы открыть удаленный сеанс SSH на локальном компьютере см. инструкцию в разделе Открытие сеанса SSH из удаленной оболочки.
Средства устранения неполадок Linux
Встроенные образы Java основаны на операционной системе Alpine Linux. Используйте диспетчер пакетов apk
, чтобы установить любые средства или команды для устранения неполадок.
Профилировщик Java
Все среды выполнения Java в Службе приложений Azure поставляются с Регистратором Полетов Java Development Kit (JDK) для профилирования рабочих нагрузок Java. Его можно использовать для записи событий виртуальной машины Java (JVM), системных и приложений, а также для устранения неполадок в приложениях.
Дополнительные сведения о профилировщике Java см. в документации по Azure Application Insights.
Записыватель полетов Java
Все среды выполнения Java на службе приложений оснащены Java Flight Recorder. Его можно использовать для записи событий JVM, системы и приложений, а также для устранения неполадок в приложениях Java.
Подключитесь по 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 и создает файл Java Flight Recorder (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 Flight Recorder для непрерывного профилирования вашего 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 (JMC). Инструкции по использованию Java Mission Control см. в документации по JMC и инструкциям по установке.
Ведение журнала приложений
Чтобы настроить службу приложений для записи выходных данных стандартной консоли приложения и стандартных потоков ошибок консоли в локальную файловую систему или хранилище BLOB-объектов Azure, выполните указанные ниже действия. Включите ведение журнала приложений на портале Azure или в Azure CLI. Если требуется более длительное хранение, настройте приложение для записи выходных данных в контейнер хранилища BLOB-объектов.
Логи вашего приложения Java и Tomcat можно найти в каталоге /home/LogFiles/Application/
.
Ведение журнала хранилища BLOB-объектов Azure для приложений под управлением Linux можно настроить только с помощью Azure Monitor.
Если приложение использует Logback или Log4j для трассировки, эти трассировки можно перенаправить в Azure Application Insights. Используйте инструкции по настройке системы журналирования в Application Insights.
Примечание.
Из-за известной уязвимости CVE-2021-44228
обязательно используйте Log4j версии 2.16 или более поздней.
Настройка
Служба приложений Azure поддерживает готовую настройку и индивидуализацию через портал Azure и Azure CLI. Ознакомьтесь со следующими статьями о настройке конкретных веб-приложений не на платформе Java:
- Настройка параметров приложения
- Настройка личного домена
- Настройка привязок TLS/SSL
- Добавление CDN
- Настройка сайта Kudu
Локальное копирование содержимого приложения
Задайте параметр JAVA_COPY_ALL
приложения на true
, чтобы скопировать содержимое вашего приложения в локальную рабочую среду с общей файловой системы. Этот параметр помогает устранить проблемы с блокировкой файлов.
Настройка параметров среды выполнения Java
Чтобы настроить выделенную память или другие параметры среды выполнения виртуальной машины Java, создайте параметр приложения с именем JAVA_OPTS
с параметрами. При запуске служба приложений передает этот параметр как переменную среды в среду выполнения 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.
По умолчанию служба приложений устанавливает размер кучи JVM Max 70% общего объема памяти, доступной для плана службы приложений. Чтобы отключить параметр по умолчанию, можно использовать параметр приложения WEBSITE_DISABLE_JAVA_HEAP_CONFIGURATION="true".
Повышение производительности приложения на платформе может включать настройку размера кучи в соответствии с конкретными потребностями. При настройке параметров кучи приложений просмотрите сведения о плане службы приложений и рассмотрите требования нескольких приложений и слотов развертывания, чтобы найти оптимальное выделение памяти.
Включите веб-сокеты
Включите для приложения поддержку веб-сокетов на портале 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.
Игнорировать сообщение робота933456 в журналах
В журналах контейнеров может появиться следующее сообщение:
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
Служба приложений позволяет пользователям выбирать основную версию JVM, например Java 8 или Java 11, а также версию исправления, например 1.8.0_232 или 11.0.5. Вы также можете настроить автоматическое обновление версии патча, когда станут доступны новые дополнительные версии. В большинстве случаев производственные приложения должны использовать пинованные исправленные версии JVM, которые предотвращают непредвиденные сбои во время автоматического обновления исправленных версий. Все веб-приложения Java используют 64-разрядные виртуальные машины Java (JVM) и не настраиваются.
Если вы используете Tomcat, можно закрепить версию исправления Tomcat. На Windows версии исправления виртуальной машины Java и Tomcat можно закрепить независимо друг от друга. В Linux можно закрепить патч-версию Tomcat. Патч-версия JVM также закреплена, но не настраивается отдельно.
Если вы решили закрепить дополнительную версию, необходимо периодически обновлять дополнительную версию JVM в приложении. Чтобы убедиться, что приложение выполняется на более новой дополнительной версии, создайте промежуточный слот и добавите дополнительную версию в промежуточном слоте. Убедившись, что приложение работает правильно в новой дополнительной версии, вы можете переключить промежуточные и рабочие слоты.
Запуск интерфейса командной строки JBoss
В сеансе SSH приложения JBoss EAP можно запустить интерфейс командной строки JBoss с помощью следующей команды:
$JBOSS_HOME/bin/jboss-cli.sh --connect
В зависимости от того, где JBoss EAP находится в жизненном цикле сервера, возможно, вы не сможете подключиться. Подождите несколько минут и повторите попытку. Этот подход полезен для быстрого проверки текущего состояния сервера (например, чтобы узнать, правильно ли настроен источник данных).
Кроме того, изменения, внесенные на сервер с помощью интерфейса командной строки JBoss в сеансе SSH, не сохраняются после перезапуска приложения. При каждом запуске приложения сервер JBoss EAP начинается с чистой установки. Во время жизненного цикла запуска Служба приложений выполняет необходимые конфигурации сервера и развертывает приложение. Чтобы внести любые постоянные изменения на серверЕ JBoss EAP, используйте пользовательский скрипт запуска или команду запуска. Полный пример см. в разделе "Настройка источников данных" для приложения Java SE, Tomcat или JBoss EAP в службе приложений 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 EAP, очищая устаревшие файлы обнаружения.
Типы планов службы приложений уровня "Премиум" версии 3 и "Изолированный" версии 2 могут быть распределены по зонам доступности для повышения устойчивости и надежности рабочих нагрузок, критически важных для бизнеса. Эта архитектура также называется избыточностью между зонами. Функция кластеризации JBoss EAP совместима с функцией зональной избыточности.
Правила автомасштабирования
При настройке правил автомасштабирования для горизонтального масштабирования важно постепенно удалять экземпляры (по одному за разом), чтобы каждый удаленный экземпляр смог передать свое действие (например, обработку транзакции базы данных) другому члену кластера. При настройке правил автомасштабирования на портале для уменьшения масштаба используйте следующие параметры:
- Операция: "Уменьшить число на"
- Остывание: "5 минут" или больше.
- Число экземпляров: 1.
Вам не нужно добавочно добавлять экземпляры (масштабирование). Одновременно можно добавить несколько экземпляров в кластер.
Планы службы приложений
JBoss EAP доступен в следующих ценовых категориях: F1, P0v3, P1mv3, P2mv3, P3mv3, P4mv3 и P5mv3.
Жизненный цикл сервера JBoss EAP
Приложение JBoss EAP в службе приложений проходит пять отдельных этапов перед запуском сервера:
- Этап настройки среды
- Этап запуска сервера
- Этап настройки сервера
- Этап развертывания приложений
- Этап перезагрузки сервера
Дополнительные сведения и возможности настройки (например, с помощью параметров приложения) см. в следующих разделах.
1. Этап установки среды
- Служба SSH запускается для включения безопасных сеансов SSH с контейнером.
- Хранилище ключей среды выполнения Java обновляется с помощью всех общедоступных и частных сертификатов, определенных на портале Azure.
- Общедоступные сертификаты предоставляются платформой в каталоге
/var/ssl/certs
и загружаются в$JRE_HOME/lib/security/cacerts
. - Частные сертификаты предоставляются платформой в каталоге
/var/ssl/private
и загружаются в$JRE_HOME/lib/security/client.jks
.
- Общедоступные сертификаты предоставляются платформой в каталоге
- Если все сертификаты загружаются в хранилище ключей Java на этом шаге, свойства
javax.net.ssl.keyStore
javax.net.ssl.keyStorePassword
иjavax.net.ssl.keyStoreType
добавляются вJAVA_OPTS
переменную среды. - Определяется некоторая начальная конфигурация JVM, например каталоги ведения журнала и параметры кучи памяти Java:
- Если вы предоставляете
–Xms
или–Xmx
флаги для памяти в параметреJAVA_OPTS
приложения, эти значения переопределяют те, которые предоставляются платформой. - При настройке параметра
WEBSITES_CONTAINER_STOP_TIME_LIMIT
приложения значение передается свойствуorg.wildfly.sigterm.suspend.timeout
среды выполнения, которое управляет максимальным временем ожидания завершения работы (в секундах) при остановке JBoss EAP.
- Если вы предоставляете
- Если приложение интегрировано с виртуальной сетью, среда выполнения Службы приложений передает список портов, которые будут использоваться для взаимодействия между серверами в переменной
WEBSITE_PRIVATE_PORTS
среды и запускает JBoss EAP с помощьюclustering
конфигурации. В противном случае используется конфигурацияstandalone
.-
clustering
Для конфигурации используется файлstandalone-azure-full-ha.xml
конфигурации сервера. -
standalone
Для конфигурации используется файлstandalone-full.xml
конфигурации сервера.
-
2. Этап запуска сервера
- Если JBoss EAP запускается в
clustering
конфигурации:- Каждому экземпляру JBoss EAP назначается внутренний идентификатор в диапазоне от 0 до количества экземпляров, на которые приложение масштабируется.
- Если некоторые файлы находятся в пути хранилища транзакций для этого экземпляра сервера (с помощью внутреннего идентификатора), это означает, что экземпляр сервера занимает место идентичного экземпляра службы. Другой экземпляр службы ранее вышел из строя и оставил за собой незафиксированные транзакции. Сервер настроен для возобновления работы с этими транзакциями.
- Независимо от того, запускается ли JBoss EAP в
clustering
илиstandalone
конфигурации, если сервер версии 7.4 или более поздней, а среда выполнения использует Java 17, конфигурация обновляется, чтобы включить подсистему Elytron для обеспечения безопасности. - При настройке параметра
WEBSITE_JBOSS_OPTS
приложения значение передается в скрипт запуска JBoss. Этот параметр можно использовать для предоставления путей к файлам свойств и дополнительным флагам, влияющим на запуск JBoss EAP.
3. Этап настройки сервера
В начале этого этапа служба приложений сначала ожидает, пока и сервер JBoss EAP, и интерфейс администрирования не будут готовы принять запросы, перед тем как продолжить. Этот процесс может занять несколько секунд, если Application Insights включен.
Когда сервер JBoss EAP и интерфейс администрирования готовы, служба приложений выполняет следующие действия:
- Добавляет модуль
azure.appservice
JBoss EAP, который предоставляет служебные классы для ведения журнала и интеграции с службой приложений. - Обновляет средство ведения журнала консоли, чтобы оно работало в бесцветном режиме. Это предотвращает заполнение файлов журналов последовательностями экранирования цветов.
- Настраивает интеграцию с журналами Azure Monitor.
- Обновляет IP-адреса привязки языков описания веб-служб (WSDL) и интерфейсов управления.
- Добавляет модуль
azure.appservice.easyauth
JBoss EAP для интеграции с проверкой подлинности службы приложений и идентификатором Microsoft Entra. - Обновляет конфигурацию журналов доступа, а также имя и ротацию файла логов основного сервера.
- Добавляет модуль
Если параметр
WEBSITE_SKIP_AUTOCONFIGURE_DATABASE
приложения не определен, Служба приложений автоматически обнаруживает URL-адреса подключения к базе данных Java (JDBC) в параметрах приложения. Если допустимые URL-адреса JDBC существуют для PostgreSQL, MySQL, MariaDB, Oracle, SQL Server или Базы данных SQL Azure, он добавляет соответствующие драйверы на сервер, добавляет источник данных для каждого URL-адреса JDBC и задает имя интерфейса JNDI Java для каждого источника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 EAP, таких как создание источников данных и установка адаптеров ресурсов. Сведения о командах управления пакетами Ubuntu см. в документации по Ubuntu Server. Сведения о командах интерфейса командной строки JBoss см. в руководстве по интерфейсу командной строки JBoss.
4. Этап развертывания приложений
Стартовый скрипт развертывает приложения в JBoss EAP, просматривая следующие расположения в порядке убывания приоритета.
- Если вы настроили параметр
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 EAP перезагрузится, чтобы применить любые изменения, требующие перезагрузки сервера.
- После перезагрузки сервера приложения, развернутые на сервере JBoss EAP, должны быть готовы к реагированию на запросы.
- Сервер запускается до тех пор, пока приложение Служба приложений не будет остановлено или перезапущено. Вы можете вручную остановить или перезапустить приложение Служба приложений или запустить перезапуск при развертывании файлов или внести изменения конфигурации в приложение Служба приложений.
- Если сервер JBoss EAP завершает работу нештатно в
clustering
конфигурации, выполняется заключительная функцияemit_alert_tx_store_not_empty
. Функция проверяет, оставил ли процесс JBoss EAP файл хранилища транзакций с содержимым на диске. Если это так, в консоли регистрируется ошибка:Error: finishing server with non-empty store for node XXXX
При запуске нового экземпляра сервера он ищет эти непустые файлы хранилища транзакций для возобновления работы (см. 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
. -
connectionTimeout
установлено наWEBSITE_TOMCAT_CONNECTION_TIMEOUT
, которое по умолчанию240000
. -
maxThreads
установлено наWEBSITE_CATALINA_MAXTHREADS
, которое по умолчанию равно200
. -
maxConnections
имеет значениеWEBSITE_CATALINA_MAXCONNECTIONS
, которое по умолчанию равно10000
.
Примечание.
Параметры connectionTimeout
, maxThreads
и maxConnections
можно настроить через настройки приложения.
Ниже приведены примеры команд CLI, которые можно использовать для изменения значений connectionTimeout
, 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
, для которого по умолчанию задано значение localWebappsLocalPath
. -
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
, которое по умолчанию устанавливается на7
. Это значение соответствует платформе ведения журнала приложений по умолчанию.
В 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.