Sdílet prostřednictvím


Osvědčené postupy pro nasazení

Poznámka:

Od 1. června 2024 můžou nově vytvořené aplikace App Service vygenerovat jedinečný výchozí název hostitele, který používá zásady <app-name>-<random-hash>.<region>.azurewebsites.netvytváření názvů . Stávající názvy aplikací zůstávají beze změny. Příklad:

myapp-ds27dh7271aah175.westus-01.azurewebsites.net

Další informace najdete v tématu Jedinečný výchozí název hostitele pro prostředek služby App Service.

Každý vývojový tým má jedinečné požadavky, které můžou ztížit implementaci efektivního kanálu nasazení v jakékoli cloudové službě. Tento článek představuje tři hlavní komponenty nasazení do služby Aplikace Azure Service: zdroje nasazení, kanály sestavení a mechanismy nasazení. Tento článek se věnuje také některým osvědčeným postupům a tipům pro konkrétní zásobníky jazyků.

Součásti nasazení

Tato část popisuje tři hlavní komponenty pro nasazení do služby App Service.

Zdroj nasazení

Zdrojem nasazení je umístění kódu aplikace. Pro produkční aplikace je zdrojem nasazení obvykle úložiště hostované softwarem pro správu verzí, jako je GitHub, BitBucket nebo Azure Repos. Ve scénářích vývoje a testování může být zdrojem nasazení projekt na místním počítači.

Kanál sestavení

Po rozhodnutí o zdroji nasazení je dalším krokem volba kanálu buildu. Kanál buildu načte zdrojový kód ze zdroje nasazení a spustí řadu kroků pro získání aplikace ve spustitelném stavu.

Kroky můžou zahrnovat kompilaci kódu, minifikaci HTML a JavaScriptu, spouštění testů a balení komponent. Konkrétní příkazy spouštěné kanálem buildu závisí na vašem zásobníku jazyka. Tyto operace můžete spustit na buildovém serveru, jako je Azure Pipelines, nebo místně.

Mechanismus nasazení

Mechanismus nasazení je akce použitá k vložení integrované aplikace do adresáře /home/site/wwwroot vaší webové aplikace. Adresář /wwwroot je připojené umístění úložiště sdílené všemi instancemi vaší webové aplikace. Když mechanismus nasazení umístí vaši aplikaci do tohoto adresáře, instance obdrží oznámení o synchronizaci nových souborů.

App Service podporuje následující mechanismy nasazení:

  • Koncové body Kudu: Kudu je opensourcový vývojářský nástroj, který běží jako samostatný proces ve službě Windows App Service. Běží jako druhý kontejner ve službě Linux App Service. Kudu zpracovává průběžné nasazování a poskytuje koncové body HTTP pro nasazení, jako je zipdeploy/.
  • FTP a WebDeploy: Pomocí přihlašovacích údajů webu nebo uživatele můžete nahrát soubory přes FTP nebo WebDeploy. Tyto mechanismy neprocházejí Kudu.

Nástroje pro nasazení, jako jsou Azure Pipelines, Jenkins a moduly plug-in editoru, používají jeden z těchto mechanismů nasazení.

Použití slotů nasazení

Kdykoli je to možné, při nasazení nového produkčního sestavení použijte sloty nasazení. S úrovní plánu služby App Service Standard nebo lépe můžete aplikaci nasadit do přípravného prostředí, ověřit změny a provádět orientační testy. Až budete připraveni, prohoďte přípravné a produkční sloty. Operace prohození zahřeje potřebné instance pracovních procesů tak, aby odpovídaly produkčnímu měřítku, což eliminuje výpadky.

Průběžné nasazování kódu

Pokud má váš projekt větve určené pro testování, kontrolu kvality a přípravu, měly by se všechny tyto větve průběžně nasazovat do přípravného slotu. Tento přístup se označuje jako návrh Gitflow. Tento návrh umožňuje zúčastněným stranám snadno posoudit a otestovat nasazenou větev.

Pro produkční slot by nikdy nemělo být povolené průběžné nasazování. Místo toho by se vaše produkční větev (často hlavní) měla nasadit do neprodukčního slotu. Až budete připraveni vydat základní větev, prohodíte ji do produkčního slotu. Přepnutí do produkčního prostředí místo nasazení do produkčního prostředí zabraňuje výpadkům a umožňuje vrátit změny zpět opětovným prohozením.

Diagram znázorňující tok mezi větvemi Dev, Staging a Main a sloty, do kterých jsou nasazené

Průběžné nasazování kontejnerů

Pro vlastní kontejnery z Dockeru nebo jiných registrů kontejnerů nasaďte image do přípravného slotu a prohoďte ji do produkčního prostředí, abyste zabránili výpadkům. Automatizace je složitější než nasazení kódu. Image musíte odeslat do registru kontejneru a aktualizovat značku image ve webové aplikaci.

Pro každou větev, kterou chcete nasadit do slotu, nastavte automatizaci pro každé potvrzení do větve.

  1. Sestavte a označte image. V rámci kanálu buildu označte image pomocí ID potvrzení Gitu, časového razítka nebo jiných identifikovatelných informací. Nejlepší není použít výchozí nejnovější značku. Jinak je obtížné trasovat, jaký kód je aktuálně nasazený, což ztěžuje ladění.
  2. Nasdílí označený obrázek. Po sestavení a označení image kanál odešle image do registru kontejneru. V dalším kroku slot nasazení stáhne označenou image z registru kontejneru.
  3. Aktualizujte slot nasazení pomocí nové značky image. Při aktualizaci této vlastnosti se lokalita automaticky restartuje a načítá novou image kontejneru.

Diagram znázorňuje vizuál využití slotu představující větve Web App, Container Registry a repository.

Tento článek obsahuje příklady běžných architektur automatizace.

Použití Azure DevOps

Služba App Service má integrované průběžné doručování kontejnerů prostřednictvím Centra nasazení. Přejděte do aplikace na webu Azure Portal. V části Nasazení vyberte Deployment Center. Podle pokynů vyberte úložiště a větev. Tento přístup konfiguruje kanál buildu a verze DevOps tak, aby automaticky sestavoval, označoval a nasazoval kontejner při odesílání nových potvrzení do vybrané větve.

Použití GitHub Actions

Nasazení kontejneru můžete také automatizovat pomocí GitHub Actions. Soubor pracovního postupu sestaví a označí kontejner pomocí ID potvrzení, odešle ho do registru kontejneru a aktualizuje zadanou webovou aplikaci novou značkou image.

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 }}'

Použití jiných poskytovatelů automatizace

Výše uvedené kroky platí pro další nástroje automatizace, jako je CircleCI nebo Travis CI. K aktualizaci slotů nasazení pomocí Azure CLI je však potřeba použít nové značky imagí v posledním kroku. Pokud chcete v automatizačním skriptu použít Azure CLI, vygenerujte instanční objekt pomocí následujícího příkazu.

az ad sp create-for-rbac --name "myServicePrincipal" --role contributor \
   --scopes /subscriptions/{subscription}/resourceGroups/{resource-group} \
   --sdk-auth

Ve skriptu se přihlaste pomocí az login --service-principala zadejte informace o instančním objektu. Pak můžete použít az webapp config container set k nastavení názvu kontejneru, značky, adresy URL registru a hesla registru. Další informace najdete v tématu Jak se přihlásit k Azure CLI v Circle CI.

Aspekty specifické pro jazyk

Mějte na paměti následující aspekty implementace Java, Node a .NET.

Java

K nasazení aplikací JAR použijte rozhraní API zipdeploy Kudu. Používejte wardeploy pro aplikace WAR. Pokud používáte Jenkinse, můžete tato rozhraní API použít přímo ve fázi nasazení. Další informace najdete v tématu Nasazení do služby Aplikace Azure Pomocí Jenkinse.

Uzel

Ve výchozím nastavení Kudu spustí kroky sestavení pro vaši aplikaci Node (npm install). Pokud používáte službu sestavení, jako je Azure DevOps, je sestavení Kudu zbytečné. Pokud chcete zakázat sestavení Kudu, vytvořte nastavení SCM_DO_BUILD_DURING_DEPLOYMENTaplikace s hodnotou false.

.NET

Ve výchozím nastavení Kudu spustí kroky sestavení pro vaši aplikaci .NET (dotnet build). Pokud používáte službu sestavení, jako je Azure DevOps, je sestavení Kudu zbytečné. Pokud chcete zakázat sestavení Kudu, vytvořte nastavení SCM_DO_BUILD_DURING_DEPLOYMENTaplikace s hodnotou false.

Další aspekty nasazení

Mezi další aspekty patří místní mezipaměť a vysoké využití procesoru nebo paměti.

Místní mezipaměť

Aplikace Azure Obsah služby je uložený ve službě Azure Storage a je vystavován trvalým způsobem jako sdílená složka obsahu. Některé aplikace ale potřebují vysoce výkonné úložiště obsahu jen pro čtení, které můžou běžet s vysokou dostupností. Tyto aplikace můžou využívat místní mezipaměť. Další informace najdete v tématu Aplikace Azure Přehled místní mezipaměti služby.

Poznámka:

Místní mezipaměť se nedoporučuje pro weby pro správu obsahu, jako je WordPress.

Pokud chcete zabránit výpadkům, vždy používejte místní mezipaměť se sloty nasazení. Informace o společném používání těchto funkcí najdete v tématu Osvědčené postupy.

Vysoké využití procesoru nebo paměti

Pokud váš plán služby App Service využívá více než 90 % dostupného procesoru nebo paměti, může mít základní virtuální počítač potíže se zpracováním vašeho nasazení. Pokud k této situaci dojde, dočasně vertikálně navyšte kapacitu počtu instancí, aby se nasazení provedlo. Po dokončení nasazení můžete počet instancí vrátit do předchozí hodnoty.

Další informace najdete v diagnostice služby App Service a zjistěte vhodné osvědčené postupy specifické pro váš prostředek.

  1. Přejděte na webovou aplikaci na webu Azure Portal.

  2. V levém navigačním panelu vyberte Diagnostika diagnostiky služby App Service a vyřešte problémy .

  3. Zvolte Dostupnost a výkon nebo prozkoumejte další možnosti, jako je analýza vysokého využití procesoru.

    Podívejte se na aktuální stav vaší aplikace, pokud jde o tyto osvědčené postupy.

Pomocí tohoto odkazu můžete také přímo otevřít diagnostiku služby App Service pro váš prostředek: https://portal.azure.com/?websitesextension_ext=asd.featurePath%3Ddetectors%2FParentAvailabilityAndPerformance#@microsoft.onmicrosoft.com/resource/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Web/sites/{siteName}/troubleshoot.