Condividi tramite


Configurare un file di avvio personalizzato per le app Python nel servizio app di Azure

Questo articolo illustra quando e come configurare un file di avvio personalizzato per un'app Web Python ospitata nel servizio app di Azure. Anche se non è necessario un file di avvio per lo sviluppo locale, servizio app di Azure esegue l'app Web distribuita all'interno di un contenitore Docker che può usare i comandi di avvio, se specificato.

È necessario un file di avvio personalizzato nelle situazioni seguenti:

  • Argomenti di Gunicorn personalizzati: si vuole avviare il server Web predefinito Gunicorn con argomenti aggiuntivi oltre i valori predefiniti, ovvero --bind=0.0.0.0 --timeout 600.

  • Framework o server alternativi: l'app viene compilata con un framework diverso da Flask o Django oppure si vuole usare un server Web diverso oltre a Gunicorn.

  • Struttura dell'applicazione Flask non standard: si dispone di un'app Flask il cui file di codice principale è denominato qualcosa di diverso da app.py o application.py*oppure l'oggetto app è denominato diverso daapp.

In altre parole, è necessario un comando di avvio personalizzato, a meno che il progetto non abbia un file app.py o application.py nella cartella radice con un oggetto app Flask denominato app.

Per altre informazioni, vedere Configurare le app Python - Processo di avvio del contenitore.

Creare un file di avvio

Quando è necessario un file di avvio personalizzato, seguire questa procedura:

  1. Creare un file nel progetto denominato startup.txt, startup.sh o un altro nome di propria scelta contenente i comandi di avvio. Vedere le sezioni successive di questo articolo per informazioni specifiche su Django, Flask e altri framework.

    Se necessario, un file di avvio può includere più comandi.

  2. Eseguire il commit del file nel repository di codice in modo che possa essere distribuito con il resto dell'app.

  3. In Visual Studio Code selezionare l'icona di Azure nella barra delle attività, espandere RISORSE, trovare ed espandere la sottoscrizione, espandere Servizi app e fare clic con il pulsante destro del mouse sul servizio app e selezionare Apri nel portale.

  4. Nel portale di Azure scegliere Configurazione impostazioni> dal menu del servizio a sinistra. Nella pagina Configurazione per il servizio app selezionare Impostazioni generali, immettere il nome del file di avvio (ad esempio startup.txt o startup.sh) inComando di avvioimpostazioni> stack e quindi selezionare Salva.

    Annotazioni

    Anziché usare un file di comando di avvio, è possibile inserire il comando di avvio direttamente nel campo Comando di avvio nel portale di Azure. È consigliabile usare un file di comando di avvio perché archivia la configurazione nel repository. Ciò consente al controllo della versione di tenere traccia delle modifiche e semplifica la ridistribuzione in altre istanze del servizio app di Azure.

  5. Selezionare Continua quando viene richiesto di riavviare il servizio app.

    Se si accede al sito del servizio app di Azure prima di distribuire il codice dell'applicazione, viene visualizzato un messaggio di errore dell'applicazione perché non è disponibile codice per elaborare la richiesta.

Comandi di avvio di Django

Per impostazione predefinita, servizio app di Azure individua la cartella contenente il file wsgi.py e avvia Gunicorn con il comando seguente:

# <module> is the folder that contains wsgi.py. If you need to use a subfolder,
# specify the parent of <module> using --chdir.
gunicorn --bind=0.0.0.0 --timeout 600 <module>.wsgi

Se si desidera modificare qualsiasi argomento Gunicorn, ad esempio aumentando il valore di timeout a 1.200 secondi(--timeout 1200), creare un file di comando di avvio personalizzato. In questo modo è possibile eseguire l'override delle impostazioni predefinite con i requisiti specifici. Per altre informazioni, vedere Processo di avvio del contenitore - App Django.

Comandi di avvio Flask

Per impostazione predefinita, il servizio app in Linux presuppone che l'applicazione Flask soddisfi il critear seguente:

  • Il chiamabile WSGI è denominato app.
  • Il codice dell'applicazione è contenuto in un file denominato application.py o app.py.
  • Il file dell'applicazione si trova nella cartella radice dell'app.

Se il progetto è diverso da questa struttura, il comando di avvio personalizzato deve identificare il percorso dell'oggetto app nel file di formato :app_object:

  • Nome file e/o nome dell'oggetto app diversi: se il file di codice principale dell'app è hello.py e l'oggetto app è denominato myapp, il comando di avvio è il seguente:

    gunicorn --bind=0.0.0.0 --timeout 600 hello:myapp
    
  • Il file di avvio si trova in una sottocartella: se il file di avvio è myapp/website.py e l'oggetto app è app, usare l'argomento di --chdir Gunicorn per specificare la cartella e quindi denominare il file di avvio e l'oggetto app come di consueto:

    gunicorn --bind=0.0.0.0 --timeout 600 --chdir myapp website:app
    
  • Il file di avvio si trova all'interno di un modulo: nel codice python-sample-vscode-flask-tutorial il file di avvio webapp.py è contenuto nella cartella hello_app, che è un modulo con un file __init__.py . L'oggetto app è denominato app e viene definito in __init__.py e webapp.py usa un'importazione relativa.

    A causa di questa disposizione, quando si punta Gunicorn su webapp:app viene generato l'errore "Tentativo di importazione relativa in un non-pacchetto" e l'app non viene avviata.

    In questo caso, creare un file shim che importa l'oggetto app dal modulo e quindi fare in modo che Gunicorn avvii l'app usando lo shim. Il codice python-sample-vscode-flask-tutorial , ad esempio, contiene startup.py con il contenuto seguente:

    from hello_app.webapp import app
    

    Il comando di avvio è quindi:

    gunicorn --bind=0.0.0.0 --workers=4 startup:app
    

Per altre informazioni, vedere Processo di avvio del contenitore - App Flask.

Altri framework e server Web

Il contenitore del servizio app che esegue le app Python include Django e Flask installati per impostazione predefinita, insieme al server Web Gunicorn.

Per usare un framework diverso da Django o Flask (ad esempio Falcon, FastAPI e così via) o per usare un server Web diverso:

  • Includere il framework e/o il server Web nel file requirements.txt .

  • Nel comando di avvio identificare il chiamabile WSGI come descritto nella sezione precedente per Flask.

  • Per avviare un server Web diverso da Gunicorn, usare un python -m comando anziché richiamare direttamente il server. Ad esempio, il comando seguente avvia il server uvicorn , presupponendo che il chiamabile WSGI sia denominato app e che sia presente in application.py:

    python -m uvicorn application:app --host 0.0.0.0
    

    Si usa python -m perché i server Web installati tramite requirements.txt non vengono aggiunti all'ambiente globale Python e pertanto non possono essere richiamati direttamente. Il python -m comando richiama il server dall'interno dell'ambiente virtuale corrente.