Svenska Svenska | English English

Hur Du Kör Din Azure Web App Från Zipfil

Johan Åhlén by Johan Åhlén • Updated

Att köra dina Azure Web Apps (App Services) från paket (zipfiler) är ett alternativt till den vanliga deployment modellen. Här nedan kommer jag att beskriva hur du sätter upp en paket deployment modell ("Run From Package") och vad fördelarna/nackdelarna är.

Microsoft har en beskrivning här: Run your app from a zip package. Jag kommer att förtydliga deras beskrivning här, samt även visa hur du automatiserar publiceringen.

Fördelar

Att köra dina Azure Web App (App Services) från ett paket (zipfil) ger dig ett antal fördelar:

Tyvärr innebär det också vissa nackdelar/begränsningar:

Sätta Upp Package Deployment i Visual Studio

Jag kommer att beskriva hur man sätter upp det för Visual Studio publishing. Det kan också sätta upp för CI/CD på ett liknande sätt.

Steg 1 - Installera Azure CLI (om du inte har det redan)

Mina instruktioner baseras på Azure CLI. Du kan ladda ned det från Microsoft här.

Steg 2 - Aktivera Package Deployment i Application Settings

Först måste du konfigurera dina Application Settings. Lägg till en ny inställning som heter WEBSITE_RUN_FROM_PACKAGE och sätt värdet till 1. Detta kan du antingen göra från Azure Portal:

Azure App Service Run From Package

Eller med hjälp av Azure CLI:


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

Steg 3 - Skapa en ny Publish Profile i Visual Studio

Välj Folder typen och kör vidare med defaultinställningar. Detta placerar outputen i bin\Release\netcoreapp3.1\publish\ i din projektmapp.

Azure App Service Folder Publish Profile

Steg 4 - Testa Manual Package Deployment

Publicera din app (med din nya Publish Profile). Gå sedan till mappen {Your project folder\bin\Release\netcoreapp3.1\publish} och skapa en zipfil med allt innehåll i mappen. Du kan göra detta i Windows genom att välja alla filer och sedan Högermusklick ≫ Skicka Till ≫ Komprimerad Mapp. Se till att zipfilen har filerna direkt i rooten.

Package Deployment zip-file

Sedan, öppna en kommandoprompt och kör följande kommandon:


az login
az account set --subscription "your subscription name"
az webapp deployment source config-zip --resource-group <group-name> --name <app-name> --src <your-zipfile-name>.zip

(az login och az account set är bara nödvändiga om du inte redan är inloggad genom Azure CLI)

Nu skall din zipfil vara uppladdad i mappen /home/data/SitePackages på din app service. Du kan använda SSH eller Command Prompt i Azureportalen för att kontrollera:

Azure App Service /home/data/SitePackages

Notera att du också har fått packagename.txt-filen. Den innehåller namnet på din zipfil (och kommer alltid att innehålla namnet på zipfilen som webservern skall använda).

Din zipfil skall ha monterats i read-only läge på /home/site/wwwroot. Du kan testa att försöka skapa en undermapp där. Det skall misslyckas.

Steg 5 - Automatisera Package Deployment

I Visual Studio, leta upp din Folder Publish-fil. Öppna den för redigering genom att dubbelklicka på den. Jag föreslår också att du döper om den från FolderProfile till något liknande PackageDeployment.

I publishfilen, lägg till en Target sektion som i bilden nedan.

Här är koden som du skall lägga till inuti Target:

  <Target Name="CustomActionsAfterPublish" AfterTargets="AfterPublish">
    <PropertyGroup>
      <ZipfileName>$([System.DateTime]::Now.ToString("yyyyMMddHHmmss")).zip</ZipfileName>
    </PropertyGroup>
    <ZipDirectory SourceDirectory="$(PublishUrl)" DestinationFile="$(MSBuildProjectDirectory)\bin\Release\$(ZipfileName)"/>
    <Exec Command='az account show' WorkingDirectory="C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2\wbin\" ContinueOnError="true" StandardOutputImportance="low" StandardErrorImportance="low"/>
    <Exec Command='az login' WorkingDirectory="C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2\wbin\" Condition="$(MSBuildLastTaskResult) == false" StandardOutputImportance="low" StandardErrorImportance="low" />
    <Exec Command='az webapp deployment source config-zip --resource-group "my resource group" --name "my app name" --src $(MSBuildProjectDirectory)\bin\Release\$(ZipfileName)' WorkingDirectory="C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2\wbin\" />
  </Target>

I koden ovanför:

Kör din Publishing Profile. Kolla in resultatet!

Ytterligare Steg

Håll koll på /home/data/SitePackages biblioteket. Du kan behöva radera gamla zipfiler där för att undvika att få slut på lagringsutrymme.

Notera också att din website inte öppnas i din webbrowser efter publicering. Jag har inte kikat med på hur du automatiskt öppnar din Site URL, men jag tror det går att klara sig utan.

Azure Azure Web Apps App Service on Linux

More about Azure

Aktivera Cachning på dina Azure Storage Blobs
Azure Web App Uppdateras Inte Efter Publicering
WEBSITE_DYNAMIC_CACHE och WEBSITE_LOCAL_CACHE_OPTION

More about Azure Web Apps

Azure Web App Uppdateras Inte Efter Publicering
WEBSITE_DYNAMIC_CACHE och WEBSITE_LOCAL_CACHE_OPTION
Azure Linux Publish Fel (Web deployment task failed. Could not connect to the remote computer)

More about App Service on Linux

Azure Web App Uppdateras Inte Efter Publicering
Azure Linux Publish Fel (Web deployment task failed. Could not connect to the remote computer)