Развертывание файлов в Службе приложений

В этой статье показано, как развернуть код в виде пакета ZIP, WAR, JAR или EAR в Службе приложений Azure. В ней также показано, как развертывать отдельные файлы в Службе приложений отдельно от пакета приложения.

Предварительные требования

Чтобы выполнить действия, описанные в этой статье, создайте приложение службы приложений или используйте приложение, созданное для другого руководства.

Если у вас еще нет подписки Azure, создайте бесплатную учетную запись Azure, прежде чем начинать работу.

Создание ZIP-пакета проекта

Примечание

Если файлы скачаны в виде ZIP-пакета, сначала извлеките их. Например, если вы скачали ZIP-пакет из GitHub, его нельзя развернуть "как есть". GitHub добавляет дополнительные вложенные каталоги, которые не работают со Службой приложений.

В окне терминала на локальном компьютере перейдите к корневому каталогу проекта приложения.

Этот каталог должен содержать файл записи веб-приложения, например index.html, index.php и app.js. Кроме того, в нем могут содержаться файлы управления пакетами, например project.json, composer.json, package.json, bower.json и requirements.txt.

Если вы не хотите, чтобы Служба приложений выполняла автоматизацию развертывания, выполните все задачи сборки (например npm, bower, gulp, composer и pip) и убедитесь, что у вас есть все файлы, необходимые для запуска приложения. Этот шаг является обязательным, если вы хотите запустить пакет напрямую.

Создайте ZIP-архив всего содержимого проекта. Для проектов dotnet эта папка является выходной папкой команды dotnet publish. При выполнении следующей команды в окне терминала используется инструмент по умолчанию:

# Bash
zip -r <file-name>.zip .

# PowerShell
Compress-Archive -Path * -DestinationPath <file-name>.zip

Развертывание ZIP-пакета

При развертывании ZIP-пакета Служба приложений распаковывает его содержимое, используя путь по умолчанию для приложения (D:\home\site\wwwroot в Windows, /home/site/wwwroot в Linux).

Развертывание из ZIP-пакета осуществляется с помощью той же службы Kudu, которая обеспечивает непрерывное развертывание на основе интеграции. Kudu поддерживает следующие возможности развертывания из ZIP-пакета:

  • удаление файлов, оставшихся после предыдущего развертывания;
  • включение процесса сборки по умолчанию, в том числе восстановления пакетов;
  • настройку развертывания, в том числе выполнение скриптов развертывания;
  • журналы развертывания.
  • Предельный размер пакета составляет 2048 МБ.

Дополнительные сведения см. в документации по Kudu.

Примечание

Файлы в ZIP-пакете копируются только в том случае, если их метки времени не совпадают с уже развернутыми. Создание ZIP-файла с помощью процесса сборки, который кэширует выходные данные, может привести к ускорению развертываний. Дополнительные сведения см. в статье Развертывание из ZIP-файла или URL-адреса.

Разверните ZIP-пакет для веб-приложения с помощью команды az webapp deploy. Команда CLI использует API публикации Kudu для развертывания файлов и является полностью настраиваемой.

В приведенном ниже примере ZIP-пакет отправляется на сайт. Укажите путь к локальному ZIP-пакету для --src-path.

az webapp deploy --resource-group <group-name> --name <app-name> --src-path <zip-package-path>

Эта команда перезапускает приложение после развертывания ZIP-пакета.

В зависимости от сетевой конфигурации ваших веб-приложений прямой доступ к сайту из вашей локальной среды может быть заблокирован. Чтобы развернуть код в этом сценарии, можно опубликовать свой ZIP-файл в системе хранения, доступной из веб-приложения, и дать команду приложению извлечь ZIP-файл из хранилища вместо передачи ZIP-файла в веб-приложение. См. эту статью по развертыванию защищенных веб-приложений в сети для получения дополнительной информации.

В приведенном ниже примере используется параметр --src-url, чтобы указать URL-адрес учетной записи хранения Azure, из которой сайт должен получить ZIP-файл.

az webapp deploy --resource-group <group-name> --name <app-name> --src-url "https://storagesample.blob.core.windows.net/sample-container/myapp.zip?sv=2021-10-01&sb&sig=slk22f3UrS823n4kSh8Skjpa7Naj4CG3

Включение автоматизации сборки для развертывания ZIP-пакета

По умолчанию подсистема развертывания предполагает, что ZIP-пакет готов к запуску в исходном виде и автоматизация сборки не используется. Чтобы разрешить ту же автоматизацию сборки, что и при развертывании Git, задайте параметр приложения SCM_DO_BUILD_DURING_DEPLOYMENT, выполнив в Cloud Shell следующую команду:

az webapp config appsettings set --resource-group <group-name> --name <app-name> --settings SCM_DO_BUILD_DURING_DEPLOYMENT=true

Дополнительные сведения см. в документации по Kudu.

Что происходит с моим приложением во время развертывания?

Все официально поддерживаемые методы развертывания вносят изменения в файлы в папке /home/site/wwwroot вашего приложения. Эти файлы используются для запуска приложения. Поэтому, возможно, не удастся выполнить развертывание из-за заблокированных файлов. Кроме того, из-за неодновременного обновления всех файлов приложение может вести себя непредсказуемо во время развертывания. Такое поведение нежелательно для приложения, с которым работают клиенты. Избежать этих проблем можно несколькими указанными ниже способами.

Развертывание пакетов WAR, JAR и EAR

Вы можете развернуть пакет WAR, JAR или EAR в Службе приложений, чтобы запустить веб-приложение Java с помощью Azure CLI, PowerShell или API публикации Kudu.

В ходе развертывания пакет правильно помещается на общий диск с файлами (см. справочник по API публикации Kudu). По этой причине развертывать пакеты WAR, JAR и EAR с помощью FTP или WebDeploy не рекомендуется.

Разверните WAR-пакет в Tomcat или JBoss EAP с помощью команды az webapp deploy. Укажите путь к локальному пакету Java для --src-path.

az webapp deploy --resource-group <group-name> --name <app-name> --src-path ./<package-name>.war

В зависимости от сетевой конфигурации ваших веб-приложений прямой доступ к сайту из вашей локальной среды может быть заблокирован. Чтобы развернуть код в этом сценарии, можно опубликовать свой ZIP-файл в системе хранения, доступной из веб-приложения, и дать команду приложению извлечь ZIP-файл из хранилища вместо передачи ZIP-файла в веб-приложение. См. эту статью по развертыванию защищенных веб-приложений в сети для получения дополнительной информации.

В приведенном ниже примере используется параметр --src-url, чтобы указать URL-адрес учетной записи хранения Azure, из которой веб-приложение должно получить ZIP-файл.

az webapp deploy --resource-group <group-name> --name <app-name> --src-url "https://storagesample.blob.core.windows.net/sample-container/myapp.war?sv=2021-10-01&sb&sig=slk22f3UrS823n4kSh8Skjpa7Naj4CG3

Команда CLI использует API публикации Kudu для развертывания пакетов и является полностью настраиваемой.

Развертывание отдельных файлов

Разверните скрипт запуска, библиотеку и статический файл в веб-приложении при помощи команды az webapp deploy с параметром --type.

Если скрипт запуска развернут таким образом, Служба приложений автоматически использует его для запуска приложения.

Команда CLI использует API публикации Kudu для развертывания файлов и является полностью настраиваемой.

Развертывание скрипта запуска

az webapp deploy --resource-group <group-name> --name <app-name> --src-path scripts/startup.sh --type=startup

Развертывание файла библиотеки

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

Развертывание статического файла

az webapp deploy --resource-group <group-name> --name <app-name> --src-path config.json --type=static

Справочник по API публикации Kudu

API publish в Kudu дает возможность задать в команде CLI те же параметры, что и в запросе URL-адреса. Для проверки подлинности с помощью API Kudu можно использовать обычную проверку подлинности с учетными данными для развертывания приложения.

В приведенной ниже таблице показаны доступные параметры запроса, их допустимые значения и описания.

Ключ Допустимые значения Описание Обязательно Тип
type war|jar|ear|lib|startup|static|zip Тип развертываемого артефакта. Он задает целевой путь по умолчанию и сообщает веб-приложению, как следует выполнять развертывание.
- type=zip: развертывание ZIP-пакета путем распаковки содержимого в /home/site/wwwroot. Параметр path указывать не обязательно.
- type=war: развертывание WAR-пакета. По умолчанию WAR-пакет развертывается в папке /home/site/wwwroot/app.war. Целевой путь можно указать с помощью параметра path.
- type=jar: развертывание пакета JAR в /home/site/wwwroot/app.jar. Параметр path игнорируется
- type=ear: развертывание пакета EAR в /home/site/wwwroot/app.ear. Параметр path игнорируется
- type=lib: развертывание файла библиотеки JAR. По умолчанию файл развертывается в папке /home/site/libs. Целевой путь можно указать с помощью параметра path.
- type=static: развертывание статического файла (например, скрипта). По умолчанию файл развертывается в папке /home/site/wwwroot.
- type=startup: развертывание скрипта, который Служба приложений автоматически использует для запуска приложения. По умолчанию скрипт развертывается в папке D:\home\site\scripts\<name-of-source> (в Windows) или home/site/wwwroot/startup.sh (в Linux). Целевой путь можно указать с помощью параметра path.
Да Строка
restart true|false По умолчанию API перезапускает приложение после операции развертывания (restart=true). Чтобы развернуть несколько артефактов, предотвратите перезапуск во всех развертываниях, кроме последнего, задав параметр restart=false. Нет Логическое
clean true|false Указывает, следует ли очистить (удалить) целевое развертывание, прежде чем развертывать артефакт в этом расположении. Нет Логическое
ignorestack true|false API публикации использует переменную среды WEBSITE_STACK, чтобы выбрать безопасные значения по умолчанию в зависимости от языкового стека сайта. Задав для этого параметра значение false, можно отключить параметры по умолчанию, связанные с языком. Нет Логическое
path "<absolute-path>" Абсолютный путь для развертывания артефакта. Например, "/home/site/deployments/tools/driver.jar", "/home/site/scripts/helper.sh". нет Строка

Дальнейшие действия

Чтобы изучить более сложные сценарии развертывания, ознакомьтесь с развертыванием в Azure с помощью Git. Развертывание в Azure на основе Git обеспечивает систему управления версиями, восстановление пакета, MSBuild и многое другое.

Дополнительные ресурсы