Megosztás a következőn keresztül:


Python-webalkalmazások üzembe helyezése az App Service-ben a GitHub Actions (Linux) használatával

Ez a cikk bemutatja, hogyan használható a folyamatos integrációs és folyamatos kézbesítési (CI/CD) platform a GitHub Actionsben Python-webalkalmazás üzembe helyezéséhez Linuxon az Azure App Service-ben. A GitHub Actions-munkafolyamat automatikusan létrehozza a kódot, és üzembe helyezi azt az App Service-példányon, amikor véglegesítést végez az adattárban. A GitHub Actions-munkafolyamatban további automatizálásokat is hozzáadhat, például tesztszkripteket, biztonsági ellenőrzéseket és többlépcsős üzembe helyezést.

Adattár létrehozása alkalmazáskódhoz

A cikkben ismertetett eljárások elvégzéséhez egy GitHub-adattárban véglegesített Python-webalkalmazásra van szükség.

Megjegyzés:

Ha az alkalmazás Django-t és SQLite-adatbázist használ, az nem fog működni ezeken az eljárásokon. Az SQLite a legtöbb felhőalapú környezetben nem támogatott a helyi fájlalapú tárolási korlátozások miatt. Érdemes lehet felhőkompatibilis adatbázisra váltani, például a PostgreSQL-re vagy az Azure Cosmos DB-re. További információ: A Django szempontjainak áttekintése a cikk későbbi részében.

A kijelölt App Service példányának létrehozása

Az App Service-példányok létrehozásának leggyorsabb módja az Azure parancssori felületének (CLI) használata az interaktív Azure Cloud Shellen keresztül. A Cloud Shell tartalmazza a Gitet és az Azure CLI-t. Az alábbi eljárás során az az webapp up paranccsal hozza létre az App Service-példányt, és végezze el az alkalmazás kezdeti üzembe helyezését.

  1. Jelentkezzen be az Azure Portalra a https://portal.azure.com webhelyen.

  2. Nyissa meg az Azure CLI-t a Cloud Shell lehetőség kiválasztásával a portál eszköztárán:

    Képernyőkép az Azure Cloud Shell megnyitásáról az Azure Portal eszköztárának ikonműveletével.

  3. A Cloud Shellben válassza a Bash lehetőséget a legördülő menüben:

    Képernyőkép arról, hogyan választhatja ki a Bash lehetőséget a Cloud Shellben.

  4. A Cloud Shellben klónozza az adattárat a Git Clone paranccsal.

    Jótanács

    Parancsok vagy szöveg Cloud Shellbe való beillesztéséhez használja a Ctrl+Shift+V billentyűparancsot, vagy kattintson a jobb gombbal, és válassza a Helyi menü Beillesztés parancsát .

    • A Flask-mintaalkalmazáshoz az alábbi parancsot használhatja. Cserélje le a <github-user> részt annak a GitHub-fióknak a nevére, ahol forkolta a tárházat.

      git clone https://github.com/<github-user>/python-sample-vscode-flask-tutorial.git
      
    • Ha az alkalmazás egy másik adattárban található, állítsa be a GitHub Actionst az adott adattárhoz. Cserélje le a <github-user> részt annak a GitHub-fióknak a nevére, ahol elágaztatta a repót, és adja meg a tényleges repónév a <repo-name> helyőrzőben:

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

    Megjegyzés:

    A Cloud Shellt egy Azure Storage-fiók felügyeli egy cloud-shell-storage-your-region<> nevű erőforráscsoportban. Ez a tárfiók tartalmazza a Cloud Shell fájlrendszer képét, amely a klónozott adattárat tárolja. Ennek a tárolónak kis költsége van. A cikk befejezése után törölheti a tárfiókot, valamint a létrehozott egyéb erőforrásokat.

  5. A Cloud Shellben módosítsa a címtárat a Python-alkalmazás adattármappájába, így az az webapp up parancs Pythonként ismeri fel az alkalmazást. A Flask-mintaalkalmazáshoz a következő parancsot kell használnia:

    cd python-sample-vscode-flask-tutorial
    
  6. A Cloud Shellben az az webapp up paranccsal hozzon létre egy App Service-példányt, és végezze el az alkalmazás kezdeti üzembe helyezését:

    az webapp up --name <app-service-name> --runtime "PYTHON:3.9"
    
    • A <app-service-name> helyőrzőről adjon meg egy olyan App Service nevet, amely az Azure-ban egyedi. A névnek 3–60 karakter hosszúságúnak kell lennie, és csak betűket, számokat és kötőjeleket tartalmazhat. A névnek betűvel kell kezdődnie, és betűvel vagy számmal kell végződnie.

    • A rendszeren elérhető futtatókörnyezetek listájához használja a az webapp list-runtimes parancsot.

    • Amikor megadja a futtatókörnyezet értékét a parancsban, használja a PYTHON:X.Y formátumot, ahol X.Y a Python fő- és alverziója található.

    • A --location paraméterrel megadhatja az App Service-példány régiójának helyét is. Az elérhető helyek listájához használja a az account list-locations --output table parancsot.

  7. Ha az alkalmazás egyéni indítási szkripttel rendelkezik, az az webapp config paranccsal kezdeményezheti a szkriptet.

    • Ha az alkalmazás nem rendelkezik egyéni indítási szkripttel, folytassa a következő lépéssel.

    • A Flask-mintaalkalmazáshoz az alábbi parancs futtatásával kell hozzáférnie a startup.txt fájlban lévő indítási szkripthez:

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

      Adja meg az erőforráscsoport nevét és az App Service-példány nevét a <resource-group-name> és <app-service-name> helyőrzőkben. Az erőforráscsoport nevének megkereséséhez ellenőrizze az előző az webapp up parancs kimenetét. Az erőforráscsoport neve tartalmazza az Azure-fiók nevét, majd a _rg utótagot, ahogyan az <azure-account-name>_rg_ esetében is.

  8. A futó alkalmazás megtekintéséhez nyisson meg egy böngészőt, és nyissa meg az App Service-példány üzembehelyezési végpontját. A következő URL-címben cserélje le a <app-service-name> helyőrzőt az App Service-példány nevére:

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

    Ha általános lapot lát, várjon néhány másodpercet, amíg az App Service-példány elindul, és frissítse a lapot.

    • Ha továbbra is megjelenik egy általános lap, győződjön meg arról, hogy a megfelelő mappából telepítette.
    • A Flask-mintaalkalmazás esetében ellenőrizze, hogy üzembe helyezte-e a python-sample-vscode-flask-tutorial mappából. Ellenőrizze azt is, hogy helyesen állította-e be az indítási parancsot.

Folyamatos üzembe helyezés beállítása az App Service-ben

A következő eljárásban beállítja a folyamatos kézbesítést (CD), ami azt jelenti, hogy egy új kód üzembe helyezése történik, amikor egy munkafolyamat aktiválódik. A cikkben szereplő példa eseményindítója az adattár ágának bármilyen módosítása, például lekéréses kérelem (PR) esetén.

  1. A Cloud Shellben győződjön meg arról, hogy a rendszer gyökérkönyvtárában (~) van, és nem egy alkalmazás almappájában, például python-sample-vscode-flask-tutorial.

  2. GitHub Actions-t az az webapp deployment github-actions add paranccsal adhat hozzá. Cserélje le a helyőrzőket a megadott értékekre:

    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
    
    • A --login-with-github paraméter interaktív módszerrel kéri le a személyes hozzáférési jogkivonatot. Kövesse az utasításokat, és fejezze be a hitelesítést.

    • Ha a rendszer egy meglévő munkafolyamat-fájlt talál ugyanazzal az App Service-példánynévvel, az utasításokat követve döntse el, hogy felülírja-e a munkafolyamatot. A --force paramétert a paranccsal együtt használhatja, hogy automatikusan felülírja az ütköző munkafolyamatokat.

    A add parancs a következő feladatokat hajtja végre:

    • Létrehoz egy új munkafolyamat-fájlt a .github/workflows/<workflow-name>.yml elérési úton az adattárban. A fájlnév tartalmazza az App Service-példány nevét.
    • Lekéri az App Service-példány titkos kulcsait tartalmazó közzétételi profilt, és GitHub-művelettitkként adja hozzá. A titkos kód neve AZUREAPPSERVICE_PUBLISHPROFILE_ kezdődik. Erre a titkos kódra hivatkozik a munkafolyamat-fájl.
  3. A forrásvezérlő üzembehelyezési konfigurációjának részleteit az az webapp deployment source show paranccsal szerezheti be . Cserélje le a helyőrző paramétereket a megadott értékekre:

    az webapp deployment source show \
      --name <app-service-name> \
      --resource-group <resource-group-name>
    
  4. A parancs kimenetében erősítse meg a repoUrl és branch tulajdonságok értékeit. Ezeknek az értékeknek meg kell egyezniük a add paranccsal megadott értékekkel.

A GitHub munkafolyamatának és műveleteinek vizsgálata

A munkafolyamat-definíciók egy YAML-fájlban (.yml) vannak megadva az adattár /.github/workflows/ elérési útján. Ez a YAML-fájl tartalmazza a munkafolyamatot alkotó különböző lépéseket és paramétereket, egy GitHub-adattárhoz társított automatizált folyamatot. Bármilyen projektet létrehozhat, tesztelhet, csomagolhat, kiadhat és üzembe helyezhet a GitHubon egy munkafolyamattal.

Minden munkafolyamat egy vagy több feladatból áll, és minden feladat lépéskészlet. Minden lépés egy rendszerhéjszkript vagy egy művelet. Minden feladathoz tartozik egy Művelet szakasz a munkafolyamat-fájlban.

Az Azure App Service-be való üzembe helyezéshez beállított Python-kóddal beállított munkafolyamat tekintetében a munkafolyamat a következő műveleteket hajtja végre:

Tevékenység Leírás
fizetés Tekintse meg az adattárat egy futón, egy GitHub Actions-ügynökön.
setup-python Telepítse a Pythont a futóra.
appservice-build A webalkalmazás létrehozása.
webapps-deploy A webalkalmazást helyezze üzembe a közzétételi profil hitelesítő adatainak használatával az Azure-ban való hitelesítés céljára. A hitelesítő adatokat egy GitHub-titkos kód tárolja.

A munkafolyamat létrehozásához használt munkafolyamat-sablon az Azure/actions-workflow-samples.

A munkafolyamat a megadott ágba történő leküldéses események esetén aktiválódik. Az esemény és az ág a munkafolyamat-fájl elején van definiálva. A következő kódrészlet például azt mutatja, hogy a munkafolyamat a főágba irányuló leküldéses eseményeken aktiválódik:

on:
  push:
    branches:
    - main

OAuth-jogosult alkalmazások

A folyamatos üzembe helyezés beállításakor engedélyezi az Azure App Service-t engedélyezett OAuth-alkalmazásként a GitHub-fiókjához. Az App Service az engedélyezett hozzáféréssel hoz létre egy GitHub-művelet YAML-fájlt a .github/workflows/<workflow-name>.yml elérési úton az adattárban.

A jogosult alkalmazások megtekintéséhez és a GitHub-fiókok engedélyeinek visszavonásához lépjen a Beállítások>integrációi/alkalmazások lapra:

Képernyőkép egy GitHub-fiók engedélyezett OAuth Apps-alkalmazásainak megtekintéséről.

Munkafolyamat-közzétételi profil titkos kódja

Az adattárhoz hozzáadott .github/workflows/<workflow-name>.yml munkafolyamat-fájlban van egy helyőrző, amely a munkafolyamat üzembehelyezési feladatához szükséges a profil hitelesítő adatainak közzétételéhez. A közzétételi profil adatai titkosítva vannak tárolva az adattárban.

A titkos kód megtekintéséhez lépjen a Beállítások>biztonsági>titkos kód és változók>műveletek lapjára:

Képernyőkép, amely bemutatja, hogyan tekintheti meg a GitHub-adattár műveleti titkos kulcsát.

Ebben a cikkben a GitHub-művelet a hitelesítést egy közzétételi profil hitelesítő adataival végzi. A hitelesítés más módokon is lehetséges, például szolgáltatásnévvel vagy OpenID Connecttel. További információ: Üzembe helyezés az App Service-ben a GitHub Actions használatával.

Munkafolyamat futtatása és tesztelése

Az utolsó lépés a munkafolyamat tesztelése az adattár módosításával.

  1. Egy böngészőben nyissa meg a mintaadattár elágazását (vagy a használt adattárat), és válassza ki az eseményindító részeként beállított ágat:

    Képernyőkép arról, hogyan léphet arra az adattárra és ágra, amelyben a GitHub Actions-munkafolyamat definiálva van.

  2. Kis módosítást végezhet a Python-webalkalmazáson.

    A Flask-oktatóanyagban egy egyszerű módosítást talál:

    1. Nyissa meg az eseményindító ág /hello-app/templates/home.html fájlját.
    2. Válassza a Szerkesztés (ceruza) lehetőséget.
    3. A Szerkesztőben keresse meg a nyomtatási <p> utasítást, és adja hozzá az "Ismételt üzembe helyezés!" szöveget
  3. Véglegesítse a módosítást közvetlenül arra az ágra, amelyben éppen dolgozik.

    1. A Szerkesztőben válassza a módosítások véglegesítése lehetőséget a jobb felső sarokban. Megnyílik a Véglegesítési módosítások ablak.
    2. A Véglegesítési módosítások ablakban módosítsa a véglegesítési üzenetet igény szerint, és válassza a Módosítások véglegesítése lehetőséget.

    A véglegesítési folyamat elindítja a GitHub Actions munkafolyamatot.

Manuálisan is aktiválhatja a munkafolyamatot:

  1. Nyissa meg a folyamatos üzembe helyezéshez beállított adattár Műveletek lapját.

  2. Válassza ki a munkafolyamatot a munkafolyamatok listájában, majd válassza a Munkafolyamat futtatása lehetőséget.

Sikertelen munkafolyamat hibaelhárítása

Az alkalmazás-adattár Műveletek lapján ellenőrizheti egy munkafolyamat állapotát. A cikkben létrehozott munkafolyamat-fájl vizsgálatakor két feladat jelenik meg: a buildelés és az üzembe helyezés. Emlékeztetőül, a munkafolyamat az Azure/actions-workflow-samples sablonon alapul.

Sikertelen feladat esetén tekintse meg a feladatfeladatok kimenetét a hiba jelzéséhez.

Az alábbiakban néhány gyakori problémát vizsgálunk meg:

  • Ha az alkalmazás egy hiányzó függőség miatt meghiúsul, akkor a requirements.txt fájl nem lett feldolgozva az üzembe helyezés során. Ez a viselkedés akkor fordul elő, ha a webalkalmazást közvetlenül a portálon hozta létre a az webapp up jelen cikkben látható parancs helyett.

  • Ha az app service-t a portálon keresztül építette ki, előfordulhat, hogy a buildelési művelet SCM_DO_BUILD_DURING_DEPLOYMENT beállítása nem lesz beállítva. Ezt a beállítást a következőre kell állítani true: . A az webapp up parancs automatikusan beállítja a buildelési műveletet.

  • Ha a "TLS-kézfogás időtúllépésével" kapcsolatos hibaüzenet jelenik meg, futtassa manuálisan a munkafolyamatot az alkalmazás-adattár Műveletek lapján az automatikus üzembe helyezés aktiválásával. Meghatározhatja, hogy az időtúllépés átmeneti probléma-e.

  • Ha a tárolóalkalmazás folyamatos üzembe helyezését állítja be a jelen cikkben látható módon, a rendszer automatikusan létrehozza a kezdeti munkafolyamatfájlt (.github/workflows/<workflow-name>.yml . Ha módosította a fájlt, távolítsa el a módosításokat, és ellenőrizze, hogy azok okozzák-e a hibát.

Üzembe helyezés utáni szkript futtatása

Az üzembe helyezés utáni szkriptek több feladatot is végrehajthatnak, például meghatározhatják az alkalmazáskód által várt környezeti változókat. Adja hozzá a szkriptet az alkalmazáskód részeként, és hajtsa végre a szkriptet az indítási paranccsal.

Annak érdekében, hogy elkerülje a változóértékek közvetlen kódolását a munkafolyamat YAML-fájljában, érdemes konfigurálni a változókat a GitHubon, és a szkriptben a változónevekre hivatkozni. Titkosított titkos kulcsokat hozhat létre egy adattárhoz vagy egy környezethez (fiókadattárhoz). További információ: Titkos kódok használata a GitHub Actionsben.

Django-szempontok áttekintése

A cikk korábbi részében leírtak szerint a GitHub Actions használatával django-alkalmazásokat helyezhet üzembe az Azure App Service-ben Linuxon, ha külön adatbázist használ. Nem használhat SQLite-adatbázist, mert az App Service zárolja a db.sqlite3 fájlt, ami megakadályozza az olvasást és az írást. Ez a viselkedés nem befolyásolja a külső adatbázist.

A Python-alkalmazás konfigurálása az App Service-ben – Tárolóindítási folyamat című cikk azt ismerteti, hogy az App Service hogyan keres automatikusan egy wsgi.py fájlt az alkalmazáskódban, amely általában az alkalmazásobjektumot tartalmazza. Amikor a webapp config set parancsot használta az indítási parancs beállításához, a --startup-file paramétert használta az alkalmazásobjektumot tartalmazó fájl megadásához. A webapp config set parancs nem érhető el a webapps-deploy műveletben. Ehelyett a startup-command paraméterrel megadhatja az indítási parancsot. A következő kód például bemutatja, hogyan adhatja meg az indítási parancsot a munkafolyamat-fájlban:

startup-command: startup.txt

A Django használatakor általában az alkalmazáskód üzembe helyezése után a parancs használatával python manage.py migrate szeretné migrálni az adatmodelleket. A migrálási parancsot futtathatja egy üzembe helyezés utáni szkriptben.

A GitHub-műveletek leválasztása

Ha leválasztja a GitHub Actionst az App Service-példányról, újrakonfigurálhatja az alkalmazástelepítést. Kiválaszthatja, hogy mi történik a munkafolyamat-fájllal a leválasztást követően, és hogy menti vagy törölje-e a fájlt.

Bontsa le a GitHub Actionst az alábbi Azure CLI az webapp deployment github-actions remove paranccsal. Cserélje le a helyőrzőket az Ön által megadott értékekre:

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

Erőforrások tisztítása

A cikkben létrehozott Azure-erőforrások költségeinek elkerülése érdekében törölje az App Service-példányt és az App Service-csomagot tartalmazó erőforráscsoportot.

Bárhol, ahol az Azure CLI telepítve van, beleértve az Azure Cloud Shellt is, az az group delete paranccsal törölheti az erőforráscsoportot:

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

Tárfiók törlése

Ha törölni szeretné a Cloud Shell fájlrendszerét karbantartó tárfiókot, amely egy kis havi díjat von maga után, törölje a cloud-shell-storage-val kezdődő erőforráscsoportot. Ha Ön a csoport egyetlen felhasználója, nyugodtan törölheti az erőforráscsoportot. Ha vannak más felhasználók, törölheti a tárfiókot az erőforráscsoportban.

GitHub-fiók és -adattár frissítése

Ha törli az Azure-erőforráscsoportot, fontolja meg a következő módosításokat a folyamatos üzembe helyezéshez csatlakoztatott GitHub-fiók és adattár esetében:

  • Az alkalmazás adattárában távolítsa el a .github/workflows/<workflow-name>.yml fájlt.
  • Az alkalmazás adattárának beállításai között távolítsa el a munkafolyamathoz létrehozott AZUREAPPSERVICE_PUBLISHPROFILE_ titkos kulcsot.
  • A GitHub-fiók beállításai között távolítsa el az Azure App Service-t hivatalos Oauth-alkalmazásként a GitHub-fiókjához.