Rychlý start: Nasazení webové aplikace v Pythonu (Django nebo Flask) do služby Aplikace Azure Service

V tomto rychlém startu nasadíte webovou aplikaci v Pythonu (Django nebo Flask) do služby Aplikace Azure Service. Aplikace Azure Service je plně spravovaná služba hostování webů, která podporuje aplikace Python hostované v prostředí serveru s Linuxem.

K dokončení tohoto rychlého startu je potřeba:

Poznámka:

Tento článek obsahuje aktuální pokyny k nasazení webové aplikace v Pythonu pomocí služby Aplikace Azure Service. Python ve Windows se už nepodporuje.

1. Ukázková aplikace

Tento rychlý start je možné dokončit pomocí Flasku nebo Django. K dispozici je ukázková aplikace v jednotlivých architekturách, která vám pomůže postupovat podle tohoto rychlého startu. Stáhněte nebo naklonujte ukázkovou aplikaci do místní pracovní stanice.

git clone https://github.com/Azure-Samples/msdocs-python-flask-webapp-quickstart

Místní spuštění aplikace:

  1. Přejděte do složky aplikace:

    cd msdocs-python-flask-webapp-quickstart
    
  2. Vytvořte pro aplikaci virtuální prostředí:

    py -m venv .venv
    .venv\scripts\activate
    
  3. Nainstalujte závislosti:

    pip install -r requirements.txt
    
  4. Spuštění aplikace:

    flask run
    
  5. Ve webovém prohlížeči přejděte k ukázkové aplikaci http://localhost:5000 .

    Screenshot of the Flask app running locally in a browser

Máte problémy? Dejte nám vědět.

2. Vytvoření webové aplikace v Azure

Pokud chcete hostovat aplikaci v Azure, musíte vytvořit webovou aplikaci Aplikace Azure Service v Azure. Webovou aplikaci můžete vytvořit pomocí Azure CLI, VS Code, balíčku rozšíření Azure Tools nebo webu Azure Portal.

Příkazy Azure CLI je možné spouštět na počítači s nainstalovaným Azure CLI.

Azure CLI obsahuje příkaz az webapp up , který vytvoří potřebné prostředky a nasadí vaši aplikaci v jednom kroku.

V případě potřeby se přihlaste k Azure pomocí příkazu az login.

az login

Vytvořte webovou aplikaci a další prostředky a pak nasaďte kód do Azure pomocí příkazu az webapp up.

az webapp up --runtime PYTHON:3.9 --sku B1 --logs
  • Parametr --runtime určuje, jakou verzi Pythonu vaše aplikace běží. Tento příklad používá Python 3.9. Chcete-li zobrazit seznam všech dostupných modulů runtime, použijte příkaz az webapp list-runtimes --os linux --output table.
  • Parametr --sku definuje velikost (procesor, paměť) a náklady na plán služby App Service. V tomto příkladu se používá plán služby B1 (Basic), který bude mít v předplatném Azure malé náklady. Úplný seznam plánů služby App Service najdete na stránce s cenami služby App Service.
  • Příznak --logs konfiguruje výchozí protokolování potřebné k povolení zobrazení streamu protokolu ihned po spuštění webové aplikace.
  • Volitelně můžete zadat název s argumentem --name <app-name>. Pokud ho nezadáte, automaticky se vygeneruje název.
  • Volitelně můžete zahrnout argument --location <location-name> , ve kterém <location_name> je dostupná oblast Azure. Spuštěním az account list-locations příkazu můžete načíst seznam povolených oblastí pro váš účet Azure.

Dokončení příkazu může trvat několik minut. Během spuštění příkazu poskytuje zprávy o vytvoření skupiny prostředků, plánu služby App Service a prostředku aplikace, konfiguraci protokolování a nasazení souboru ZIP. Zobrazí se zpráva "Aplikaci můžete spustit na http://< app-name.azurewebsites.net>", což je adresa URL aplikace v Azure.

The webapp '<app-name>' doesn't exist
Creating Resource group '<group-name>' ...
Resource group creation complete
Creating AppServicePlan '<app-service-plan-name>' ...
Creating webapp '<app-name>' ...
Configuring default logging for the app, if not already enabled
Creating zip with contents of dir /home/cephas/myExpressApp ...
Getting scm site credentials for zip deployment
Starting zip deployment. This operation can take a while to complete ...
Deployment endpoint responded with status code 202
You can launch the app at http://<app-name>.azurewebsites.net
{
  "URL": "http://<app-name>.azurewebsites.net",
  "appserviceplan": "<app-service-plan-name>",
  "location": "centralus",
  "name": "<app-name>",
  "os": "<os-type>",
  "resourcegroup": "<group-name>",
  "runtime_version": "python|3.9",
  "runtime_version_detected": "0.0",
  "sku": "FREE",
  "src_path": "<your-folder-location>"
}

Poznámka:

Příkaz az webapp up provádí tyto akce:

  • Vytvořte výchozí skupinu prostředků.

  • Vytvořte výchozí plán služby App Service.

  • Vytvořte aplikaci se zadaným názvem.

  • Zip nasadí všechny soubory z aktuálního pracovního adresáře s povolenou automatizací sestavení.

  • Uložte parametry do mezipaměti místně v souboru .azure/config , abyste je nemuseli při pozdějším az webapp upaz webapp nasazení s jinými příkazy ze složky projektu zadávat znovu. Hodnoty uložené v mezipaměti se ve výchozím nastavení používají automaticky.

Máte problémy? Dejte nám vědět.

3. Nasazení kódu aplikace do Azure

Aplikace Azure služba podporuje více metod nasazení kódu aplikace do Azure, včetně podpory GitHub Actions a všech hlavních nástrojů CI/CD. Tento článek se zaměřuje na nasazení kódu z místní pracovní stanice do Azure.

Vzhledem k tomu, že az webapp up příkaz vytvořil potřebné prostředky a nasadil aplikaci v jednom kroku, můžete přejít na 4 – přejít na aplikaci.


Máte problémy? Nejprve si projděte průvodce odstraňováním potíží, jinak nám dejte vědět.

4. Přejděte do aplikace.

Přejděte do nasazené aplikace ve webovém prohlížeči na adrese URL http://<app-name>.azurewebsites.net. Pokud se zobrazí výchozí stránka aplikace, počkejte minutu a aktualizujte prohlížeč.

Ukázkový kód Pythonu spouští kontejner Linuxu ve službě App Service pomocí integrované image.

Screenshot of the app running in Azure

Gratulujeme! Nasadili jste aplikaci v Pythonu do služby App Service.

Máte problémy? Nejprve si projděte průvodce odstraňováním potíží, jinak nám dejte vědět.

5. Streamování protokolů

Aplikace Azure Služba zachytí veškerý výstup zpráv do konzoly, aby vám pomohla při diagnostice problémů s vaší aplikací. Ukázkové aplikace obsahují print() příkazy pro předvedení této funkce.

@app.route('/')
def index():
   print('Request for index page received')
   return render_template('index.html')

@app.route('/favicon.ico')
def favicon():
    return send_from_directory(os.path.join(app.root_path, 'static'),
                               'favicon.ico', mimetype='image/vnd.microsoft.icon')

@app.route('/hello', methods=['POST'])
def hello():
   name = request.form.get('name')

   if name:
       print('Request for hello page received with name=%s' % name)
       return render_template('hello.html', name = name)
   else:
       print('Request for hello page received with no name or blank name -- redirecting')
       return redirect(url_for('index'))

Obsah diagnostických protokolů služby App Service je možné zkontrolovat pomocí Azure CLI, VS Code nebo webu Azure Portal.

Nejprve je potřeba nakonfigurovat službu Aplikace Azure Service tak, aby výstupní protokoly do systému souborů služby App Service používala příkaz az webapp log config.

az webapp log config \
    --web-server-logging filesystem \
    --name $APP_SERVICE_NAME \
    --resource-group $RESOURCE_GROUP_NAME

K streamování protokolů použijte příkaz az webapp log tail .

az webapp log tail \
    --name $APP_SERVICE_NAME \
    --resource-group $RESOURCE_GROUP_NAME

Aktualizujte domovskou stránku v aplikaci nebo zkuste jiné žádosti o vygenerování některých zpráv protokolu. Výstup by měl vypadat podobně jako v následujícím příkladu.

Starting Live Log Stream ---

2021-12-23T02:15:52.740703322Z Request for index page received
2021-12-23T02:15:52.740740222Z 169.254.130.1 - - [23/Dec/2021:02:15:52 +0000] "GET / HTTP/1.1" 200 1360 "https://msdocs-python-webapp-quickstart-123.azurewebsites.net/hello" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:95.0) Gecko/20100101 Firefox/95.0"
2021-12-23T02:15:52.841043070Z 169.254.130.1 - - [23/Dec/2021:02:15:52 +0000] "GET /static/bootstrap/css/bootstrap.min.css HTTP/1.1" 200 0 "https://msdocs-python-webapp-quickstart-123.azurewebsites.net/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:95.0) Gecko/20100101 Firefox/95.0"
2021-12-23T02:15:52.884541951Z 169.254.130.1 - - [23/Dec/2021:02:15:52 +0000] "GET /static/images/azure-icon.svg HTTP/1.1" 200 0 "https://msdocs-python-webapp-quickstart-123.azurewebsites.net/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:95.0) Gecko/20100101 Firefox/95.0"
2021-12-23T02:15:53.043211176Z 169.254.130.1 - - [23/Dec/2021:02:15:53 +0000] "GET /favicon.ico HTTP/1.1" 404 232 "https://msdocs-python-webapp-quickstart-123.azurewebsites.net/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:95.0) Gecko/20100101 Firefox/95.0"

2021-12-23T02:16:01.304306845Z Request for hello page received with name=David
2021-12-23T02:16:01.304335945Z 169.254.130.1 - - [23/Dec/2021:02:16:01 +0000] "POST /hello HTTP/1.1" 200 695 "https://msdocs-python-webapp-quickstart-123.azurewebsites.net/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:95.0) Gecko/20100101 Firefox/95.0"
2021-12-23T02:16:01.398399251Z 169.254.130.1 - - [23/Dec/2021:02:16:01 +0000] "GET /static/bootstrap/css/bootstrap.min.css HTTP/1.1" 304 0 "https://msdocs-python-webapp-quickstart-123.azurewebsites.net/hello" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:95.0) Gecko/20100101 Firefox/95.0"
2021-12-23T02:16:01.430740060Z 169.254.130.1 - - [23/Dec/2021:02:16:01 +0000] "GET /static/images/azure-icon.svg HTTP/1.1" 304 0 "https://msdocs-python-webapp-quickstart-123.azurewebsites.net/hello" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:95.0) Gecko/20100101 Firefox/95.0"

Máte problémy? Nejprve si projděte průvodce odstraňováním potíží, jinak nám dejte vědět.

Vyčištění prostředků

Až budete s ukázkovou aplikací hotovi, můžete z Azure odebrat všechny prostředky aplikace. Nebudou se vám účtovat další poplatky a nezachovají se vaše předplatné Azure bez přehledu. Odebráním skupiny prostředků se také odeberou všechny prostředky ve skupině prostředků a je nejrychlejší způsob, jak odebrat všechny prostředky Azure pro vaši aplikaci.

Odstraňte skupinu prostředků pomocí příkazu az group delete .

az group delete \
    --name msdocs-python-webapp-quickstart \
    --no-wait

Argument --no-wait umožňuje, aby se příkaz vrátil před dokončením operace.

Máte problémy? Dejte nám vědět.

Další kroky