Uygulamanızı doğrudan bir ZIP paketinden Azure Uygulaması Hizmeti'nde çalıştırma

Not

Python uygulamaları için paketten çalıştırma desteklenmez. Python kodunuzun ZIP dosyasını dağıtırken Azure derleme otomasyonunun etkinleştirilmesi için bir bayrak ayarlamanız gerekir. Derleme otomasyonu, uygulamanız için Python sanal ortamını oluşturur ve gerekli gereksinimleri ve paketi yükler. Daha fazla ayrıntı için bkz . derleme otomasyonu .

Azure Uygulaması Hizmeti'nde uygulamalarınızı doğrudan bir dağıtım ZIP paketi dosyasından çalıştırabilirsiniz. Bu makalede, uygulamanızda bu işlevselliğin nasıl etkinleştirileceği gösterilmektedir.

App Service'teki diğer tüm dağıtım yöntemlerinin ortak bir yanı vardır: dosyalarınız uygulamanızda D:\home\site\wwwroot dizinine (veya Linux uygulamaları için /home/site/wwwroot) dağıtılır. Çalışma zamanında uygulamanız tarafından aynı dizin kullanıldığından, dosya kilidi çakışmaları nedeniyle dağıtımın başarısız olması ve bazı dosyaların henüz güncelleştirilmemesi nedeniyle uygulamanın öngörülemez şekilde davranması mümkündür.

Buna karşılık, doğrudan bir paketten çalıştırdığınızda, paketteki dosyalar wwwroot dizinine kopyalanmaz. Bunun yerine, ZIP paketinin kendisi doğrudan salt okunur wwwroot dizini olarak bağlanır. Doğrudan bir paketten çalıştırmanın çeşitli avantajları vardır:

  • Dağıtım ve çalışma zamanı arasındaki dosya kilidi çakışmalarını ortadan kaldırır.
  • İstediğiniz zaman yalnızca tam dağıtılmış uygulamaların çalışmasını sağlar.
  • Bir üretim uygulamasına dağıtılabilir (yeniden başlatma ile).
  • Azure Resource Manager dağıtımlarının performansını artırır.
  • Özellikle büyük npm paket ağaçları olan JavaScript işlevleri için soğuk başlangıç sürelerini azaltabilir.

Not

Şu anda yalnızca ZIP paketi dosyaları desteklenmektedir.

Proje ZIP paketi oluşturma

Önemli

Dağıtım için ZIP paketini oluştururken kök dizini değil, yalnızca içindeki dosyaları ve dizinleri ekleyin. GitHub deposunu ZIP dosyası olarak indirirseniz, bu dosyayı olduğu gibi App Service'e dağıtamazsınız. GitHub, App Service ile çalışmayan ek iç içe dizinleri en üst düzeye ekler.

Yerel terminal penceresinde uygulama projenizin kök dizinine gidin.

Bu dizin index.html, index.php ve app.js gibi web uygulamanıza giriş dosyasını içermelidir. Ayrıca project.json, composer.json, package.json, bower.json ve requirements.txt gibi paket yönetimi dosyalarını da içerebilir.

App Service'in dağıtım otomasyonunu sizin için çalıştırmasını istemiyorsanız, tüm derleme görevlerini (örneğin, npm, bower, gulp, composerve pip) çalıştırın ve uygulamayı çalıştırmak için ihtiyacınız olan tüm dosyalara sahip olduğunuzdan emin olun. Paketinizi doğrudan çalıştırmak istiyorsanız bu adım gereklidir.

Projenizdeki tüm öğeleri içeren bir ZIP arşivi oluşturun. Projeler için dotnet bu, komutun çıkış dizinindeki dotnet publish her şeydir (çıkış dizininin kendisi hariç). Örneğin, geçerli dizinin içeriğini içeren bir ZIP paketi oluşturmak için terminalinizde aşağıdaki komut:

# Bash
zip -r <file-name>.zip .

# PowerShell
Compress-Archive -Path * -DestinationPath <file-name>.zip

Paketten çalıştırmayı etkinleştirme

Uygulama WEBSITE_RUN_FROM_PACKAGE ayarı bir paketten çalıştırmayı etkinleştirir. Bunu ayarlamak için Azure CLI ile aşağıdaki komutu çalıştırın.

az webapp config appsettings set --resource-group <group-name> --name <app-name> --settings WEBSITE_RUN_FROM_PACKAGE="1"

WEBSITE_RUN_FROM_PACKAGE="1" uygulamanızı yerel bir paketten uygulamanıza çalıştırmanıza olanak tanır. Ayrıca uzak paketten de çalıştırabilirsiniz.

Paketi çalıştırma

App Service'inizde paket çalıştırmanın en kolay yolu Azure CLI az webapp deployment source config-zip komutudur. Örneğin:

az webapp deploy --resource-group <group-name> --name <app-name> --src-path <filename>.zip

Uygulama ayarı ayarlandığından WEBSITE_RUN_FROM_PACKAGE , bu komut paket içeriğini uygulamanızın D:\home\site\wwwroot dizinine ayıklamaz. Bunun yerine, ZIP dosyasını olduğu gibi D:\home\data\SitePackages'a yükler ve aynı dizinde çalışma zamanında yüklenecek ZIP paketinin adını içeren bir packagename.txt oluşturur. ZIP paketinizi farklı bir yolla (FTP gibi) karşıya yüklerseniz, D:\home\data\SitePackages dizinini ve packagename.txt dosyasını el ile oluşturmanız gerekir.

Komut ayrıca uygulamayı yeniden başlatır. WEBSITE_RUN_FROM_PACKAGE Ayarlandığından, App Service karşıya yüklenen paketi salt okunur wwwroot dizini olarak bağlar ve uygulamayı doğrudan bu bağlı dizinden çalıştırır.

Bunun yerine dış URL'den çalıştırma

Paketi Azure Blob Depolama gibi bir dış URL kullanarak da çalıştırabilirsiniz. Blob depolama hesabınıza paket dosyaları yüklemek için Azure Depolama Gezgini kullanabilirsiniz. App Service çalışma zamanının pakete güvenli bir şekilde erişmesini sağlamak için Paylaşılan Erişim İmzası (SAS) içeren bir özel depolama kapsayıcısı veya yönetilen kimlik kullanmanız gerekir.

Not

Şu anda, yerel paket çalıştıran mevcut bir App Service kaynağı uzak paketten çalıştırılacak şekilde geçirilemez. Dış URL'den çalışacak şekilde yapılandırılmış yeni bir App Service kaynağı oluşturmanız gerekir.

Dosyanızı Blob depolamaya yükledikten ve dosya için bir SAS URL'sine sahip olduktan sonra, uygulama ayarını URL olarak ayarlayın WEBSITE_RUN_FROM_PACKAGE . Aşağıdaki örnek bunu Azure CLI kullanarak yapar:

az webapp config appsettings set --name <app-name> --resource-group <resource-group-name> --settings WEBSITE_RUN_FROM_PACKAGE="https://myblobstorage.blob.core.windows.net/content/SampleCoreMVCApp.zip?st=2018-02-13T09%3A48%3A00Z&se=2044-06-14T09%3A48%3A00Z&sp=rl&sv=2017-04-17&sr=b&sig=bNrVrEFzRHQB17GFJ7boEanetyJ9DGwBSV8OM3Mdh%2FM%3D"

Blob depolamada aynı ada sahip güncelleştirilmiş bir paket yayımlarsanız, güncelleştirilmiş paketin App Service'e yüklenmesi için uygulamanızı yeniden başlatmanız gerekir.

Yönetilen kimlik kullanarak Azure Blob Depolama paketine erişme

Azure Blob Depolama Microsoft Entra Id ile istekleri yetkilendirilecek şekilde yapılandırabilirsiniz. Bu yapılandırma, süresi dolan bir SAS anahtarı oluşturmak yerine uygulamanın yönetilen kimliğine güvenebileceğiniz anlamına gelir. Varsayılan olarak, uygulamanın sistem tarafından atanan kimliği kullanılır. Kullanıcı tarafından atanan bir kimlik belirtmek isterseniz, uygulama ayarını bu kimliğin kaynak kimliğine ayarlayabilirsiniz WEBSITE_RUN_FROM_PACKAGE_BLOB_MI_RESOURCE_ID . Ayar, ayarın atlanmasıyla eşdeğer olan bir değer olarak da kabul SystemAssigned edebilir.

Paketin kimliği kullanılarak getirilebilmesini sağlamak için:

  1. Blob'un özel erişim için yapılandırıldığından emin olun.

  2. Kimliğe paket blobu üzerinde kapsamı olan Depolama Blobu Veri Okuyucusu rolünü verin. Rol atamasını oluşturma hakkında ayrıntılı bilgi için bkz . Blob verilerine erişim için Azure rolü atama.

  3. WEBSITE_RUN_FROM_PACKAGE Uygulama ayarını paketin blob URL'sine ayarlayın. Bu URL genellikle formda veya benzer bir urldir https://{storage-account-name}.blob.core.windows.net/{container-name}/{path-to-package} .

Paketten çalıştırılırken Web İşi dosyalarını dağıtma

Bir uygulamayı paketten çalıştırmayı etkinleştirdiğinizde Web İşi dosyalarını dağıtmanın iki yolu vardır:

  • Uygulamanızla aynı ZIP paketine dağıtın: bunları normalde <project-root>\app_data\jobs\... yaptığınız gibi ekleyin (Web İşleri hızlı başlangıcında belirtildiği gibi dağıtım yoluna \site\wwwroot\app_data\jobs\... eşlenir).
  • Uygulamanızın ZIP paketinden ayrı olarak dağıtın: Her zamanki dağıtım yolu \site\wwwroot\app_data\jobs\... artık salt okunur olduğundan, Web İşi dosyalarını oraya dağıtamazsınız. Bunun yerine, Web İşi dosyalarını salt okunur olmayan öğesine \site\jobs\...dağıtın. Web İşleri'ne \site\wwwroot\app_data\jobs\... dağıtılır ve \site\jobs\... her ikisi de çalışır.

Not

\site\wwwroot Salt okunur olduğunda disable.job oluşturma gibi işlemler başarısız olur.

Sorun giderme

  • Doğrudan bir paketten çalıştırmak salt okunur hale getirir wwwroot . Uygulamanız bu dizine dosya yazmaya çalışırsa bir hata alır.
  • TAR ve GZIP biçimleri desteklenmez.
  • ZIP dosyası en fazla 1 GB olabilir
  • Bu özellik yerel önbellekle uyumlu değildir.
  • Geliştirilmiş soğuk başlangıç performansı için yerel Zip seçeneğini (WEBSITE_RUN_FROM_PACKAGE=1) kullanın.

Diğer kaynaklar