Деплой приложения в App Service
Практическое руководство по развертыванию .NET-приложения в Azure App Service.
Способ 1: Azure CLI (ZIP Deploy)
Самый быстрый способ для ручного деплоя:
# Публикация проекта
cd src/OrderManagement.API
dotnet publish -c Release -o ./publish
# Создание ZIP-архива
cd publish
zip -r ../app.zip .
# Деплой в App Service
az webapp deployment source config-zip \
--resource-group rg-orderapp-dev \
--name orderapp-dev-app \
--src ../app.zip
Способ 2: GitHub Actions (рекомендуемый)
Автоматический деплой при каждом push в main-ветку. Подробности в статье о CI/CD.
Способ 3: JetBrains Rider
Rider имеет встроенную поддержку Azure через плагин Azure Toolkit.
Установка: Settings -> Plugins -> Marketplace -> Azure Toolkit for Rider -> Install
Деплой:
- Tools -> Azure -> Deploy to Azure Web App
- Выбрать подписку и App Service
- Rider автоматически соберет, опубликует и задеплоит
Подключение к Azure SQL из Rider:
- Database tool window (View -> Tool Windows -> Database)
- New -> Data Source -> Microsoft SQL Server
- Host:
sql-orderapp-dev.database.windows.net - Authentication: Azure Active Directory
Полезные плагины:
- Azure Toolkit for Rider -- деплой, управление ресурсами Azure
- .NET Core User Secrets -- управление секретами при локальной разработке
- Entity Framework Core UI -- визуальное управление миграциями
- HTTP Client -- тестирование API из IDE
Конфигурация App Service
Application Settings
Переменные окружения, переопределяющие appsettings.json:
az webapp config appsettings set \
--name orderapp-dev-app \
--resource-group rg-orderapp-dev \
--settings \
ASPNETCORE_ENVIRONMENT=Production \
ApplicationInsights__ConnectionString="InstrumentationKey=xxx"
Custom Domain + SSL
# Привязка домена
az webapp config hostname add \
--webapp-name orderapp-dev-app \
--resource-group rg-orderapp-dev \
--hostname orders.mycompany.com
# Бесплатный управляемый SSL-сертификат
az webapp config ssl create \
--name orderapp-dev-app \
--resource-group rg-orderapp-dev \
--hostname orders.mycompany.com
Deployment Slots на практике
Полный цикл blue-green деплоя
# 1. Создать staging слот
az webapp deployment slot create \
--name orderapp-dev-app \
--resource-group rg-orderapp-dev \
--slot staging
# 2. Деплой новой версии в staging
az webapp deployment source config-zip \
--resource-group rg-orderapp-dev \
--name orderapp-dev-app \
--slot staging \
--src app.zip
# 3. Проверить staging (он имеет свой URL)
curl https://orderapp-dev-app-staging.azurewebsites.net/health
# 4. Swap staging -> production (zero-downtime!)
az webapp deployment slot swap \
--name orderapp-dev-app \
--resource-group rg-orderapp-dev \
--slot staging \
--target-slot production
# 5. Если проблема -- swap обратно (мгновенный rollback)
az webapp deployment slot swap \
--name orderapp-dev-app \
--resource-group rg-orderapp-dev \
--slot staging \
--target-slot production
Sticky Settings
Настройки, привязанные к слоту (не переносятся при swap):
az webapp config appsettings set \
--name orderapp-dev-app \
--resource-group rg-orderapp-dev \
--slot staging \
--slot-settings ASPNETCORE_ENVIRONMENT=Staging
Автомасштабирование
# Правило: добавить экземпляр при CPU > 70%
az monitor autoscale create \
--resource-group rg-orderapp-dev \
--name autoscale-orderapp \
--resource orderapp-dev-app-plan \
--resource-type Microsoft.Web/serverfarms \
--min-count 1 --max-count 5 --count 1
az monitor autoscale rule create \
--resource-group rg-orderapp-dev \
--autoscale-name autoscale-orderapp \
--condition "CpuPercentage > 70 avg 5m" \
--scale out 1
# Правило: убрать экземпляр при CPU < 30%
az monitor autoscale rule create \
--resource-group rg-orderapp-dev \
--autoscale-name autoscale-orderapp \
--condition "CpuPercentage < 30 avg 5m" \
--scale in 1
Логирование и диагностика
# Включить логи приложения
az webapp log config \
--name orderapp-dev-app \
--resource-group rg-orderapp-dev \
--application-logging filesystem \
--level information
# Просмотр логов в реальном времени
az webapp log tail \
--name orderapp-dev-app \
--resource-group rg-orderapp-dev
# Проверка состояния
az webapp show \
--name orderapp-dev-app \
--resource-group rg-orderapp-dev \
--query "state"