Налаштування деплою сайту на Azure (App Service)
Уявіть: ви push'ите код у main, за хвилину він уже на production без жодної секунди простою. Жодних ручних FTP-завантажень, жодних 502 помилок серед ночі. Саме так виглядає правильно налаштований деплой на Azure App Service. Ми бачили десятки проєктів, де дрібні помилки в конфігурації — невірний runtime, відсутність змінних оточення, кривий CI/CD — призводили до годин даунтайму. Розповідаємо, як цього уникнути.
Правильне налаштування Azure App Service включає кілька ключових компонентів: вибір відповідного плану, автоматизація збірки та деплою, організація оточень через Deployment Slots та налаштування автоскейлінгу. Нижче — конкретні кроки, які ми застосовуємо в кожному проєкті.
Створення App Service
App Service Plan — це основа. Для продакшену вибираємо рівень B2 або вище, щоб забезпечити запас продуктивності під PHP 8.3 або Node.js. Команда 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" Перший деплой можна зробити через FTP або zip, але ми рекомендуємо одразу налаштувати безперервну інтеграцію.
Як налаштувати CI/CD через GitHub Actions?
GitHub Actions — оптимальний вибір для автоматизації. Ми підготували універсальний workflow, який адаптуємо під будь-який стек:
# .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: . Важливий момент: publish-profile зберігається в секретах GitHub — жодних паролів у репозиторії. Workflow запускається автоматично при кожному push у main, і через 2–3 хвилини нова версія вже на сервері.
Чому Deployment Slots — must have для production?
Deployment Slots — це ізольовані оточення всередині одного App Service. Ви деплоїте нову версію в staging, тестуєте, потім миттєво перемикаєте (swap) на production. Swap займає секунди, користувачі не помічають перемикання. Якщо щось пішло не так — відкат однією дією.
# Створити 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 Ми використовуємо цю техніку у всіх продакшен-проєктах. Один інтернет-магазин після впровадження слотів перестав простоювати вночі — кешування та підключення до БД не скидаються при swap, якщо налаштовано правильно.
Як підключити кастомний домен та SSL?
Після деплою потрібно прив'язати свій домен. Azure App Service підтримує безкоштовні SSL-сертифікати від Let's Encrypt або власні з Key Vault. Процес:
- У порталі Azure додайте custom domain у розділі Custom domains.
- Прив'яжіть SSL-сертифікат (безкоштовний або свій).
- Вкажіть прив'язку TLS/SSL для домену.
Порада: використовуйте Azure Key Vault для зберігання сертифікатів — це безпечніше, ніж зберігати їх у файлах.
Автоскейлінг: коли сайт зростає
App Service Plan вміє автоматично масштабуватися за метриками. Налаштування через CLI:
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" При правильно налаштованому автоскейлінгу проєкт витримує зростання трафіку в 10 разів без ручного втручання. Наприклад, наш клієнт — сервіс онлайн-бронювання — пережив Black Friday, коли навантаження зросло в 15 разів, а додаток залишився чуйним.
Порівняння методів деплою
| Метод | Час налаштування | Zero-downtime | Підходить для |
|---|---|---|---|
| FTP/zip | 30 хвилин | ❌ | Тестові проєкти |
| GitHub Actions | 1 день | ✅ (зі слотами) | Продакшен |
| Azure DevOps | 1 день | ✅ | Enterprise |
| Terraform | 3–4 дні | ✅ | Інфраструктура як код |
GitHub Actions в 10 разів швидший за ручний FTP-деплой і повністю виключає людський фактор. Для порівняння: при FTP ви витрачаєте 10 хвилин на завантаження файлів, а при CI/CD — 2 секунди на commit.
Типові помилки та їх вирішення
-
502 Bad Gateway: найчастіше через несумісність версій PHP або Node.js з runtime Azure. Перевірте
az webapp config showта порівняйте з локальним середовищем. -
Змінні оточення не підхоплюються: задавайте їх через
az webapp config appsettings set, а не через .env-файл в архіві. - SSL-сертифікат не працює: обов'язково вкажіть прив'язку в порталі Azure після додавання сертифіката.
Що входить у налаштування під ключ
Відзначимо: коли ви довіряєте нам налаштування деплою на Azure App Service, ми:
- Аналізуємо ваш проєкт та підбираємо оптимальний план (ми працюємо з Azure понад 5 років, налаштували деплой для 50+ проєктів)
- Налаштовуємо CI/CD через GitHub Actions або Azure DevOps
- Підключаємо Deployment Slots з автоматичним swap та zero-downtime
- Прив'язуємо кастомний домен та SSL-сертифікат
- Налаштовуємо автоскейлінг та моніторинг
- Документуємо всю конфігурацію
Ми гарантуємо, що після налаштування ви зможете деплоїти однією кнопкою. Зв'яжіться з нами, щоб обговорити ваш проєкт — ми оцінимо його за 1 день та запропонуємо оптимальне рішення.
Строки реалізації
| Етап | Строк |
|---|---|
| Базовий деплой App Service + GitHub Actions | 1–2 дні |
| Deployment Slots + swap | +1 день |
| Terraform-описання всієї інфраструктури | 3–4 дні |
Не відкладайте — замовте консультацію, і ми зробимо ваш деплой надійним та автоматичним.







