Spuštění aplikace v Azure App Service přímo z balíčku ZIP

V Azure App Servicemůžete své aplikace spouštět přímo ze souboru balíčku zip nasazení. Tento článek ukazuje, jak povolit tuto funkci ve vaší aplikaci.

Všechny ostatní metody nasazení v App Service mají něco společného: vaše soubory se nasazují do D:\home\site\wwwroot ve vaší aplikaci (nebo /Home/site/wwwroot pro aplikace pro Linux). Vzhledem k tomu, že aplikace používá stejný adresář za běhu, je možné, že nasazení selže kvůli konfliktům zámků souborů a že se aplikace bude chovat nepředvídatelné, protože některé soubory ještě nejsou aktualizované.

Naproti tomu, když spouštíte přímo z balíčku, soubory v balíčku nejsou zkopírovány do adresáře wwwroot . Místo toho se samotný balíček ZIP připojí přímo jako adresář wwwroot jen pro čtení. K dispozici je několik výhod pro spuštění přímo z balíčku:

  • Eliminuje konflikty zámků souborů mezi nasazením a modulem runtime.
  • Zajistí, že budou spuštěné jenom plně nasazené aplikace.
  • Dá se nasadit do produkční aplikace (s restartováním).
  • Zlepšuje výkon Azure Resource Manager nasazení.
  • Může snížit dobu studených časů, zejména pro funkce JavaScriptu s velkými stromy balíčků npm.

Poznámka

V současné době jsou podporovány pouze soubory balíčku ZIP.

Vytvoření balíčku ZIP projektu

Poznámka

Pokud jste soubory stáhli v balíčku ZIP, nejprve soubory rozbalte. pokud jste například stáhli balíček ZIP z GitHub, nemůžete tento soubor nasadit tak, jak je. GitHub přidá další vnořené adresáře, které nefungují s App Service.

V místním okně terminálu přejděte do kořenového adresáře projektu aplikace.

Tento adresář by měl obsahovat vstupní soubor vaší webové aplikace, například index.html, index. php a app.js. Může také obsahovat soubory správy balíčků, například project.json, composer.json, package.json, bower.json a requirements.txt.

Pokud nechcete, aby App Service spustila automatizaci nasazení za vás, spusťte všechny úlohy sestavení (například npm ,,, bower gulp composer a pip ) a ujistěte se, že máte všechny soubory, které potřebujete ke spuštění aplikace. Tento krok je nutný, pokud chcete balíček spustit přímo.

Vytvořte archiv ZIP se všemi položkami ve vašem projektu. V případě dotnet projektů je tato složka výstupní složkou dotnet publish příkazu. Následující příkaz využívá základní nástroj vašeho terminálu:

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

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

Povolit spuštění z balíčku

WEBSITE_RUN_FROM_PACKAGENastavení aplikace umožňuje spuštění z balíčku. Pokud ho chcete nastavit, spusťte následující příkaz pomocí Azure CLI.

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

WEBSITE_RUN_FROM_PACKAGE="1" umožňuje spustit aplikaci z místního balíčku aplikace. Můžete také Spustit ze vzdáleného balíčku.

Spustit balíček

Nejjednodušší způsob, jak balíček v App Service spustit, je pomocí příkazu Azure CLI AZ WebApp Deployment source config-zip . Příklad:

az webapp deployment source config-zip --resource-group <group-name> --name <app-name> --src <filename>.zip

Vzhledem k tomu WEBSITE_RUN_FROM_PACKAGE , že nastavení aplikace je nastavené, tento příkaz neextrahuje obsah balíčku do adresáře D:\home\site\wwwroot vaší aplikace. Místo toho odešle soubor ZIP jako D:\home\data\SitePackages a vytvoří packagename.txt ve stejném adresáři, který obsahuje název balíčku zip, který se má načíst za běhu. Pokud váš balíček ZIP nahrajete jiným způsobem (například FTP), budete muset vytvořit adresář D:\home\data\SitePackages a soubor packagename.txt ručně.

Příkaz také restartuje aplikaci. Protože WEBSITE_RUN_FROM_PACKAGE je nastavena, App Service připojí nahraný balíček jako adresář wwwroot jen pro čtení a spustí aplikaci přímo z tohoto připojeného adresáře.

Spustit z externí adresy URL

Balíček můžete také spustit z externí adresy URL, jako je například Azure Blob Storage. pomocí Průzkumník služby Azure Storage můžete odeslat soubory balíčku do svého účtu Blob Storage. Měli byste použít kontejner privátního úložiště se sdíleným přístupovým podpisem (SAS) nebo použít spravovanou identitu k tomu, aby modul runtime App Service mohl bezpečně přistupovat k balíčku.

Po nahrání souboru do úložiště objektů BLOB a zadání adresy URL SAS pro tento soubor nastavte WEBSITE_RUN_FROM_PACKAGE nastavení aplikace na adresu URL. V následujícím příkladu se používá Azure CLI:

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"

Pokud publikujete aktualizovaný balíček se stejným názvem pro úložiště objektů blob, musíte restartovat aplikaci, aby se aktualizovaný balíček načetl do App Service.

načtení balíčku z Azure Blob Storage pomocí spravované identity

Službu Azure Blob Storage nakonfigurovat tak, aby autorizuje požadavky pomocí Azure AD. To znamená, že místo generování klíče SAS s vypršením platnosti se můžete spoléhat na spravovanou identitu aplikace. Ve výchozím nastavení se použije identita přiřazená systémem aplikace. Pokud chcete zadat identitu přiřazenou uživatelem, můžete nastavit nastavení aplikace WEBSITE_RUN_FROM_PACKAGE_BLOB_MI_RESOURCE_ID na ID prostředku této identity. Nastavení může také jako hodnotu přijmout "SystemAssigned", i když je to stejné jako vynechání nastavení úplně.

Povolení načtení balíčku pomocí identity:

  1. Ujistěte se, že je objekt blob nakonfigurovaný pro privátní přístup.

  2. Udělte identitě roli čtenáře Storage objektů blob s oborem nad objektem blob balíčku. Podrobnosti o vytvoření přiřazení role najdete v tématu Přiřazení role Azure pro přístup k datům objektů blob.

  3. Nastavte WEBSITE_RUN_FROM_PACKAGE aplikaci na adresu URL objektu blob balíčku. Bude to pravděpodobně ve tvaru "https://{název-účtu-úložiště}.blob.core.windows.net/{název-kontejneru}/{cesta k balíčku}" nebo podobné.

Řešení potíží

  • Spuštění přímo z balíčku zpřístupňuje jen wwwroot pro čtení. Pokud se aplikace pokusí zapisovat soubory do tohoto adresáře, dojde k chybě.
  • Formáty TAR a GZIP se nepodporují.
  • Soubor ZIP může být nejvýše 1 GB.
  • Tato funkce není kompatibilní s místní mezipamětí.
  • Pro zlepšení výkonu pro studený start použijte místní možnost zip ( WEBSITE_RUN_FROM_PACKAGE = 1).

Další zdroje informací