Sdílet prostřednictvím


Spuštění aplikace ve službě Aplikace Azure Service přímo z balíčku ZIP

Poznámka:

Spuštění z balíčku není podporováno pro aplikace v Pythonu. Při nasazování souboru ZIP kódu Pythonu je potřeba nastavit příznak pro povolení automatizace sestavení Azure. Automatizace sestavení vytvoří virtuální prostředí Pythonu pro vaši aplikaci a nainstaluje potřebné požadavky a balíček. Další podrobnosti najdete v tématu Automatizace sestavení.

Ve službě Aplikace Azure Můžete spouštět aplikace přímo ze souboru balíčku ZIP pro nasazení. Tento článek ukazuje, jak povolit tuto funkci ve vaší aplikaci.

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

Naproti tomu při spuštění přímo z balíčku se soubory v balíčku nekopírují do adresáře wwwroot . Místo toho se samotný balíček ZIP připojí přímo jako adresář wwwroot jen pro čtení. Spuštění přímo z balíčku má několik výhod:

  • Eliminuje konflikty zámků souborů mezi nasazením a modulem runtime.
  • Zajišťuje, že jsou kdykoli spuštěné jenom plně nasazené aplikace.
  • Dá se nasadit do produkční aplikace (s restartováním).
  • Zlepšuje výkon nasazení Azure Resource Manageru.
  • Může zkrátit dobu studeného spuštění, 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

Důležité

Při vytváření balíčku ZIP pro nasazení nezahrnujte kořenový adresář, ale pouze soubory a adresáře v něm. Pokud si stáhnete úložiště GitHub jako soubor ZIP, nemůžete tento soubor nasadit tak, jak je ve službě App Service. GitHub přidá další vnořené adresáře na nejvyšší úrovni, které nefungují se službou App Service.

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

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

Pokud nechcete, aby služba App Service spouštěla automatizaci nasazení za vás, spusťte všechny úlohy sestavení (například npm, bower, gulp, composera) a pipujistěte se, že máte všechny soubory, které potřebujete ke spuštění aplikace. Tento krok se vyžaduje, pokud chcete balíček spustit přímo.

Vytvořte archiv ZIP se všemi položkami ve vašem projektu. U dotnet projektů je to všechno ve výstupním adresáři dotnet publish příkazu (s výjimkou samotného výstupního adresáře). Například následující příkaz v terminálu pro vytvoření balíčku ZIP s obsahem aktuálního adresáře:

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

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

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

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

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 do vaší aplikace. Můžete také spustit ze vzdáleného balíčku.

Spuštění balíčku

Nejjednodušší způsob, jak spustit balíček ve službě App Service, je příkaz Azure CLI az webapp deployment source config-zip . Příklad:

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

WEBSITE_RUN_FROM_PACKAGE Vzhledem k tomu, že je nastavení aplikace nastavené, tento příkaz neextrahuje obsah balíčku do adresáře D:\home\site\wwwroot vaší aplikace. Místo toho nahraje soubor ZIP tak, jak je 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 balíček ZIP nahrajete jiným způsobem (například FTP), musíte vytvořit adresář D:\home\data\SitePackages a soubor packagename.txt ručně.

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

Místo toho spusťte z externí adresy URL.

Balíček můžete spustit také z externí adresy URL, například z Azure Blob Storage. Soubory balíčků můžete nahrát do účtu úložiště Blob pomocí Průzkumník služby Azure Storage. Kontejner privátního úložiště se sdíleným přístupovým podpisem (SAS) byste měli použít nebo použít spravovanou identitu , abyste umožnili zabezpečenému přístupu k balíčku modul runtime služby App Service.

Poznámka:

V současné době není možné migrovat existující prostředek služby App Service, který spouští místní balíček, aby se spustil ze vzdáleného balíčku. Budete muset vytvořit nový prostředek služby App Service nakonfigurovaný tak, aby běžel z externí adresy URL.

Jakmile soubor nahrajete do úložiště objektů blob a budete mít adresu URL SAS pro soubor, nastavte WEBSITE_RUN_FROM_PACKAGE nastavení aplikace na adresu URL. Následující příklad to provede pomocí 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 do úložiště objektů blob, musíte aplikaci restartovat, aby se aktualizovaný balíček načetl do služby App Service.

Přístup k balíčku ve službě Azure Blob Storage pomocí spravované identity

Službu Azure Blob Storage můžete nakonfigurovat tak, aby autorizovala požadavky s ID Microsoft Entra. Tato konfigurace znamená, že místo generování klíče SAS s vypršením platnosti můžete místo toho spoléhat na spravovanou identitu aplikace. Ve výchozím nastavení se používá identita přiřazená systémem aplikace. Pokud chcete zadat identitu přiřazenou uživatelem, můžete nastavit WEBSITE_RUN_FROM_PACKAGE_BLOB_MI_RESOURCE_ID nastavení aplikace na ID prostředku této identity. Nastavení může také přijmout SystemAssigned jako hodnotu, která odpovídá vynechání nastavení.

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ář dat objektů blob služby Storage 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. WEBSITE_RUN_FROM_PACKAGE Nastavte nastavení aplikace na adresu URL objektu blob balíčku. Tato adresa URL je obvykle formuláře https://{storage-account-name}.blob.core.windows.net/{container-name}/{path-to-package} nebo podobná.

Nasazení souborů webové úlohy při spuštění z balíčku

Soubory webové úlohy můžete nasadit dvěma způsoby, když povolíte spuštění aplikace z balíčku:

  • Nasazení do stejného balíčku ZIP jako aplikace: zahrňte je jako obvykle <project-root>\app_data\jobs\... (který se mapuje na cestu \site\wwwroot\app_data\jobs\... nasazení, jak je uvedeno v rychlém startu WebJobs).
  • Nasazení odděleně od balíčku ZIP aplikace: Vzhledem k tomu, že obvyklá cesta \site\wwwroot\app_data\jobs\... nasazení je teď jen pro čtení, nemůžete tam nasadit soubory webové úlohy. Místo toho nasaďte soubory webové úlohy, které \site\jobs\...nejsou jen pro čtení. WebJobs nasazené do \site\wwwroot\app_data\jobs\... a \site\jobs\... oba se spouštějí.

Poznámka:

Když \site\wwwroot se stane jen pro čtení, operace, jako je vytvoření disable.job , selžou.

Řešení problému

  • Spuštění přímo z balíčku způsobí, že wwwroot je jen pro čtení. Pokud se aplikace pokusí zapisovat soubory do tohoto adresáře, zobrazí se chyba.
  • Formáty TAR a GZIP nejsou podporovány.
  • Soubor ZIP může být maximálně 1 GB.
  • Tato funkce není kompatibilní s místní mezipamětí.
  • Pokud chcete zvýšit výkon studeného startu, použijte místní možnost Zip (WEBSITE_RUN_FROM_PACKAGE=1).

Další materiály