Domande frequenti su Servizio app di Azure in Linux

Nota

Questo articolo è stato utile? Diamo importanza al contributo degli utenti. Usare il pulsante Feedback in questa pagina per comunicare se questo articolo è stato utile o come possiamo migliorarlo.

Con il rilascio di Servizio app in Linux, stiamo lavorando per aggiungere funzionalità e apportare miglioramenti alla piattaforma. Questo articolo fornisce risposte alle domande che i clienti ci hanno chiesto di recente.

Se hai una domanda, commenta questo articolo.

Immagini predefinite

Si vogliono creare fork i contenitori Docker predefiniti forniti dalla piattaforma. Dove posso trovare quei file?

È possibile trovare tutti i file Docker in GitHub.

Quali sono i valori previsti per la sezione File di avvio quando si configura lo stack di runtime?

Stack Valore previsto
Java SE il comando per avviare l'app JAR (ad esempio, java -jar /home/site/wwwroot/app.jar --server.port=80)
Tomcat percorso di uno script per eseguire le configurazioni necessarie (ad esempio , /home/site/deployments/tools/startup_script.sh)
Node.js il file di configurazione PM2 o il file di script
.NET Core il nome della DLL compilata come dotnet <myapp>.dll
PHP avvio personalizzato facoltativo
Python script di avvio facoltativo
Rubino lo script Ruby con cui si vuole inizializzare l'app

Questi comandi o script vengono eseguiti dopo l'avvio del contenitore Docker predefinito, ma prima dell'avvio del codice dell'applicazione.

Gestione

Cosa accade quando si preme il pulsante di riavvio nella portale di Azure?

Questa azione equivale a un riavvio docker.

È possibile usare Secure Shell (SSH) per connettersi alla macchina virtuale del contenitore di app?

Sì, è possibile eseguire questa operazione tramite il sito SCM (Source Control Management).

Nota

È anche possibile connettersi al contenitore di app direttamente dal computer di sviluppo locale usando SSH, SFTP o Visual Studio Code (per il debug in tempo reale Node.js app). Per altre informazioni, vedere Debug remoto e SSH in Servizio app in Linux.

Come è possibile creare un piano di servizio app Linux tramite un SDK o un modello di Resource Manager di Azure?

Impostare il campo riservato del servizio app su true.

Integrazione e distribuzione continue

L'app Web usa ancora un'immagine del contenitore Docker precedente dopo aver aggiornato l'immagine in Docker Hub. Si supporta l'integrazione continua e la distribuzione di contenitori personalizzati?

Sì, per configurare l'integrazione/distribuzione continua per Registro Azure Container o DockerHub, seguendo la distribuzione continua con l'app Web per contenitori. Per i registri privati, è possibile aggiornare il contenitore arrestando e quindi avviando l'app Web. In alternativa, è possibile modificare o aggiungere un'impostazione di applicazione fittizia per forzare un aggiornamento del contenitore.

Si supportano gli ambienti di staging?

Sì.

È possibile usare 'WebDeploy/MSDeploy' per distribuire l'app Web?

Sì, è necessario impostare un'impostazione dell'app denominata WEBSITE_WEBDEPLOY_USE_SCMsu false.

La distribuzione Git dell'applicazione non riesce quando si usa l'app Web Linux. Come è possibile risolvere il problema?

Se la distribuzione di Git non riesce nell'app Web Linux, scegliere una delle opzioni seguenti per distribuire il codice dell'applicazione:

  • Usare la funzionalità Recapito continuo (anteprima): è possibile archiviare il codice sorgente dell'app in un repository Git di Azure DevOps o in un repository GitHub per usare il recapito continuo di Azure. Per altre informazioni, vedere Come configurare il recapito continuo per l'app Web Linux.

  • Usare l'API di distribuzione ZIP: per usare questa API, SSH nell'app Web e passare alla cartella in cui si vuole distribuire il codice. Eseguire il codice seguente:

    curl -X POST -u <user> --data-binary @<zipfile> https://{your-sitename}.scm.azurewebsites.net/api/zipdeploy
    

    Se viene visualizzato un errore che indica che il curl comando non è stato trovato, assicurarsi di installare curl usando apt-get install curl prima di eseguire il comando precedente curl .

Supporto lingue

Si vogliono usare web socket nell'applicazione Node.js, impostazioni speciali o configurazioni da impostare?

Sì, disabilitare perMessageDeflate nel codice Node.js lato server. Ad esempio, se si usa socket.io, usare il codice seguente:

const io = require('socket.io')(server,{
  perMessageDeflate :false
});

Sono supportate app .NET Core non compilate?

Sì.

Si supporta Composer come gestore delle dipendenze per le app PHP?

Sì, durante una distribuzione Git, Kudu deve rilevare che si sta distribuendo un'applicazione PHP (grazie alla presenza di un file composer.lock) e Kudu attiverà quindi un'installazione di composer.

Contenitori personalizzati

È possibile usare identità gestite con servizio app durante il pull delle immagini nel Registro Azure Container?

Sì, questa funzionalità è disponibile dall'interfaccia della riga di comando di Azure. È possibile usare identità assegnate dal sistema o assegnate dall'utente . Questa funzionalità non è attualmente supportata nel portale di Azure.

Si usa un contenitore personalizzato. Voglio che la piattaforma monta una condivisione SMB nella directory '/home/'.

Se WEBSITES_ENABLE_APP_SERVICE_STORAGE l'impostazione non è specificata o impostata su false, la /home/ directory non verrà condivisa tra istanze di scalabilità e i file scritti non verranno salvati in modo permanente durante i riavvii. Se si imposta WEBSITES_ENABLE_APP_SERVICE_STORAGE in modo esplicito su true , il montaggio verrà abilitato. Una volta impostato su true, se si vuole disabilitare il montaggio, è necessario impostare WEBSITES_ENABLE_APP_SERVICE_STORAGE in modo esplicito su false.

Il contenitore non riesce a iniziare con "nessun spazio lasciato nel dispositivo". Cosa significa questo errore?

Servizio app in Linux usa due diversi tipi di archiviazione:

  • Archiviazione del file system: l'archiviazione del file system è inclusa nella quota del piano servizio app. Viene usato quando i file vengono salvati nell'archiviazione permanente che è radicata nella /home directory.
  • Spazio su disco host: lo spazio su disco host viene usato per archiviare le immagini del contenitore. Viene gestito dalla piattaforma tramite il driver di archiviazione Docker.

Lo spazio su disco dell'host è separato dalla quota di archiviazione del file system. Non è espandibile ed è previsto un limite di 15 GB per ogni istanza. Viene usato per archiviare qualsiasi immagine personalizzata nel ruolo di lavoro. È possibile usare più di 15 GB a seconda della disponibilità esatta dello spazio su disco dell'host, ma questo non è garantito.

Se il livello scrivibile del contenitore salva i dati all'esterno della /home directory o di un percorso di archiviazione di Azure montato, verrà usato anche lo spazio su disco host.

La piattaforma pulisce regolarmente lo spazio su disco dell'host per rimuovere i contenitori inutilizzati. Se il contenitore scrive una grande quantità di dati all'esterno /home della directory o bring Your Own Storage (BYOS), si verificheranno errori di avvio o eccezioni di runtime dopo il superamento del limite di spazio su disco dell'host.

È consigliabile mantenere le immagini del contenitore il più piccole possibile e scrivere dati nell'archiviazione persistente o in BYOS durante l'esecuzione in Linux servizio app. Se non è possibile, è necessario dividere il piano di servizio app perché lo spazio su disco dell'host è fisso e condiviso tra tutti i contenitori nel piano di servizio app.

L'avvio del contenitore personalizzato richiede molto tempo e la piattaforma riavvia il contenitore prima che termini l'avvio.

È possibile configurare la quantità di tempo di attesa della piattaforma prima che riavvii il contenitore. A tale scopo, impostare l'impostazione dell'app WEBSITES_CONTAINER_START_TIME_LIMIT sul valore desiderato. Il valore predefinito è 230 secondi e il valore massimo è 1800 secondi.

Qual è il formato per l'URL del server del Registro di sistema privato?

Specificare l'URL completo del Registro di sistema, incluso http:// o https://.

Qual è il formato per il nome dell'immagine nell'opzione del Registro di sistema privato?

Aggiungere il nome completo dell'immagine, incluso l'URL del Registro di sistema privato , ad esempio myacr.azurecr.io/dotnet:latest. I nomi delle immagini che usano una porta personalizzata non possono essere immessi tramite il portale. Per impostare docker-custom-image-name, usare lo strumento daaz riga di comando.

È possibile esporre più porte nell'immagine del contenitore personalizzata?

Non è supportata l'esposizione di più porte.

Posso portare la mia risorsa di archiviazione?

Sì, bring your own storage is in preview.Yes, bring your own storage is in preview.

Perché non è possibile esplorare il file system del contenitore personalizzato o i processi in esecuzione dal sito SCM?

Il sito SCM viene eseguito in un contenitore separato. Non è possibile controllare il file system o i processi in esecuzione del contenitore di app.

È necessario implementare HTTPS nel contenitore personalizzato?

No, la piattaforma gestisce la terminazione HTTPS nei front-end condivisi.

È necessario usare WEBSITES_PORT per i contenitori personalizzati?

Sì, è necessario per i contenitori personalizzati. Per configurare manualmente una porta personalizzata, usare l'istruzione EXPOSE in Dockerfile e l'impostazione dell'app, WEBSITES_PORT, con un valore di porta da associare al contenitore.

È possibile usare ASPNETCORE_URLS nell'immagine Docker?

Sì, sovrascrivere la variabile di ambiente prima dell'avvio dell'app .NET Core. Ad esempio, nello script init.sh: esportare ASPNETCORE_URLS={Valore}

Multi-contenitore con Docker Compose

Ricerca per categorie configurare Registro Azure Container (ACR) da usare con più contenitori?

Per usare il Registro Azure Container con più contenitori, tutte le immagini del contenitore devono essere ospitate nello stesso server del Registro Azure Container. Una volta che si trovano nello stesso server del Registro di sistema, sarà necessario creare le impostazioni dell'applicazione e quindi aggiornare il file di configurazione Docker Compose per includere il nome dell'immagine del Registro Azure Container.

Creare le impostazioni dell'applicazione seguenti:

  • DOCKER_REGISTRY_SERVER_USERNAME
  • DOCKER_REGISTRY_SERVER_URL (URL completo, ad esempio: https://<server-name>.azurecr.io)
  • DOCKER_REGISTRY_SERVER_PASSWORD (abilitare l'accesso amministratore nelle impostazioni del Registro Azure Container)

All'interno del file di configurazione, fare riferimento all'immagine del Registro Azure Container come nell'esempio seguente:

image: <server-name>.azurecr.io/<image-name>:<tag>

Ricerca per categorie sapere quale contenitore è accessibile a Internet?

  • È possibile aprire un solo contenitore per l'accesso
  • Sono accessibili solo le porte 80 e 8080 (porte esposte)

Di seguito sono riportate le regole per determinare quale contenitore è accessibile, nell'ordine di precedenza:

  • Impostazione dell'applicazione WEBSITES_WEB_CONTAINER_NAME impostata sul nome del contenitore
  • Primo contenitore a definire la porta 80 o 8080
  • Se nessuno degli elementi precedenti è true, il primo contenitore definito nel file sarà accessibile (esposto)

Ricerca per categorie usare depends_on?

L'opzione depends_onnon è supportata in servizio app e verrà ignorata. Proprio come la raccomandazione di avvio e arresto del controllo da Docker, servizio app le app multi-contenitore devono controllare le dipendenze tramite il codice dell'applicazione, sia all'avvio che alla disconnessione. Il codice di esempio seguente mostra un'app Python che controlla se è in esecuzione un contenitore Redis.

import time
import redis
from flask import Flask
app = Flask(__name__)
cache = redis.Redis(host='redis', port=6379)
def get_hit_count():
    retries = 5
    while True:
        try:
            return cache.incr('hits')
        except redis.exceptions.ConnectionError as exc:
            if retries == 0:
                raise exc
            retries -= 1
            time.sleep(0.5)
@app.route('/')
def hello():
    count = get_hit_count()
    return 'Hello from Azure App Service team! I have been seen {} times.\n'.format(count)
if __name__ == "__main__":
    app.run(host="0.0.0.0", port=80, debug=True)

Web Socket

I web socket sono supportati nelle app Linux. L'impostazione webSocketsEnabled arm non si applica alle app Linux perché i web socket sono sempre abilitati per Linux.

Importante

I web socket sono ora supportati per le app Linux nei piani di servizio app gratuiti. Sono supportate fino a cinque connessioni web socket nei piani di servizio app gratuiti. Il superamento di questo limite comporta una risposta HTTP 429 (troppe richieste).

Prezzi e contratto di servizio

Qual è il prezzo, ora che il servizio è disponibile a livello generale?

I prezzi variano in base allo SKU e all'area geografica, ma è possibile visualizzare altri dettagli nella pagina dei prezzi: servizio app Prezzi.

Altre domande

Come funziona la richiesta di riscaldamento del contenitore?

Quando app Azure Services avvia il contenitore, la richiesta di riscaldamento invia una richiesta HTTP all'endpoint /robots933456.txt dell'applicazione. Si tratta semplicemente di un endpoint fittizio, ma l'applicazione deve rispondere con qualsiasi codice di stato diverso da 5XX. Se la logica dell'applicazione non risponde con codice di stato HTTP a endpoint inesistenti, la richiesta di warmup non può ricevere una risposta e riavvia perennemente il contenitore. Anche la richiesta di riscaldamento potrebbe non riuscire a causa di una configurazione errata della porta.

Per assicurarsi che la porta sia configurata correttamente nei servizi app Azure, vedere la domanda Ricerca per categorie specificare la porta nel contenitore Linux?

È possibile aumentare il timeout della richiesta di riscaldamento del contenitore?

La richiesta di riscaldamento per impostazione predefinita ha esito negativo dopo aver atteso 240 secondi per una risposta dal contenitore. È possibile aumentare il timeout della richiesta di riscaldamento del contenitore aggiungendo l'impostazione WEBSITES_CONTAINER_START_TIME_LIMIT dell'applicazione con un valore compreso tra 240 e 1800 secondi.

Ricerca per categorie specificare la porta nel contenitore Linux?

Tipo di contenitore Descrizione Come impostare/usare la porta
Contenitori predefiniti Se si seleziona una versione del linguaggio/framework per un'app Linux, viene selezionato un contenitore predefinito. Per puntare il codice dell'app alla porta corretta, usare la variabile di ambiente PORT.
Contenitori personalizzati Si ha il controllo completo sul contenitore. servizio app non ha alcun controllo sulla porta su cui è in ascolto il contenitore. Ciò di cui ha bisogno è sapere a quale porta inoltrare le richieste. Se il contenitore è in ascolto della porta 80 o 8080, servizio app è in grado di rilevarlo automaticamente. Se rimane in ascolto di qualsiasi altra porta, è necessario impostare l'impostazione dell'app WEBSITES_PORT sul numero di porta e servizio app inoltra le richieste a tale porta nel contenitore. L'impostazione dell'app WEBSITES_PORT non ha alcun effetto all'interno del contenitore e non è possibile accedervi come variabile di ambiente all'interno del contenitore.

È possibile usare un database basato su file (ad esempio SQLite) con l'app Web Linux?

Il file system dell'applicazione è una condivisione di rete montata. Ciò consente scenari di scalabilità orizzontale in cui il codice deve essere eseguito tra più host. Purtroppo questo blocca l'uso di provider di database basati su file come SQLite perché non è possibile acquisire blocchi esclusivi nel file di database. È consigliabile un servizio di database gestito: Azure SQL, Database di Azure per MySQL o Database di Azure per PostgreSQL

Quali sono i caratteri supportati nei nomi delle impostazioni dell'applicazione?

È possibile usare solo lettere (A-Z, a-z), numeri (0-9) e il carattere di sottolineatura (_) per le impostazioni dell'applicazione.

Dove è possibile richiedere nuove funzionalità?

È possibile inviare la propria idea nel forum di feedback App Web. Aggiungere "[Linux]" al titolo dell'idea.