Развертывание приложений ASP.NET Core в Службе приложений Azure

Служба приложений Azure — это платформа облачных вычислений Microsoft, предназначенная для размещения веб-приложений, включая ASP.NET Core.

Надежные шаблоны веб-приложений

См . статью "Шаблон надежных веб-приложений" for.NETвидео и статьи YouTube по созданию современного, надежного, производительного, тестового, экономичного и масштабируемого приложения ASP.NET Core, будь то с нуля или рефакторинг существующего приложения.

Полезные ресурсы

Документация по службе приложений — это место, где хранятся документация, учебники, примеры, руководства и другие ресурсы, связанные с приложениями Azure. Размещению приложений ASP.NET Core посвящены следующие два руководства.

Создание веб-приложения ASP.NET Core в Azure
Создайте веб-приложение ASP.NET Core и разверните его в службе приложений Azure на базе Windows с помощью Visual Studio.

Создание приложения ASP.NET Core в Службе приложений в Linux
Создайте веб-приложение ASP.NET Core и разверните его в службе приложений Azure на базе Linux с помощью командной строки.

Версию ASP.NET Core, доступную в службе приложений, см. в разделе ASP.NET Core на панели мониторинга службы приложений.

Подпишитесь на репозиторий объявлений о Службе приложений и следите за объявлениями о проблемах. Команда Службы приложений регулярно публикует объявления и сценарии, которые готовятся к выпуску в Службе приложений.

Следующие статьи входят в документацию по ASP.NET Core.

Публикация приложения ASP.NET Core в Azure с помощью Visual Studio
Сведения о публикации приложения ASP.NET Core в службе приложений Azure с помощью Visual Studio.

Создание первого конвейера
Сведения о настройке сборки CI для приложения ASP.NET Core и последующем создании выпуска непрерывного развертывания в службе приложений Azure.

Песочница веб-приложений Azure
Сведения об ограничениях среды выполнения службы приложений Azure, создаваемых платформой приложений Azure.

Устранение неполадок и отладка проектов ASP.NET Core
Устранение неполадок при возникновении ошибок и предупреждений в проектах ASP.NET Core.

Конфигурация приложений

Платформа

Если приложение Службы приложений размещено в среде вычислений серии A (цен. категории "Базовый") или на более высоком уровне, архитектура платформы приложения (x86 или x64) задается в его параметрах на портале Azure. Убедитесь, что параметры публикации приложения, например в профиле публикации Visual Studio (.pubxml), соответствуют параметрам в конфигурации службы приложения на портале Azure.

Среды выполнения для 64-разрядных (x64) и 32-разрядных (x86) приложений находятся в Службе приложений Azure. Пакет SDK для .NET Core, доступный в Службе приложений, является 32-разрядным, но вы можете развертывать созданные локально 64-разрядные приложения с помощью консоли Kudu или процесса публикации в Visual Studio. Дополнительные сведения см. в разделе Публикация и развертывание приложения.

Среды выполнения для 32-разрядных (x86) приложений с собственными зависимостями находятся в Службе приложений Azure. Пакет SDK для .NET Core, доступный в Службе приложений, является 32-разрядным.

Дополнительные сведения о компонентах и методах распространения платформы .NET Core, таких как сведения о среде выполнения .NET Core и пакете SDK для .NET Core, см. в разделе о .NET Core: Композиция.

Пакеты

Включите следующие пакеты NuGet, чтобы использовать возможности автоматического ведения журнала для приложений, развернутых в Службе приложений Azure:

  • Microsoft.AspNetCore.AzureAppServices.HostingStartup использует IHostingStartup для интеграции ведения журналов ASP.NET Core со Службой приложений Azure. Пакет Microsoft.AspNetCore.AzureAppServicesIntegration включает дополнительные функции для ведения журналов.
  • Microsoft.AspNetCore.AzureAppServicesIntegration выполняет AddAzureWebAppDiagnostics для добавления поставщиков ведения журналов диагностики из Службы приложений Azure в пакет Microsoft.Extensions.Logging.AzureAppServices.
  • Microsoft.Extensions.Logging.AzureAppServices предоставляет реализации средства ведения журналов в поддержку журналов диагностики службы приложений Azure и функций потоковой передачи журналов.

Приведенные выше пакеты должны быть явно указаны в файле проекта приложения.

Переопределение конфигурации приложения с помощью портала Azure

Параметры приложений на портале Azure позволяют задать переменные среды для приложения. Переменные среды могут использоваться поставщиком конфигураций переменных среды.

Когда вы создаете или изменяете параметр приложения на портале Azure, при нажатии кнопки Сохранить происходит перезапуск приложения Azure. Переменная среды доступна в приложении после перезапуска службы.

Если приложение использует универсальный узел, переменные среды загружаются в конфигурацию приложения, когда метод CreateDefaultBuilder вызывается для создания узла. Дополнительные сведения см. в статье Универсальный узел .NET в ASP.NET Core и разделе Поставщик конфигурации переменных среды.

Параметры приложений на портале Azure позволяют задать переменные среды для приложения. Переменные среды могут использоваться поставщиком конфигураций переменных среды.

Когда вы создаете или изменяете параметр приложения на портале Azure, при нажатии кнопки Сохранить происходит перезапуск приложения Azure. Переменная среды доступна в приложении после перезапуска службы.

Если приложение использует веб-узел, переменные среды загружаются в конфигурацию приложения, когда метод CreateDefaultBuilder вызывается для создания узла. Дополнительные сведения см. в статье Веб-узел .NET в ASP.NET Core и разделе Поставщик конфигурации переменных среды.

Сценарии использования прокси-сервера и подсистемы балансировки нагрузки

ПО промежуточного слоя для интеграции IIS, которое настраивает ПО промежуточного слоя переадресации заголовков при размещении вне процесса, и модуль ASP.NET Core настраиваются на пересылку схемы (HTTP/HTTPS) и удаленного IP-адреса расположения, где был сформирован запрос. Для приложений, размещенных за дополнительными прокси-серверами и подсистемами балансировки нагрузки, может потребоваться дополнительная настройка. Дополнительные сведения см. в разделе Настройка ASP.NET Core для работы с прокси-серверами и подсистемами балансировки нагрузки.

Мониторинг и ведение журналов

Приложения ASP.NET Core, развернутые в Службе приложений, автоматически получают расширение Службы приложений для интеграции ведения журналов ASP.NET Core. Это расширение обеспечивает интеграцию ведения журналов для приложений ASP.NET Core, развернутых в Службе приложений Azure.

Приложения ASP.NET Core, развернутые в Службе приложений автоматически, получают расширение службы приложений и расширения для ведения журналов ASP.NET Core. Это расширение обеспечивает интеграцию ведения журналов для приложений ASP.NET Core, развернутых в Службе приложений Azure.

Сведения о мониторинге, ведении журналов, а также поиске и устранении неполадок см. в следующих статьях.

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

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

Обработка ошибок в ASP.NET Core
Сведения об основных методах обработки ошибок в приложениях ASP.NET Core.

Устранение неполадок ASP.NET Core в службе приложение Azure и IIS
Сведения о диагностике проблем с развертыванием приложений ASP.NET Core в службе приложений Azure.

Устранение распространенных неполадок в Службе приложений Azure и службах IIS с помощью ASP.NET Core
См. распространенные ошибки с конфигурацией развертывания для приложений, размещенных в службе приложений Azure/IIS, и рекомендации по их устранению.

Связка ключей для защиты данных и слоты развертывания

Ключи для защиты данных хранятся в папке %HOME%\ASP.NET\DataProtection-Keys. Эта папка копируется в сетевое хранилище и синхронизируется на всех машинах, где размещается приложение. Во время хранения ключи не защищаются. В этой папке хранится связка ключей для всех экземпляров приложения в одном и том же слоте развертывания. Отдельные слоты развертывания, такие как промежуточное хранение и производство, не используют общую связку ключей.

При переключении между разными слотами развертывания ни одна система с использованием защиты данных не сможет расшифровать хранимые данные, используя связку ключей из предыдущего слота. Для защиты файлов cookie ПО промежуточного слоя ASP.NET Cookie использует защиту данных. В результате пользователей, применяющих ПО промежуточного слоя ASP.NET Cookie, выбрасывает из приложения. Для того чтобы решение связки ключей не зависело от слота, используйте внешнего поставщика связки ключей, например:

  • Хранилище BLOB-объектов Azure
  • Azure Key Vault
  • Хранилище SQL;
  • Кэш Redis

Дополнительные сведения см. в статье Поставщики хранилища ключей в ASP.NET Core.

Развертывание приложения ASP.NET Core, использующего предварительную версию .NET Core

Сведения о развертывании приложения, использующего предварительную версию .NET Core, см. в следующих ресурсах. Эти способы также используются в случаях, когда среда выполнения доступна, но пакет SDK не установлен в Службе приложений Azure.

Версию ASP.NET Core, доступную в службе приложений, см. в разделе ASP.NET Core на панели мониторинга службы приложений.

Сведения о выборе версии пакета SDK для .NET для автономных развертываний см. в статье Выбор версии .NET для использования.

Указание версии пакета SDK для .NET Core с помощью Azure Pipelines

Используйте сценарии CI/CD Службы приложений Azure, чтобы настроить сборку с непрерывной интеграцией с помощью Azure DevOps. Создав сборку Azure DevOps, при необходимости настройте ее для использования определенной версии пакета SDK.

Указание версии пакета SDK для .NET Core

Если используется центр развертывания Службы приложений для создания сборки Azure DevOps, конвейер сборки по умолчанию включает шаги для Restore, Build, Test и Publish. Чтобы указать версию пакета SDK, нажмите кнопку Добавить (+) в списке заданий агента для добавления нового шага. Найдите пакет SDK для .NET Core, используя строку поиска.

Add the .NET Core SDK step

Переместите шаг на первое место в конвейере сборки, чтобы в следующих шагах использовалась указанная версия пакета SDK для .NET Core. Укажите версию пакета SDK для .NET Core. В этом примере для пакета SDK мы укажем версию 3.0.100.

Completed SDK step

Чтобы опубликовать автономное развертывание (SCD), настройте SCD на шаге Publish и укажите идентификатор среды выполнения (RID).

Self-contained publish

Развертывание автономного приложения для предварительной версии

Объект автономного развертывания (SCD), который предназначен для предварительной версии среды выполнения, включает в развертывание среду выполнения предварительной версии.

При развертывании автономного приложения:

Следуйте указаниям в разделе Развертывание автономного приложения.

Использование Docker с веб-приложениями для контейнеров

Центр Docker содержит последние предварительные версии образов Docker https://hub.docker.com/_/microsoft-dotnet . Их можно использовать в качестве базового образа. Использование образа и развертывание в веб-приложениях для контейнеров выполняется как обычно.

Установка расширения сайта предварительной версии

Если у вас возникли проблемы при использовании расширения сайта предварительной версии, создайте запрос dotnet/AspNetCore.

  1. Перейдите в Службу приложений на портале Azure.
  2. Выберите веб-приложение.
  3. В поле поиска введите "ex" для фильтрации расширений ("Extensions") или прокрутите вниз список инструментов управления.
  4. Выберите Расширения.
  5. Выберите Добавить.
  6. Выберите в списке расширение Среда выполнения ASP.NET Core {X.Y} ({x64|x86}), где {X.Y} — это предварительная версия ASP.NET Core, а {x64|x86} — платформа.
  7. Для принятия условий нажмите кнопку ОК.
  8. Нажмите OK, чтобы установить расширение.

По завершении операции устанавливается последняя предварительная версия .NET Core. Проверьте установку:

  1. Выберите Дополнительные инструменты.

  2. В разделе Дополнительные инструменты выберите Перейти.

  3. Выберите пункт меню Консоль отладки>PowerShell.

  4. По запросу PowerShell выполните следующую команду. В следующей команде вместо {X.Y} укажите версию среды выполнения ASP.NET Core, а вместо {PLATFORM} — платформу:

    Test-Path D:\home\SiteExtensions\AspNetCoreRuntime.{X.Y}.{PLATFORM}\
    

    Эта команда возвращает True, если установлена предварительная версия среды выполнения x64.

Примечание.

Если приложение Службы приложений размещено в среде вычислений серии A (цен. категории "Базовый") или на более высоком уровне, архитектура платформы приложения (x86 или x64) задается в его параметрах на портале Azure. Убедитесь, что параметры публикации приложения, например в профиле публикации Visual Studio (.pubxml), соответствуют параметрам в конфигурации службы приложения на портале Azure.

Если приложение выполняется во внутрипроцессном режиме, а архитектура платформы настроена для 64-разрядных версий (x64), модуль ASP.NET Core использует 64-разрядную предварительную версию среды выполнения при ее наличии. Установите расширение Среда выполнения ASP.NET Core {X.Y} (x64) с помощью портала Azure.

После установки предварительной версии среды выполнения (x64) выполните приведенную ниже команду в командном окне Azure Kudu PowerShell, чтобы проверить установку. Замените версию среды выполнения ASP.NET Core на {X.Y} в следующей команде:

Test-Path D:\home\SiteExtensions\AspNetCoreRuntime.{X.Y}.x64\

Эта команда возвращает True, если установлена предварительная версия среды выполнения x64.

Примечание.

Расширения ASP.NET Core включают дополнительные функциональные возможности для ASP.NET Core в службах приложений Azure, например включение ведения журналов Azure. Расширение устанавливается автоматически при развертывании из Visual Studio. Если расширение не установлено, установите его для приложения.

Использование расширения сайта предварительной версии с шаблоном ARM

Если вы используете шаблон ARM для создания и развертывания приложений, можно использовать тип ресурса Microsoft.Web/sites/siteextensions, чтобы добавить расширение сайта в веб-приложение. В следующем примере расширение сайта (AspNetCoreRuntime.5.0.x64) для среды выполнения ASP.NET Core 5.0 (x64) добавляется в приложение:

{
    ...
    "parameters": {
        "site_name": {
            "defaultValue": "{SITE NAME}",
            "type": "String"
        },
        ...
    },       
    ...
    "resources": [
        ...
        {
            "type": "Microsoft.Web/sites/siteextensions",
            "apiVersion": "2018-11-01",
            "name": "[concat(parameters('site_name'), '/AspNetCoreRuntime.5.0.x64')]",
            "location": "[resourceGroup().location]",
            "dependsOn": [
                "[resourceId('Microsoft.Web/sites', parameters('site_name'))]"
            ]
        }
    ]
}
    

Вместо заполнителя {SITE NAME} используйте имя приложения в Службе приложений Azure (например, contoso).

Публикация и развертывание приложения

Для развертывания 64-разрядной версии

  • Для создания 64-разрядной версии приложения используйте 64-разрядную версию пакета SDK для .NET Core.
  • В разделе Конфигурация>Общие параметры службы приложений выберите для параметра Платформа значение 64-разрядная версия. Чтобы включить возможность выбора разрядности платформы, приложение должно использовать план обслуживания "Базовый" или более высокий.

Развертывание приложения, зависимого от платформы

  1. Щелкните правой кнопкой мыши проект в обозревателе решений и выберите Опубликовать. Либо выберите Сборка>Опубликовать {имя_приложения} на панели инструментов Visual Studio.
  2. В диалоговом окне Публикация выберите Azure>Далее.
  3. Выберите службу Azure.
  4. Выберите Дополнительно. Откроется диалоговое окно Публикация.
  5. Выберите группу ресурсов и план размещения или создайте новые.
  6. Выберите Готово.
  7. На странице публикации:
    • В разделе "Конфигурация" выберите значок "Изменить конфигурацию пера":
      • Убедитесь, что выбрана конфигурация Выпуск.
      • В раскрывающемся списке Режим развертывания выберите вариант Зависит от платформы.
      • В раскрывающемся списке Целевая среда выполнения выберите нужную среду выполнения. Значение по умолчанию — win-x86.
    • Чтобы удалить дополнительные файлы после развертывания, откройте область Параметры публикации файлов и установите флажок для удаления дополнительных файлов в месте назначения.
    • Выберите Сохранить.
    • Выберите Опубликовать.

Автономное развертывание приложения

Используйте Visual Studio или .NET Core CLI для автономного развертывания (SCD).

  1. Щелкните правой кнопкой мыши проект в обозревателе решений и выберите Опубликовать. Либо выберите Сборка>Опубликовать {имя_приложения} на панели инструментов Visual Studio.
  2. В диалоговом окне Публикация выберите Azure>Далее.
  3. Выберите службу Azure.
  4. Выберите Дополнительно. Откроется диалоговое окно Публикация.
  5. Выберите группу ресурсов и план размещения или создайте новые.
  6. Выберите Готово.
  7. На странице публикации:
    • В разделе "Конфигурация" выберите значок "Изменить конфигурацию пера":
      • Убедитесь, что выбрана конфигурация Выпуск.
      • В раскрывающемся списке Режим развертывания выберите вариант Автономный.
      • В раскрывающемся списке Целевая среда выполнения выберите нужную среду выполнения. Значение по умолчанию — win-x86.
    • Чтобы удалить дополнительные файлы после развертывания, откройте область Параметры публикации файлов и установите флажок для удаления дополнительных файлов в месте назначения.
    • Выберите Сохранить.
    • Выберите Опубликовать.

Параметры протокола (HTTPS)

Привязки безопасных протоколов позволяют указать сертификат, который следует использовать при ответе на запросы по HTTPS. Для привязки требуется допустимый закрытый сертификат (PFX), выданный для определенного имени узла. Дополнительные сведения см. в руководстве. Привязка существующего пользовательского SSL-сертификата к службе приложение Azure.

Преобразование web.config

Если вам нужно преобразовать web.config при публикации (например, задать переменные среды на основе конфигурации, профиля или среды), см. статью Преобразование web.config.

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

Служба приложений Azure на Windows Server использует службы IIS. Kestrel и YARP на интерфейсе предоставляют подсистему балансировки нагрузки. Технологии IIS посвящены следующие статьи.