Dağıtım en iyi uygulamaları
Not
1 Haziran 2024'den itibaren, yeni oluşturulan App Service uygulamaları adlandırma kuralını <app-name>-<random-hash>.<region>.azurewebsites.net
kullanan benzersiz bir varsayılan ana bilgisayar adı oluşturabilir. Mevcut uygulama adları değişmeden kalır. Örneğin:
myapp-ds27dh7271aah175.westus-01.azurewebsites.net
Daha fazla bilgi için bkz . App Service Kaynağı için Benzersiz Varsayılan Ana Bilgisayar Adı.
Her geliştirme ekibinin, herhangi bir bulut hizmetinde verimli bir dağıtım işlem hattı uygulamayı zorlaştırabilecek benzersiz gereksinimleri vardır. Bu makalede Azure Uygulaması Hizmetine dağıtmanın üç ana bileşeni tanıtılır: dağıtım kaynakları, derleme işlem hatları ve dağıtım mekanizmaları. Bu makale ayrıca belirli dil yığınları için bazı en iyi yöntemleri ve ipuçlarını da kapsar.
Dağıtım bileşenleri
Bu bölümde App Service'e dağıtmaya yönelik üç ana bileşen açıklanmaktadır.
Dağıtım kaynağı
Dağıtım kaynağı, uygulama kodunuzun konumudur. Üretim uygulamaları için dağıtım kaynağı genellikle GitHub, Bitbucket veya Azure Repos gibi sürüm denetimi yazılımları tarafından barındırılan bir depodur. Geliştirme ve test senaryoları için dağıtım kaynağı yerel makinenizdeki bir proje olabilir.
Derleme işlem hattı oluşturma
Bir dağıtım kaynağına karar verdikten sonra, sonraki adımınız bir derleme işlem hattı seçmektir. Derleme işlem hattı, dağıtım kaynağından kaynak kodunuzu okur ve uygulamayı çalıştırılabilir duruma getirmek için bir dizi adım çalıştırır.
Adımlar kod derlemeyi, HTML ve JavaScript'i küçültmeyi, testleri çalıştırmayı ve bileşenleri paketlemeyi içerebilir. Derleme işlem hattı tarafından çalıştırılan belirli komutlar dil yığınınıza bağlıdır. Bu işlemleri Azure Pipelines gibi bir derleme sunucusunda veya yerel olarak çalıştırabilirsiniz.
Dağıtım mekanizması
Dağıtım mekanizması , yerleşik uygulamanızı web uygulamanızın /home/site/wwwroot dizinine yerleştirmek için kullanılan eylemdir. /wwwroot dizini, web uygulamanızın tüm örnekleri tarafından paylaşılan bağlı bir depolama konumudur. Dağıtım mekanizması uygulamanızı bu dizine yerleştirdiğinde, örnekleriniz yeni dosyaları eşitlemek için bir bildirim alır.
App Service aşağıdaki dağıtım mekanizmalarını destekler:
- Kudu uç noktaları: Kudu , Windows App Service'te ayrı bir işlem olarak çalışan açık kaynak geliştirici üretkenlik aracıdır. Linux App Service'te ikinci bir kapsayıcı olarak çalışır. Kudu sürekli dağıtımları işler ve zipdeploy/ gibi dağıtım için HTTP uç noktaları sağlar.
- FTP ve WebDeploy: Sitenizi veya kullanıcı kimlik bilgilerinizi kullanarak FTP veya WebDeploy aracılığıyla dosyaları karşıya yükleyebilirsiniz. Bu mekanizmalar Kudu'ya gitmez.
Azure Pipelines, Jenkins ve düzenleyici eklentileri gibi dağıtım araçları bu dağıtım mekanizmalarından birini kullanır.
Dağıtım yuvalarını kullanma
Mümkün olduğunda, yeni bir üretim derlemesi dağıttığınızda dağıtım yuvalarını kullanın. Standart App Service Planı katmanı veya daha iyisi ile uygulamanızı bir hazırlama ortamına dağıtabilir, değişikliklerinizi doğrulayabilir ve duman testleri yapabilirsiniz. Hazır olduğunuzda hazırlama ve üretim yuvalarınızı değiştirin. Değiştirme işlemi, üretim ölçeğinizle eşleşmesi için gerekli çalışan örneklerini ısıtır ve bu da kapalı kalma süresini ortadan kaldırır.
Kodu sürekli dağıtma
Projenizde test, Soru-Cevap ve hazırlama için ayrılmış dallar varsa, bu dalların her biri sürekli olarak bir hazırlama yuvasına dağıtılmalıdır. Bu yaklaşım Gitflow tasarımı olarak bilinir. Bu tasarım, paydaşlarınızın dağıtılan dalı kolayca değerlendirmesine ve test etmesine olanak tanır.
Üretim yuvanız için sürekli dağıtım hiçbir zaman etkinleştirilmemelidir. Bunun yerine, üretim dalınız (genellikle ana) üretim dışı bir yuvaya dağıtılmalıdır. Temel dalı serbest bırakmaya hazır olduğunuzda, bunu üretim yuvasına değiştirin. Üretime dağıtmak yerine üretime geçiş yapmak kapalı kalma süresini önler ve değişiklikleri yeniden değiştirerek geri almanızı sağlar.
Kapsayıcıları sürekli dağıtma
Docker veya diğer kapsayıcı kayıt defterlerinden özel kapsayıcılar için, kapalı kalma süresini önlemek için görüntüyü bir hazırlama yuvasına dağıtın ve üretime geçin. Otomasyon, kod dağıtımından daha karmaşıktır. Görüntüyü bir kapsayıcı kayıt defterine göndermeniz ve web uygulamasında görüntü etiketini güncelleştirmeniz gerekir.
Yuvaya dağıtmak istediğiniz her dal için, dala yapılan her işlemede bu görevleri gerçekleştirmek için otomasyonu ayarlayın.
- Görüntüyü derleyin ve etiketleyin. Derleme işlem hattının bir parçası olarak, görüntüyü git işleme kimliği, zaman damgası veya diğer tanımlanabilir bilgilerle etiketleyin. Varsayılan en son etiketi kullanmamak en iyisidir. Aksi takdirde, şu anda dağıtılan kodu izlemek zordur ve bu da hata ayıklamayı daha zor hale getirir.
- Etiketli görüntüyü gönderme. Görüntü derlenip etiketlendikten sonra işlem hattı görüntüyü kapsayıcı kayıt defterine gönderir. Sonraki adımda dağıtım yuvası, kapsayıcı kayıt defterinden etiketli görüntüyü çeker.
- Dağıtım yuvasını yeni görüntü etiketiyle güncelleştirin. Bu özellik güncelleştirildiğinde, site otomatik olarak yeniden başlatılır ve yeni kapsayıcı görüntüsünü çeker.
Bu makalede yaygın otomasyon çerçeveleri için örnekler yer alır.
Azure DevOps kullanma
App Service, Dağıtım Merkezi aracılığıyla kapsayıcılar için yerleşik sürekli teslime sahiptir. Azure portalında uygulamanıza gidin. Dağıtım'ın altında Dağıtım Merkezi'ni seçin. Deponuzu ve dalınızı seçmek için yönergeleri izleyin. Bu yaklaşım, seçilen dalınıza yeni işlemeler gönderildiğinde kapsayıcınızı otomatik olarak derlemek, etiketlemek ve dağıtmak için bir DevOps derleme ve yayın işlem hattı yapılandırır.
GitHub Actions'i kullanma
GitHub Actions ile kapsayıcı dağıtımınızı da otomatikleştirebilirsiniz. İş akışı dosyası kapsayıcıyı işleme kimliğiyle derleyip etiketler, kapsayıcı kayıt defterine gönderir ve belirtilen web uygulamasını yeni görüntü etiketiyle güncelleştirir.
on:
push:
branches:
- <your-branch-name>
name: Linux_Container_Node_Workflow
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
# checkout the repo
- name: 'Checkout GitHub Action'
uses: actions/checkout@main
- uses: azure/docker-login@v1
with:
login-server: contoso.azurecr.io
username: ${{ secrets.REGISTRY_USERNAME }}
password: ${{ secrets.REGISTRY_PASSWORD }}
- run: |
docker build . -t contoso.azurecr.io/nodejssampleapp:${{ github.sha }}
docker push contoso.azurecr.io/nodejssampleapp:${{ github.sha }}
- uses: azure/webapps-deploy@v2
with:
app-name: 'node-rnc'
publish-profile: ${{ secrets.azureWebAppPublishProfile }}
images: 'contoso.azurecr.io/nodejssampleapp:${{ github.sha }}'
Diğer otomasyon sağlayıcılarını kullanma
Daha önce listelenen adımlar CircleCI veya Travis CI gibi diğer otomasyon yardımcı programları için geçerlidir. Ancak son adımda dağıtım yuvalarını yeni görüntü etiketleriyle güncelleştirmek için Azure CLI'yi kullanmanız gerekir. Otomasyon betiğinizde Azure CLI'yı kullanmak için aşağıdaki komutu kullanarak bir Hizmet Sorumlusu oluşturun.
az ad sp create-for-rbac --name "myServicePrincipal" --role contributor \
--scopes /subscriptions/{subscription}/resourceGroups/{resource-group} \
--sdk-auth
Betiğinizde, asıl bilgileri sağlayarak kullanarak az login --service-principal
oturum açın. Daha sonra kapsayıcı adını, etiketini, kayıt defteri URL'sini ve kayıt defteri parolasını ayarlamak için kullanabilirsiniz az webapp config container set
. Daha fazla bilgi için bkz . Circle CI üzerinde Azure CLI'da oturum açma.
Dile özgü dikkat edilmesi gerekenler
Java, Node ve .NET uygulamaları için aşağıdaki noktaları göz önünde bulundurun.
Java
JAR uygulamalarını dağıtmak için Kudu zipdeploy API'sini kullanın. WAR uygulamaları için wardeploy kullanın. Jenkins kullanıyorsanız bu API'leri doğrudan dağıtım aşamanızda kullanabilirsiniz. Daha fazla bilgi için bkz. Jenkins ile Azure Uygulaması Hizmetine Dağıtma.
Düğüm
Varsayılan olarak, Kudu Node uygulamanız (npm install
) için derleme adımlarını çalıştırır. Azure DevOps gibi bir derleme hizmeti kullanıyorsanız Kudu derlemesi gereksizdir. Kudu derlemesini devre dışı bırakmak için değerini SCM_DO_BUILD_DURING_DEPLOYMENT
içeren bir false
uygulama ayarı oluşturun.
.NET
Varsayılan olarak, Kudu .NET uygulamanızdotnet build
() için derleme adımlarını çalıştırır. Azure DevOps gibi bir derleme hizmeti kullanıyorsanız Kudu derlemesi gereksizdir. Kudu derlemesini devre dışı bırakmak için değerini SCM_DO_BUILD_DURING_DEPLOYMENT
içeren bir false
uygulama ayarı oluşturun.
Dağıtımla ilgili dikkat edilmesi gereken diğer noktalar
Diğer önemli noktalar yerel önbellek ve yüksek CPU veya bellektir.
Yerel önbellek
Azure Uygulaması Hizmeti içeriği Azure Depolama'da depolanır ve içerik paylaşımı olarak dayanıklı bir şekilde ortaya çıkar. Ancak bazı uygulamaların yalnızca yüksek kullanılabilirlikle çalıştırabilecekleri yüksek performanslı, salt okunur bir içerik deposuna ihtiyacı vardır. Bu uygulamalar yerel önbelleğin kullanılmasından yararlanabilir. Daha fazla bilgi için bkz. Azure Uygulaması Service Local Cache'e genel bakış.
Not
WordPress gibi içerik yönetimi siteleri için yerel önbellek önerilmez.
Kapalı kalma süresini önlemek için her zaman dağıtım yuvalarıyla yerel önbelleği kullanın. Bu özellikleri birlikte kullanma hakkında bilgi için bkz . En iyi yöntemler.
Yüksek CPU veya bellek
App Service Planınız kullanılabilir CPU veya belleğin %90'ını kullanıyorsa, temel alınan sanal makine dağıtımınızı işlemede sorun yaşayabilir. Bu durum oluştuğunda, dağıtımı gerçekleştirmek için örnek sayınızın ölçeğini geçici olarak artırın. Dağıtım tamamlandıktan sonra örnek sayısını önceki değerine döndürebilirsiniz.
Daha fazla bilgi için, kaynağınıza özgü eyleme dönüştürülebilir en iyi yöntemleri bulmak için App Service Tanılama'yı ziyaret edin.
Sol gezinti bölmesinden App Service Tanılama'yı açan Sorunları tanıla ve çöz'e tıklayın.
Kullanılabilirlik ve Performans'ı seçin veya Yüksek CPU Analizi gibi diğer seçenekleri keşfedin.
Bu en iyi yöntemlerle ilgili olarak uygulamanızın geçerli durumunu görüntüleyin.
Kaynağınız için App Service Tanılama'yı doğrudan açmak için de bu bağlantıyı kullanabilirsiniz: https://portal.azure.com/?websitesextension_ext=asd.featurePath%3Ddetectors%2FParentAvailabilityAndPerformance#@microsoft.onmicrosoft.com/resource/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Web/sites/{siteName}/troubleshoot
.