Sdílet prostřednictvím


Nasazení webových aplikací v Pythonu do služby App Service pomocí GitHub Actions (Linux)

Tento článek popisuje, jak pomocí platformy kontinuální integrace a průběžného doručování (CI/CD) v GitHub Actions nasadit webovou aplikaci v Pythonu do služby Azure App Service v Linuxu. Pracovní postup GitHub Actions automaticky sestaví kód a nasadí ho do instance služby App Service, kdykoli dojde k potvrzení do úložiště. Do pracovního postupu GitHub Actions můžete přidat další automatizaci, jako jsou testovací skripty, kontroly zabezpečení a nasazení s více úlohami.

Vytvoření úložiště pro kód aplikace

K dokončení postupů v tomto článku potřebujete webovou aplikaci Pythonu potvrzenou do úložiště GitHub.

Poznámka:

Pokud vaše aplikace používá Django a databázi SQLite , nebude pro tyto postupy fungovat. SQLite se nepodporuje ve většině prostředí hostovaných v cloudu kvůli místním omezením úložiště založeného na souborech. Zvažte přechod na cloudovou databázi, jako je PostgreSQL nebo Azure Cosmos DB. Další informace najdete v části Přehled aspektů Django v pozdější části tohoto článku.

Vytvoření cílové instance služby App Service

Nejrychlejší způsob, jak vytvořit instanci služby App Service, je použít rozhraní příkazového řádku Azure (CLI) prostřednictvím interaktivní služby Azure Cloud Shell. Cloud Shell zahrnuje Git a Azure CLI. V následujícím postupu pomocí příkazu az webapp up vytvoříte instanci služby App Service a provedete počáteční nasazení aplikace.

  1. Přihlaste se k portálu Azure na adrese https://portal.azure.com.

  2. Otevřete Azure CLI výběrem možnosti Cloud Shell na panelu nástrojů portálu:

    Snímek obrazovky znázorňující, jak otevřít Azure Cloud Shell pomocí akce ikony na panelu nástrojů webu Azure Portal

  3. V Cloud Shellu vyberte v rozevírací nabídce možnost Bash :

    Snímek obrazovky, který ukazuje, jak vybrat možnost Bash v Cloud Shellu

  4. V Cloud Shellu naklonujte úložiště pomocí příkazu git clone .

    Návod

    Pokud chcete příkazy nebo text vložit do Cloud Shellu, použijte klávesovou zkratku Ctrl+Shift+V nebo klikněte pravým tlačítkem myši a vyberte Vložit z místní nabídky.

    • Pro ukázkovou aplikaci Flask můžete použít následující příkaz. <github-user> Část nahraďte názvem účtu GitHubu, do kterého jste úložiště rozvětvovali:

      git clone https://github.com/<github-user>/python-sample-vscode-flask-tutorial.git
      
    • Pokud je vaše aplikace v jiném úložišti, nastavte GitHub Actions pro konkrétní úložiště. <github-user> Část nahraďte názvem účtu GitHubu, do kterého jste forkovali úložiště, a do zástupného symbolu <repo-name> zadejte skutečný název úložiště:

      git clone https://github.com/<github-user>/<repo-name>.git
      

    Poznámka:

    Cloud Shell je zajištěný účtem Azure Storage ve skupině prostředků s názvem cloud-shell-storage-your-region<>. Tento účet úložiště obsahuje image systému souborů Cloud Shell, která ukládá klonované úložiště. Jsou malé poplatky za toto úložiště. Účet úložiště můžete odstranit po dokončení tohoto článku spolu s dalšími prostředky, které vytvoříte.

  5. V Cloud Shellu změňte adresář do složky úložiště pro vaši aplikaci v Pythonu, takže příkaz az webapp up aplikaci rozpozná jako Python. Pro ukázkovou aplikaci Flask použijte následující příkaz:

    cd python-sample-vscode-flask-tutorial
    
  6. V Cloud Shellu pomocí příkazu az webapp up vytvořte instanci služby App Service a proveďte počáteční nasazení aplikace:

    az webapp up --name <app-service-name> --runtime "PYTHON:3.9"
    
    • <app-service-name> Jako zástupný symbol zadejte název služby App Service, který je v Azure jedinečný. Název musí mít délku 3 až 60 znaků a může obsahovat jenom písmena, číslice a pomlčky. Název musí začínat písmenem a končit písmenem nebo číslem.

    • Seznam dostupných modulů runtime v systému zobrazíte pomocí az webapp list-runtimes příkazu.

    • Když do příkazu zadáte hodnotu modulu runtime, použijte PYTHON:X.Y formát, kde X.Y je hlavní a podverze Pythonu.

    • Umístění oblasti instance služby App Service můžete zadat také pomocí parametru --location . Seznam dostupných umístění zobrazíte pomocí az account list-locations --output table příkazu.

  7. Pokud má vaše aplikace vlastní spouštěcí skript, spusťte skript pomocí příkazu az webapp config .

    • Pokud vaše aplikace nemá vlastní spouštěcí skript, pokračujte dalším krokem.

    • Pro ukázkovou aplikaci Flask potřebujete přístup ke spouštěcímu skriptu v souboru startup.txt spuštěním následujícího příkazu:

      az webapp config set \
         --resource-group <resource-group-name> \
         --name <app-service-name> \
         --startup-file startup.txt
      

      Zadejte název vaší skupiny prostředků do <resource-group-name> a název instance služby App Service do <app-service-name>. Pokud chcete najít název skupiny prostředků, zkontrolujte výstup z předchozího az webapp up příkazu. Název skupiny prostředků zahrnuje název účtu Azure následovaný příponou _rg , jako v <azure-account-name>_rg_.

  8. Pokud chcete zobrazit spuštěnou aplikaci, otevřete prohlížeč a přejděte do koncového bodu nasazení vaší instance služby App Service. V následující adrese URL nahraďte <app-service-name> zástupný text názvem vaší instance služby App Service:

    http://<app-service-name>.azurewebsites.net
    

    Pokud se zobrazí obecná stránka, počkejte několik sekund, než se instance služby App Service spustí, a aktualizujte stránku.

    • Pokud se stále zobrazuje obecná stránka, ověřte, že jste nasadili ze správné složky.
    • U ukázkové aplikace Flask potvrďte, že jste nasadili ze složky python-sample-vscode-flask-tutorial . Zkontrolujte také, že jste správně nastavili spouštěcí příkaz.

Nastavení průběžného nasazování ve službě App Service

V dalším postupu nastavíte průběžné doručování (CD), což znamená, že při aktivaci pracovního postupu dojde k novému nasazení kódu. Spouštěčem v příkladu článku je jakákoli změna hlavní větve úložiště, například ve formě pull requestu (PR).

  1. V Cloud Shellu ověřte, že jste v kořenovém adresáři pro váš systém (~) a ne v podsložce aplikace, jako je python-sample-vscode-flask-tutorial.

  2. Přidejte GitHub Actions pomocí příkazu az webapp deployment github-actions add . Nahraďte zástupné symboly konkrétními hodnotami:

    az webapp deployment github-actions add \
      --repo "<github-user>/<github-repo>" \
      --resource-group <resource-group-name> \
      --branch <branch-name> \
      --name <app-service-name> \
      --login-with-github
    
    • Tento --login-with-github parametr používá interaktivní metodu k načtení osobního přístupového tokenu. Postupujte podle pokynů a dokončete ověřování.

    • Pokud systém narazí na existující soubor pracovního postupu se stejným názvem instance služby App Service, postupujte podle pokynů a zvolte, jestli chcete pracovní postup přepsat. Pomocí parametru --force s příkazem můžete automaticky přepsat všechny konfliktní pracovní postupy.

    Příkaz add dokončí následující úlohy:

    • Vytvoří nový soubor workflowu na cestě .github/workflows/<workflow-name>.yml ve vašem repositáři. Název souboru obsahuje název vaší instance služby App Service.
    • Načte profil publikování s tajnými kódy pro instanci služby App Service a přidá ho jako tajný kód akce GitHubu. Název tajného kódu začíná AZUREAPPSERVICE_PUBLISHPROFILE_. Na tento tajný kód se odkazuje v souboru pracovního postupu.
  3. Získejte podrobnosti o konfiguraci nasazení správy zdrojového kódu pomocí příkazu az webapp deployment source show . Nahraďte zástupné parametry konkrétními hodnotami:

    az webapp deployment source show \
      --name <app-service-name> \
      --resource-group <resource-group-name>
    
  4. Ve výstupu příkazu potvrďte hodnoty pro vlastnosti repoUrl a branch. Tyto hodnoty by se měly shodovat s hodnotami, které jste zadali pomocí add příkazu.

Prozkoumání pracovního postupu a akcí GitHubu

Definice pracovního postupu se zadává v souboru YAML (.yml) v cestě /.github/workflows/ ve vašem úložišti. Tento soubor YAML obsahuje různé kroky a parametry, které tvoří pracovní postup, automatizovaný proces přidružený k úložišti GitHub. Pomocí pracovního postupu můžete vytvářet, testovat, zabalit, vydávat a nasazovat libovolný projekt na GitHubu.

Každý pracovní postup se skládá z jedné nebo více úloh a každá úloha je sada kroků. Každý krok je shell skript nebo akce. Každá úloha má v souboru pracovního postupu oddíl Akce .

Pokud jde o pracovní postup nastavený pomocí kódu Pythonu pro nasazení do služby Azure App Service, má pracovní postup následující akce:

Činnost Popis
pokladna Podívejte se na úložiště na runneru, agenta GitHub Actions.
setup-python Nainstalujte Python na spouštěč.
appservice-build Sestavte webovou aplikaci.
nasazení webových aplikací Nasaďte webovou aplikaci pomocí přihlašovacích údajů profilu publikování k ověření v Azure. Přihlašovací údaje jsou uložené v tajném kódu GitHubu.

Šablona pracovního postupu použitá k vytvoření pracovního postupu je Azure/actions-workflow-samples.

Pracovní postup se aktivuje při událostech push na zadanou větev. Událost a větev jsou definovány na začátku souboru pracovního postupu. Například následující úryvek kódu ukazuje, že workflow se aktivuje při událostech push do main větve.

on:
  push:
    branches:
    - main

Autorizované aplikace OAuth

Při nastavování průběžného nasazování autorizujete Službu Azure App Service jako autorizovanou aplikaci OAuth pro váš účet GitHubu. App Service používá autorizovaný přístup k vytvoření souboru GitHub akce YAML na cestě .github/workflows/<workflow-name>.yml ve vašem úložišti.

Pokud chcete zobrazit autorizované aplikace a odvolat oprávnění v rámci účtů GitHubu, přejděte do části Integrace nastavení>/Aplikace:

Snímek obrazovky, který ukazuje, jak zobrazit autorizované aplikace OAuth pro účet GitHubu

Tajemství profilu publikování pracovního postupu

V souboru pracovního postupu .github/workflows/<workflow-name>.yml přidaný do úložiště je zástupný symbol pro přihlašovací údaje profilu publikování vyžadované pro úlohu nasazení pracovního postupu. Informace o profilu publikování se ukládají zašifrované v úložišti.

Pokud chcete zobrazit tajné informace, přejděte do části Nastavení>Zabezpečení>Tajné a proměnné>Akce:

Snímek obrazovky, který ukazuje, jak zobrazit tajné kódy akcí pro úložiště na GitHubu

V tomto článku se akce GitHubu ověřuje pomocí pověření z profilu publikování. Existují i jiné způsoby ověřování, například pomocí služebního principálu nebo OpenID Connect. Další informace najdete v tématu Nasazení do služby App Service pomocí GitHub Actions.

Spuštění a testování pracovního postupu

Posledním krokem je otestování pracovního postupu provedením změny v úložišti.

  1. V prohlížeči přejděte do forku ukázkového úložiště (nebo použitého úložiště) a vyberte větev, kterou jste nastavili jako součást triggeru:

    Snímek obrazovky znázorňující, jak přejít do úložiště a větve, kde je definovaný pracovní postup GitHub Actions

  2. Proveďte malou změnu webové aplikace v Pythonu.

    Pro kurz Flasku je tady jednoduchá změna:

    1. Přejděte do souboru /hello-app/templates/home.html ve větvi triggeru.
    2. Vyberte Upravit (tužka).
    3. V Editoru vyhledejte příkaz print <p> a přidejte text "Znovu nasazen!"
  3. Proveďte změnu přímo ve větvi, na které pracujete.

    1. V editoru vyberte Potvrdit změny v pravém horním rohu. Otevře se okno Potvrdit změny .
    2. V okně Potvrdit změny upravte zprávu potvrzení podle potřeby a vyberte Potvrdit změny.

    Proces potvrzení aktivuje pracovní postup GitHub Actions.

Pracovní postup můžete aktivovat také ručně:

  1. Přejděte na kartu Akce v úložišti nastaveném pro průběžné nasazování.

  2. Vyberte pracovní postup v seznamu pracovních postupů a pak vyberte Spustit pracovní postup.

Řešení potíží s neúspěšnými pracovními postupy

Stav pracovního postupu můžete zkontrolovat na kartě Akce úložiště aplikace. Když prozkoumáte soubor pracovního postupu vytvořený v tomto článku, zobrazí se dvě úlohy: sestavení a nasazení. Připomínáme, že pracovní postup je založený na šabloně Azure/actions-workflow-samples .

V případě neúspěšné úlohy se podívejte na výstup jejích úkolů pro informace o selhání.

Tady jsou některé běžné problémy, které je potřeba prozkoumat:

  • Pokud aplikace selže kvůli chybějící závislosti, vášrequirements.txt soubor se během nasazování nezpracoval. K tomuto chování dochází v případě, že jste webovou aplikaci vytvořili přímo na portálu, a ne pomocí az webapp up příkazu, jak je znázorněno v tomto článku.

  • Pokud jste službu App Service zřídili prostřednictvím portálu, může být nastavení akce sestavení SCM_DO_BUILD_DURING_DEPLOYMENT nenastavené. Toto nastavení musí být nastaveno na truehodnotu . Příkaz az webapp up nastaví akci sestavení automaticky.

  • Pokud se zobrazí chybová zpráva týkající se časového limitu handshake TLS, spusťte pracovní postup ručně tak, že na kartě Akce v úložišti aplikace vyberete Aktivovat automatické nasazení. Můžete určit, jestli je časový limit dočasným problémem.

  • Pokud pro aplikaci kontejneru nastavíte průběžné nasazování, jak je znázorněno v tomto článku, vytvoří se vám automaticky počáteční soubor pracovního postupu .github/workflows/<workflow-name>.yml . Pokud jste soubor upravili, odeberte změny, abyste zjistili, jestli příčinou selhání nejsou.

Spuštění skriptu po nasazení

Skript po nasazení může dokončit několik úloh, jako je definování proměnných prostředí očekávaných kódem aplikace. Skript přidáte jako součást kódu aplikace a skript spustíte pomocí spouštěcího příkazu.

Pokud se chcete vyhnout pevnému kódování hodnot proměnných v souboru YAML pracovního postupu, zvažte konfiguraci proměnných v GitHubu a odkazování na názvy proměnných ve skriptu. Můžete vytvořit šifrované tajné kódy pro úložiště nebo pro prostředí (úložiště účtů). Další informace najdete v tématu Použití tajných kódů v GitHub Actions.

Přezkoumání úvah o Django

Jak jsme si poznamenali dříve v tomto článku, můžete pomocí GitHub Actions nasadit aplikace Django do Služby Azure App Service v Linuxu, pokud používáte samostatnou databázi. Databázi SQLite nemůžete použít, protože App Service uzamkne soubor db.sqlite3 , který brání čtení i zápisu. Toto chování nemá vliv na externí databázi.

Článek konfigurace aplikace Pythonu ve službě App Service – proces spuštění kontejneru popisuje, jak App Service automaticky hledá soubor wsgi.py v kódu aplikace, který obvykle obsahuje objekt aplikace. Při použití příkazu k nastavení spouštěcího webapp config set příkazu jste použili --startup-file parametr k určení souboru, který obsahuje objekt aplikace. Příkaz webapp config set není k dispozici v akci webapps-deploy. Místo toho můžete pomocí startup-command parametru zadat spouštěcí příkaz. Například následující kód ukazuje, jak zadat spouštěcí příkaz v souboru pracovního postupu:

startup-command: startup.txt

Když používáte Django, obvykle chcete migrovat datové modely pomocí python manage.py migrate příkazu po nasazení kódu aplikace. Příkaz migrate můžete spustit ve skriptu po nasazení.

Odpojte GitHub Actions

Odpojení GitHub Actions od instance služby App Service umožňuje překonfigurovat nasazení aplikace. Můžete zvolit, co se stane se souborem pracovního postupu po odpojení a jestli chcete soubor uložit nebo odstranit.

Pomocí následujícího příkazu Azure CLI az webapp deployment github-actions remove odpojte GitHub Actions. Nahraďte zástupné symboly konkrétními hodnotami:

az webapp deployment github-actions remove \
  --repo "<github-username>/<github-repo>" \
  --resource-group <resource-group-name> \
  --branch <branch-name> \
  --name <app-service-name> \
  --login-with-github

Vyčistěte zdroje

Abyste se vyhnuli poplatkům za prostředky Azure vytvořené v tomto článku, odstraňte skupinu prostředků, která obsahuje instanci služby App Service a plán služby App Service.

Kdekoli je nainstalované Rozhraní příkazového řádku Azure, včetně Azure Cloud Shellu, můžete k odstranění skupiny prostředků použít příkaz az group delete :

az group delete --name <resource-group-name>

Odstranění účtu úložiště

Pokud chcete odstranit účet úložiště, který udržuje systém souborů pro Cloud Shell, což způsobuje malé měsíční poplatky, odstraňte skupinu prostředků, která začíná cloud-shell-storage-. Pokud jste jediným uživatelem skupiny, je bezpečné odstranit skupinu prostředků. Pokud existují další uživatelé, můžete odstranit účet úložiště ve skupině prostředků.

Aktualizace účtu a úložiště GitHub

Pokud odstraníte skupinu prostředků Azure, zvažte provedení následujících úprav účtu GitHubu a úložiště připojeného k průběžnému nasazování:

  • V úložišti aplikace odeberte soubor .github/workflows/<workflow-name>.yml .
  • V nastavení úložiště aplikací odeberte tajný klíč AZUREAPPSERVICE_PUBLISHPROFILE_ vytvořený pro pracovní postup.
  • V nastavení účtu GitHub odeberte Službu Azure App Service jako autorizovanou aplikaci Oauth pro váš účet GitHubu.