Veb-ilovani Azure App Service’ga qanday joylashtirish mumkin
Amaliyot4 daqInnovialabs tahririyati
Qisqacha
Avval App Service plan yarating (u region, OT va tarifni belgilaydi), unda kerakli runtime bilan veb-ilova oching, kodni GitHub Actions yoki zip deploy orqali joylang, maxfiy ma’lumotlarni app settings’ga chiqaring va relizlarni staging-slot hamda swap orqali to‘xtovsiz o‘tkazing.
Qisqa javob: bu qanday ishlaydi
Azure App Service — veb-ilovalar uchun boshqariladigan hosting: siz kodni yuklaysiz, serverlar, operatsion tizim, yuklamani taqsimlash va platforma yangilanishlari esa Azure zimmasida qoladi. Ish ikki asosiy resursga tayanadi:
- App Service plan — hisoblash quvvati: region, operatsion tizim (Linux yoki Windows), tarif va instanslar soni. To‘lov aynan plan uchun olinadi.
- Web App — plan ichidagi ilovaning o‘zi: runtime, kod, sozlamalar, domenlar. Bitta planda bir nechta ilova bo‘lishi mumkin va ular uning resurslarini bo‘lishadi.
Tartib shunday: resurs guruhi → plan → ilova → deploy → sozlamalar → domen va SSL → relizlar uchun slotlar.
1-qadam. Plan va ilovani yarating
Eng qulayi — Azure CLI: buyruqlarni saqlab, qayta ishlatish mumkin.
az group create --name shop-rg --location westeurope
az appservice plan create --name shop-plan --resource-group shop-rg --sku B1 --is-linux
az webapp create --name shop-app --resource-group shop-rg --plan shop-plan --runtime "NODE:20-lts"
Ilova nomi noyob bo‘lishi shart, chunki u shop-app.azurewebsites.net manziliga aylanadi. Node.js, .NET va boshqa stack’lar uchun mavjud runtime’lar ro‘yxatini az webapp list-runtimes ko‘rsatadi — versiyalar vaqt o‘tishi bilan o‘zgaradi, shuning uchun unga tayaning.
2-qadam. Kodni joylang
Zip deploy — birinchi ishga tushirish yoki qo‘lda reliz uchun eng tez yo‘l. Loyihani yig‘ing, arxivlang va yuboring:
az webapp deploy --resource-group shop-rg --name shop-app --src-path app.zip --type zip
Agar arxivda node_modules’siz manba kodi bo‘lsa, platforma tomonida yig‘ishni SCM_DO_BUILD_DURING_DEPLOYMENT=true sozlamasi bilan yoqing. .NET uchun odatda dotnet publish natijasi arxivlanadi.
GitHub Actions — doimiy ish uchun to‘g‘ri tanlov. Deployment Center bo‘limidagi master workflow faylini va hisob ma’lumotlari bilan secret’ni o‘zi yaratadi. Asosiy qadam quyidagicha:
- uses: azure/webapps-deploy@v3
with:
app-name: shop-app
slot-name: staging
publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }}
package: .
Production-loyihalar uchun publish profile o‘rniga OpenID Connect orqali kirishni sozlagan ma’qul: shunda repozitoriyda uzoq muddatli secret saqlanmaydi.
3-qadam. App settings’ni sozlang
Ulanish satrlari, API kalitlari va ish rejimini kodga yozmang. App Service’da ular app settings sifatida beriladi va ilovaga muhit o‘zgaruvchilari bo‘lib keladi:
az webapp config appsettings set --resource-group shop-rg --name shop-app --settings NODE_ENV=production API_URL=https://api.example.com
Darhol yoqish kerak bo‘lgan yana bir nechta narsa:
- HTTPS Only — HTTPS’ga majburiy yo‘naltirish;
- Always On (pullik tariflarda) — trafik bo‘lmaganda ilova «uxlab» qolmasligi uchun;
- Health check —
/healthkabi yo‘l, u orqali platforma instans tirikligini biladi; - ilova loglari — ularsiz deploy’dan keyingi xatolarni taxmin qilishga to‘g‘ri keladi.
4-qadam. Slotlar orqali to‘xtovsiz relizlar
Deployment slot — ilovaning alohida nusxasi, o‘z manzili bilan, masalan shop-app-staging.azurewebsites.net. Reliz sxemasi:
- Slot yarating:
az webapp deployment slot create --name shop-app --resource-group shop-rg --slot staging. - Yangi versiyani
staging’ga joylang va tekshiring. - Swap bajaring:
az webapp deployment slot swap --name shop-app --resource-group shop-rg --slot staging --target-slot production.
Almashtirishdan oldin platforma instanslarni qizdiradi, shuning uchun foydalanuvchilar sovuq startni sezmaydi. Muammo chiqsa, qayta swap eski versiyani qaytaradi.
Muhim jihat: kod bilan birga ko‘chmasligi kerak bo‘lgan sozlamalarni (masalan, test bazasiga ulanish satrini) deployment slot setting deb belgilang — ular o‘z slotiga bog‘langan holda qoladi.
5-qadam. O‘z domeningiz va bepul SSL
- Custom domains bo‘limida domenni qo‘shing.
wwwuchun registratordashop-app.azurewebsites.net’ga CNAME, asosiy domen uchun esa ilova IP’siga A-yozuv yarating. - Portaldagi verification ID bilan
asuid.<subdomen>TXT-yozuvini qo‘shing — shunda Azure domen sizniki ekanini tasdiqlaydi. - App Service Managed Certificate yarating va uni domenga SNI SSL turi bilan bog‘lang. Sertifikat bepul va avtomatik yangilanadi, lekin wildcard-domenlarni qo‘llab-quvvatlamaydi.
Tarifni qanday tanlash kerak
| Daraja | Qachon mos keladi |
|---|---|
| Free / Shared | Tajriba va demo: umumiy resurslar, SLA va ko‘p funksiyalar yo‘q |
| Basic | Slot va avtomasshtablashsiz kichik production |
| Standard | Slotlar, avtomasshtablash, zaxira nusxalar kerak |
| Premium | Yuqori yuklama, ko‘proq xotira va slotlar, xususiy tarmoqlar |
Faqat narxga emas, funksiyalarga qarang: agar to‘xtovsiz relizlar kerak bo‘lsa, Basic yetmaydi. Mos keladigan eng kichik darajadan boshlang — planni ilovani qayta o‘rnatmasdan ko‘tarish yoki tushirish mumkin. Joriy narxlar region va OT’ga bog‘liq, ularni Azure’ning rasmiy kalkulyatorida hisoblash qulay.
Ko‘p uchraydigan xatolar
- Ilova qat’iy portni tinglaydi. Node.js-ilova portni
process.env.PORT’dan olishi kerak. - Maxfiy ma’lumotlar repozitoriyda, app settings’da emas.
- To‘g‘ridan-to‘g‘ri production’ga deploy slotsiz — har qanday xato foydalanuvchilarga ko‘rinadi.
- Bitta planda juda ko‘p ilova — ular xotira va CPU uchun raqobatlashadi.