Dağıtım en iyi uygulamaları

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.

İş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: Site veya kullanıcı kimlik bilgilerinizi kullanarak, dosyaları FTP ya da WebDeploy aracılığıyla karşıya yükleyebilirsiniz. Bu mekanizmalar Kudu'ya uğramaz.

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, Kalite Güvencesi ve hazırlık için ayrılmış dallar varsa, bu dalların her biri sürekli olarak bir hazırlık alanına dağıtılmalıdır. Bu yaklaşım, paydaşlarınızın dağıtılan dalı kolayca değerlendirmesine ve test etmesine olanak tanır. Dallandırma stratejileri hakkında bilgi almak için Gövde Tabanlı Geliştirme veya Git iş akışlarını karşılaştırma bölümüne bakın.

Ü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 geçiş yapmak, üretime dağıtmaktan farklı olarak kesinti süresini önler ve değişiklikleri geri almak için yeniden geçiş yapmanıza olanak tanır.

Dallardan ilgili yuvalarına akan işlemeler ve ana yuvanın üretime dönüştürülmesiyle dalların yuvalara nasıl dağıtılacağına ilişkin bir örneği gösteren diyagram.

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.

Dağıtmak istediğiniz her dal için, dallara yapılan her committe bu görevleri gerçekleştirmek üzere otomasyonu ayarlayın.

  1. 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.
  2. Etiketli görüntüyü yükle. Görsel oluşturulup etiketlendikten sonra, işlem hattı görseli kapsayıcı kayıt defterine yükler. Sonraki adımda dağıtım yuvası, kapsayıcı kayıt defterinden etiketli görüntüyü çeker.
  3. 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.

Diyagramda Web Uygulaması, Container Registry ve depo dallarını temsil eden yuva kullanım görseli gösterilmektedir.

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 teslimat sağlar. 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, az login --service-principal kullanarak ve önemli bilgileri sağlayarak 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ğeri SCM_DO_BUILD_DURING_DEPLOYMENT olan 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ğeri SCM_DO_BUILD_DURING_DEPLOYMENT olan 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ış.

Uyarı

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 amacıyla App Service Tanılama'yı ziyaret edin.

  1. Azure portalında Web Uygulamanıza gidin.

  2. Sol menüden Sorunları Tanıla ve Çöz seçeneğine tıklayın, bu da App Service Tanılama'yı açacaktır.

  3. 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.