Édition

FAQ sur Azure App Service sur Linux

Remarque

Cet article vous a-t-il été utile ? Votre avis est important à nos yeux. Utilisez le bouton Commentaires sur cette page pour nous faire savoir dans quelle mesure cet article vous a été utile ou comment nous pouvons l’améliorer.

Avec la publication de App Service sur Linux, nous travaillons à l’ajout de fonctionnalités et à l’amélioration de notre plateforme. Cet article fournit des réponses aux questions que nos clients nous ont posées récemment.

Si vous avez une question, commentez cet article.

Images intégrées

Je souhaite dupliquer les conteneurs Docker intégrés que la plateforme fournit. Où puis-je trouver ces fichiers ?

Vous trouverez tous les fichiers Docker sur GitHub.

Quelles sont les valeurs attendues pour la section Fichier de démarrage lorsque je configure la pile d’exécution ?

Pile Valeur attendue
Java SE commande pour démarrer votre application JAR (par exemple, java -jar /home/site/wwwroot/app.jar --server.port=80)
Tomcat l’emplacement d’un script pour effectuer toutes les configurations nécessaires (par exemple, /home/site/deployments/tools/startup_script.sh)
Node.js le fichier de configuration PM2 ou votre fichier de script
.NET Core nom de la DLL compilée en tant que dotnet <myapp>.dll
PHP démarrage personnalisé facultatif
Python script de démarrage facultatif
Ruby le script Ruby avec lequel vous souhaitez initialiser votre application

Ces commandes ou scripts sont exécutés après le démarrage du conteneur Docker intégré, mais avant le démarrage du code de votre application.

Gestion

Que se passe-t-il lorsque j’appuie sur le bouton redémarrer dans le Portail Azure ?

Cette action est identique à un redémarrage Docker.

Puis-je utiliser Secure Shell (SSH) pour me connecter à la machine virtuelle du conteneur d’application ?

Oui, vous pouvez le faire via le site de gestion du contrôle de code source (SCM).

Remarque

Vous pouvez également vous connecter au conteneur d’application directement à partir de votre ordinateur de développement local à l’aide de SSH, SFTP ou Visual Studio Code (pour le débogage en direct Node.js applications). Pour plus d’informations, consultez Débogage à distance et SSH dans App Service sur Linux.

Comment puis-je créer un plan de App Service Linux via un KIT de développement logiciel (SDK) ou un modèle Azure Resource Manager ?

Définissez le champ réservé du service d’application sur true.

Intégration et déploiement continus

Mon application web utilise toujours une ancienne image conteneur Docker une fois que j’ai mis à jour l’image sur Docker Hub. Prenez-vous en charge l’intégration et le déploiement continus de conteneurs personnalisés ?

Oui, pour configurer l’intégration/le déploiement continu pour Azure Container Registry ou DockerHub, en suivant Déploiement continu avec Web App pour conteneurs. Pour les registres privés, vous pouvez actualiser le conteneur en arrêtant puis en démarrant votre application web. Vous pouvez également modifier ou ajouter un paramètre d’application factice pour forcer l’actualisation de votre conteneur.

Prenez-vous en charge les environnements intermédiaires ?

Oui.

Puis-je utiliser « WebDeploy/MSDeploy » pour déployer mon application web ?

Oui, vous devez définir un paramètre d’application appelé WEBSITE_WEBDEPLOY_USE_SCMsur false.

Le déploiement Git de mon application échoue lors de l’utilisation de l’application web Linux. Comment puis-je contourner le problème ?

Si le déploiement Git échoue sur votre application web Linux, choisissez l’une des options suivantes pour déployer votre code d’application :

  • Utiliser la fonctionnalité livraison continue (préversion) : vous pouvez stocker le code source de votre application dans un dépôt Git Azure DevOps ou un dépôt GitHub pour utiliser la livraison continue Azure. Pour plus d’informations, consultez Guide pratique pour configurer la livraison continue pour l’application web Linux.

  • Utiliser l’API de déploiement ZIP : pour utiliser cette API, connectez-vous ssh à votre application web et accédez au dossier dans lequel vous souhaitez déployer votre code. Exécutez le code suivant :

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

    Si vous obtenez une erreur indiquant que la curl commande est introuvable, veillez à installer curl en utilisant apt-get install curl avant d’exécuter la commande précédente curl .

Prise en charge linguistique

Je souhaite utiliser des sockets web dans mon application Node.js, des paramètres spéciaux ou des configurations à définir ?

Oui, désactivez-la perMessageDeflate dans votre code de Node.js côté serveur. Par exemple, si vous utilisez socket.io, utilisez le code suivant :

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

Prenez-vous en charge les applications .NET Core non compilées ?

Oui.

Prenez-vous en charge Composer en tant que gestionnaire de dépendances pour les applications PHP ?

Oui, pendant un déploiement Git, Kudu doit détecter que vous déployez une application PHP (grâce à la présence d’un fichier composer.lock), et Kudu déclenche ensuite une installation de compositeur.

Conteneurs personnalisés

Puis-je utiliser des identités managées avec App Service lors de l’extraction d’images au format ACR ?

Oui, cette fonctionnalité est disponible à partir d’Azure CLI. Vous pouvez utiliser des identités affectées par le système ou par l’utilisateur . Cette fonctionnalité n’est actuellement pas prise en charge dans le Portail Azure.

J’utilise mon propre conteneur personnalisé. Je souhaite que la plateforme monte un partage SMB dans le répertoire « /home/ ».

Si WEBSITES_ENABLE_APP_SERVICE_STORAGE le paramètre n’est pas spécifié ou défini sur false, le /home/ répertoire n’est pas partagé entre les instances d’échelle et les fichiers écrits ne sont pas conservés pendant les redémarrages. La définition WEBSITES_ENABLE_APP_SERVICE_STORAGE explicite de la valeur true active le montage. Une fois que cette valeur est définie sur true, si vous souhaitez désactiver le montage, vous devez explicitement définir sur WEBSITES_ENABLE_APP_SERVICE_STORAGEfalse.

Mon conteneur ne parvient pas à démarrer avec « aucun espace restant sur l’appareil ». Que signifie cette erreur ?

App Service sur Linux utilise deux types de stockage différents :

  • Stockage du système de fichiers : le stockage du système de fichiers est inclus dans le quota du plan App Service. Il est utilisé lorsque les fichiers sont enregistrés dans le stockage persistant rooté dans le /home répertoire.
  • Espace disque hôte : l’espace disque hôte est utilisé pour stocker des images conteneur. Il est géré par la plateforme via le pilote de stockage Docker.

L’espace disque hôte est distinct du quota de stockage du système de fichiers. Il n’est pas extensible et il existe une limite de 15 Go pour chaque instance. Il est utilisé pour stocker toutes les images personnalisées sur le worker. Vous pouvez utiliser plus de 15 Go en fonction de la disponibilité exacte de l’espace disque hôte, mais cela n’est pas garanti.

Si la couche accessible en écriture du conteneur enregistre des données en dehors du /home répertoire ou d’un chemin de stockage Azure monté, l’espace disque hôte est également consommé.

La plateforme nettoie régulièrement l’espace disque hôte pour supprimer les conteneurs inutilisés. Si le conteneur écrit une grande quantité de données en dehors du répertoire ou byOS /home (Bring Your Own Storage), cela entraîne des échecs de démarrage ou des exceptions d’exécution une fois la limite d’espace disque de l’hôte dépassée.

Nous vous recommandons de conserver vos images conteneur aussi petites que possible et d’écrire des données dans le stockage persistant ou BYOS lors de l’exécution sur Linux App Service. Si ce n’est pas possible, vous devez fractionner le plan de App Service, car l’espace disque hôte est fixe et partagé entre tous les conteneurs du plan App Service.

Mon conteneur personnalisé prend beaucoup de temps à démarrer, et la plateforme redémarre le conteneur avant la fin de son démarrage.

Vous pouvez configurer la durée d’attente de la plateforme avant de redémarrer votre conteneur. Pour ce faire, définissez le WEBSITES_CONTAINER_START_TIME_LIMIT paramètre d’application sur la valeur souhaitée. La valeur par défaut est 230 secondes et la valeur maximale est 1800 secondes.

Quel est le format de l’URL du serveur de registre privé ?

Fournissez l’URL complète du Registre, y compris http:// ou https://.

Quel est le format du nom de l’image dans l’option de registre privé ?

Ajoutez le nom complet de l’image, y compris l’URL du registre privé (par exemple, myacr.azurecr.io/dotnet:latest). Les noms d’images qui utilisent un port personnalisé ne peuvent pas être entrés via le portail. Pour définir docker-custom-image-name, utilisez l’outilaz en ligne de commande.

Puis-je exposer plusieurs ports sur mon image conteneur personnalisée ?

Nous ne prenons pas en charge l’exposition de plusieurs ports.

Puis-je apporter mon propre stockage ?

Oui, apportez votre propre stockage en préversion.

Pourquoi ne puis-je pas parcourir le système de fichiers de mon conteneur personnalisé ou exécuter des processus à partir du site SCM ?

Le site SCM s’exécute dans un conteneur distinct. Vous ne pouvez pas case activée le système de fichiers ou exécuter des processus du conteneur d’application.

Dois-je implémenter HTTPS dans mon conteneur personnalisé ?

Non, la plateforme gère l’arrêt HTTPS au niveau des serveurs frontaux partagés.

Dois-je utiliser WEBSITES_PORT pour les conteneurs personnalisés ?

Oui, cela est obligatoire pour les conteneurs personnalisés. Pour configurer manuellement un port personnalisé, utilisez l’instruction EXPOSE dans le fichier Dockerfile et le paramètre d’application, WEBSITES_PORT, avec une valeur de port à lier sur le conteneur.

Puis-je utiliser ASPNETCORE_URLS dans l’image Docker ?

Oui, remplacez la variable d’environnement avant le démarrage de l’application .NET Core. Par exemple, dans le script init.sh : exporter ASPNETCORE_URLS={Votre valeur}

Multiconteneur avec Docker Compose

Comment faire configurer Azure Container Registry (ACR) à utiliser avec plusieurs conteneurs ?

Pour utiliser ACR avec plusieurs conteneurs, toutes les images conteneur doivent être hébergées sur le même serveur de registre ACR. Une fois qu’ils se trouvent sur le même serveur de Registre, vous devez créer des paramètres d’application, puis mettre à jour le fichier de configuration Docker Compose pour inclure le nom de l’image ACR.

Créez les paramètres d’application suivants :

  • DOCKER_REGISTRY_SERVER_USERNAME
  • DOCKER_REGISTRY_SERVER_URL (URL complète, par exemple : https://<server-name>.azurecr.io)
  • DOCKER_REGISTRY_SERVER_PASSWORD (activer l’accès administrateur dans les paramètres ACR)

Dans le fichier de configuration, référencez votre image ACR comme dans l’exemple suivant :

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

Comment faire savez quel conteneur est accessible à Internet ?

  • Un seul conteneur peut être ouvert pour l’accès
  • Seuls les ports 80 et 8080 sont accessibles (ports exposés)

Voici les règles permettant de déterminer quel conteneur est accessible, dans l’ordre de priorité :

  • WEBSITES_WEB_CONTAINER_NAME Paramètre d’application défini sur le nom du conteneur
  • Premier conteneur à définir le port 80 ou 8080
  • Si aucune des valeurs ci-dessus n’est vraie, le premier conteneur défini dans le fichier est accessible (exposé)

Comment faire utiliser depends_on ?

L’option depends_onn’est pas prise en charge sur App Service et elle sera ignorée. Tout comme la recommandation de contrôle de démarrage et d’arrêt de Docker, App Service applications multiconteneur doit case activée dépendances via le code de l’application, à la fois au démarrage et à la déconnexion. L’exemple de code ci-dessous montre une application Python qui vérifie si un conteneur Redis est en cours d’exécution.

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 Sockets

Les web sockets sont pris en charge sur les applications Linux. Le webSocketsEnabled paramètre ARM ne s’applique pas aux applications Linux, car les web sockets sont toujours activés pour Linux.

Importante

Les web sockets sont désormais pris en charge pour les applications Linux sur les plans App Service gratuits. Nous prenons en charge jusqu’à cinq connexions de socket web sur les plans free App Service. Le dépassement de cette limite entraîne une réponse HTTP 429 (Trop de requêtes).

Tarification et contrat SLA

Quelle est la tarification, maintenant que le service est en disponibilité générale ?

La tarification varie selon la référence SKU et la région, mais vous pouvez voir plus de détails sur notre page de tarification : App Service Tarification.

Autres questions

Comment fonctionne la demande de préchauffement du conteneur ?

Lorsque Azure App Services démarre votre conteneur, la demande de préchauffement envoie une requête HTTP au point de terminaison /robots933456.txt de votre application. Il s’agit simplement d’un point de terminaison factice, mais votre application doit répondre avec tout code de status non-5XX. Si votre logique d’application ne répond pas avec du code de status HTTP à des points de terminaison inexistants, la demande de préchauffement ne peut pas recevoir de réponse et redémarre perpétuellement votre conteneur. La demande de préchauffement peut également échouer en raison d’une configuration incorrecte du port.

Pour vous assurer que le port est correctement configuré sur Azure App Services, consultez la question Comment faire spécifier le port dans mon conteneur Linux ?

Est-il possible d’augmenter le délai d’expiration de la demande de préchauffement du conteneur ?

La demande de préchauffement par défaut échoue après 240 secondes d’attente d’une réponse du conteneur. Vous pouvez augmenter le délai d’expiration de la demande de préchauffement du conteneur en ajoutant le paramètre WEBSITES_CONTAINER_START_TIME_LIMIT d’application avec une valeur comprise entre 240 et 1 800 secondes.

Comment faire spécifier le port dans mon conteneur Linux ?

Type de conteneur Description Guide pratique pour définir/utiliser le port
Conteneurs intégrés Si vous sélectionnez une version de langage/framework pour une application Linux, un conteneur prédéfini est sélectionné pour vous. Pour pointer le code de votre application vers le port approprié, utilisez la variable d’environnement PORT.
Conteneurs personnalisés Vous disposez d’un contrôle total sur le conteneur. App Service n’a aucun contrôle sur le port sur lequel votre conteneur écoute. Ce dont elle a besoin, c’est de savoir à quel port transférer les demandes. Si votre conteneur écoute le port 80 ou 8080, App Service est en mesure de le détecter automatiquement. S’il écoute un autre port, vous devez définir le paramètre d’application WEBSITES_PORT sur le numéro de port et App Service transfère les demandes à ce port dans le conteneur. Le paramètre d’application WEBSITES_PORT n’a aucun effet dans le conteneur et vous ne pouvez pas y accéder en tant que variable d’environnement dans le conteneur.

Puis-je utiliser une base de données basée sur des fichiers (comme SQLite) avec mon application web Linux ?

Le système de fichiers de votre application est un partage réseau monté. Cela permet des scénarios de scale-out où votre code doit être exécuté sur plusieurs hôtes. Malheureusement, cela bloque l’utilisation de fournisseurs de base de données basés sur des fichiers comme SQLite, car il n’est pas possible d’acquérir des verrous exclusifs sur le fichier de base de données. Nous recommandons un service de base de données managé : Azure SQL, Azure Database pour MySQL ou Azure Database pour PostgreSQL

Quels sont les caractères pris en charge dans les noms des paramètres d’application ?

Vous pouvez utiliser uniquement des lettres (A-Z, a-z), des chiffres (0-9) et le trait de soulignement (_) pour les paramètres de l’application.

Où puis-je demander de nouvelles fonctionnalités ?

Vous pouvez soumettre votre idée sur le forum de commentaires Web Apps. Ajoutez « [Linux] » au titre de votre idée.