Настройка деплоя сайта на Azure (App Service)
Azure App Service — PaaS платформа для веб-приложений. Поддерживает Node.js, PHP, Python, .NET, Java. Встроенный CI/CD через GitHub Actions, Deployment Slots для staging, автоскейлинг.
Создание App Service
# Azure CLI
az group create --name myapp-rg --location westeurope
az appservice plan create \
--name myapp-plan \
--resource-group myapp-rg \
--sku B2 \
--is-linux
az webapp create \
--name myapp-prod \
--resource-group myapp-rg \
--plan myapp-plan \
--runtime "PHP|8.3"
Настройка через Azure CLI
# Переменные окружения
az webapp config appsettings set \
--name myapp-prod \
--resource-group myapp-rg \
--settings \
APP_ENV=production \
APP_KEY="base64:..." \
DB_HOST="myserver.postgres.database.azure.com" \
DB_DATABASE=myapp \
WEBSITES_PORT=8000
# Подключить PostgreSQL
az postgres flexible-server create \
--name myapp-db \
--resource-group myapp-rg \
--location westeurope \
--sku-name Standard_B1ms \
--storage-size 32 \
--admin-user dbadmin \
--admin-password "$DB_PASSWORD"
Deployment Slots
Deployment Slots — отдельные окружения внутри одного App Service. Идеально для staging:
# Создать staging slot
az webapp deployment slot create \
--name myapp-prod \
--resource-group myapp-rg \
--slot staging
# Деплой в staging
az webapp deploy \
--name myapp-prod \
--resource-group myapp-rg \
--slot staging \
--src-path deployment.zip
# Swap staging → production (мгновенно, zero-downtime)
az webapp deployment slot swap \
--name myapp-prod \
--resource-group myapp-rg \
--slot staging \
--target-slot production
# Swap Back если что-то пошло не так
az webapp deployment slot swap \
--name myapp-prod \
--resource-group myapp-rg \
--slot production \
--target-slot staging
GitHub Actions + Azure Web App
# .github/workflows/azure-deploy.yml
name: Deploy to Azure
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup PHP
uses: shivammathur/setup-php@v2
with: { php-version: '8.3' }
- name: Install dependencies
run: composer install --no-dev --optimize-autoloader
- name: Build frontend
run: npm ci && npm run build
- name: Deploy to Azure Web App
uses: azure/webapps-deploy@v3
with:
app-name: myapp-prod
publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }}
package: .
Docker-деплой
# Создать Azure Container Registry
az acr create \
--name myappcr \
--resource-group myapp-rg \
--sku Basic
# Собрать и запушить
az acr build \
--registry myappcr \
--image myapp:$GITHUB_SHA \
.
# Обновить App Service
az webapp config container set \
--name myapp-prod \
--resource-group myapp-rg \
--container-image-name myappcr.azurecr.io/myapp:$GITHUB_SHA
Автоскейлинг
az monitor autoscale create \
--resource-group myapp-rg \
--resource myapp-plan \
--resource-type Microsoft.Web/serverfarms \
--name autoscale-rule \
--min-count 2 \
--max-count 10 \
--count 2
az monitor autoscale rule create \
--autoscale-name autoscale-rule \
--resource-group myapp-rg \
--scale out 2 \
--condition "Percentage CPU > 75 avg 5m"
Срок реализации
- Базовый деплой App Service + GitHub Actions: 1–2 дня
- Deployment Slots + swap: +1 день
- Terraform-описание всей инфраструктуры: 3–4 дня







