Modifier

Partager via


Questions fréquentes (FAQ) sur Azure App Service sur Linux

Note

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 d’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, un commentaire sur cet article.

Images prédéfinies

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

Pile Valeur attendue
Java SE la 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 le nom de la DLL compilée en tant que dotnet <myapp>.dll
PHP facultatif démarrage personnalisé
Python facultatif script de démarrage
Ruby le script Ruby avec lequel 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 de votre code d’application.

Gestion

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

Cette action revient à redémarrer 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 de contrôle de code source (SCM).

Note

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 dynamique des applications Node.js). Pour plus d’informations, consultez Remote debugging and SSH in App Service on Linux (Débogage à distance et technologie SSH dans App Service sur Linux).

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

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

Intégration et déploiement continus

Mon application web utilise toujours une ancienne image de conteneur Docker après la mise à jour de 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(e) pour Azure Container Registry ou DockerHub, consultez Déploiement continu avec Web App pour conteneurs. Pour les registres privés, vous pouvez actualiser le conteneur en arrêtant puis démarrant votre application web. Vous pouvez également modifier ou ajouter un paramètre d’application factice pour forcer une 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 le paramètre d’application WEBSITE_WEBDEPLOY_USE_SCM sur false.

Le déploiement Git de mon application échoue quand j’utilise une application web Linux. Comment puis-je résoudre ce problème ?

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

  • Utilisez 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 Configurer la livraison continue pour une application web Linux.

  • Utilisez l’API de déploiement ZIP : pour utiliser cette API, connectez-vous via SSH à votre application web et accédez au dossier où vous souhaitez déployer votre code. Exécutez le code ci-dessous :

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

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

Support multilingue

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

Oui, vous devez désactiver perMessageDeflate dans votre code 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. Lors d’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 déclenchera une installation Composer.

Conteneurs personnalisés

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

Oui, cette fonctionnalité est disponible dans l’interface Azure CLI. Vous pouvez utiliser des identités attribuées par le système ou attribuées par l’utilisateur. Actuellement, cette fonctionnalité n’est 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 le paramètre WEBSITES_ENABLE_APP_SERVICE_STORAGE est non spécifié ou est défini sur false, le répertoire /home/ n’est pas partagé par les instances de mise à l’échelle, et les fichiers écrits ne sont pas conservés après chaque redémarrage. La définition explicite de WEBSITES_ENABLE_APP_SERVICE_STORAGE sur true active le montage. Une fois que cette valeur est fixée à true, si vous souhaitez désactiver le montage, vous devez explicitement la fixer WEBSITES_ENABLE_APP_SERVICE_STORAGE à false.

Mon conteneur ne parvient pas à démarrer avec « aucun espace laissé 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. Elle est gérée 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 peut-être 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 les données en dehors du répertoire ou d’un chemin de /home 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 /home répertoire ou byOS (Bring Your Own Storage), il génère des échecs de démarrage ou des exceptions d’exécution une fois la limite d’espace disque 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 App Service, car l’espace disque hôte est fixe et partagé entre tous les conteneurs du plan App Service.

Mon conteneur personnalisé met longtemps à démarrer, et la plateforme le redémarre avant qu’il ait terminé.

Vous pouvez configurer le temps que la plateforme doit attendre avant qu’elle redémarre votre conteneur. Pour ce faire, définissez le paramètre d’application WEBSITES_CONTAINER_START_TIME_LIMIT sur la valeur souhaitée. La valeur par défaut est de 230 secondes, la valeur maximale de 1800 secondes.

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

Vous devez fournir l’URL de registre complète, y compris http:// ou https://.

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

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

Je veux exposer plusieurs ports sur l’image de mon conteneur personnalisé.

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

Puis-je apporter mon propre système de stockage ?

Oui, le mode Bring Your Own Storage est disponible en préversion.

Pourquoi est-il impossible de parcourir le système de fichiers de mon conteneur personnalisé à partir du site SCM ?

Le site SCM s’exécute dans un conteneur distinct. Vous ne pouvez pas vérifier le système de fichiers ou les processus en cours d’exécution du conteneur d’application.

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

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

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

Oui, c’est obligatoire pour les conteneurs personnalisés. Pour configurer manuellement un port personnalisé, utilisez l’instruction EXPOSE dans le Dockerfile et le paramètre de l’application, WEBSITES_PORT, avec une valeur de port pour la liaison 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. P. ex. : dans le script init.sh : export ASPNETCORE_URLS={Votre valeur}

Plusieurs conteneurs avec Docker Compose

Comment configurer Azure Container Registry (ACR) de manière à utiliser plusieurs conteneurs ?

Pour utiliser ACR avec plusieurs conteneurs, toutes les images de conteneur doivent être hébergées sur le même serveur de Registre ACR. Une fois qu’elles se trouvent sur le même serveur de Registre, vous devez créer des paramètres d’application, puis mettre à jour le fichier config Docker Compose en y ajoutant 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, p. ex. : https://<server-name>.azurecr.io)
  • DOCKER_REGISTRY_SERVER_PASSWORD (activez 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 savoir quel conteneur est accessible via Internet ?

  • Un seul conteneur peut être ouvert en vue d’y accéder
  • Seuls les ports 80 et 8080 sont accessibles (ports exposés)

Voici les règles pour déterminer quel conteneur est accessible, par ordre d’importance :

  • Le paramètre d’application WEBSITES_WEB_CONTAINER_NAME doit être défini sur le nom du conteneur.
  • Le premier conteneur doit définir le port 80 ou 8080.
  • Si aucune de ces règles n’est appliquée, le premier conteneur défini dans le fichier sera accessible (exposé).

Comment utiliser depends_on ?

L' depends_on option n’est pas prise en charge sur app service et sera ignorée. À l'instar de la recommandation de Docker concernant le contrôle du démarrage et de l'arrêt, les applications App Service Multi-container doivent vérifier les dépendances par le biais du code de l'application, tant au démarrage qu'à la déconnexion. L'exemple de code ci-dessous montre une application Python vérifiant 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 sockets Web sont toujours activés pour Linux.

Important

Les sockets web 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 App Service gratuits. Le dépassement de cette limite entraîne une réponse HTTP 429 (Trop de requêtes).

Tarifs et contrat SLA

À présent que le service est disponible généralement, quels sont les tarifs ?

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

Autres questions

Comment fonctionne la demande de préparation de conteneur ?

Lorsqu’Azure App Services démarre votre conteneur, la demande de préparation 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 n’importe quel code d’état autre que 5XX. Si votre logique d’application ne répond pas avec un code d’état HTTP à des points de terminaison inexistants, la demande de préparation ne peut pas recevoir de réponse et elle redémarre perpétuellement votre conteneur. La demande de préparation 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 des demandes de préparation de conteneur ?

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

Comment spécifier le port dans mon conteneur Linux ?

Type de conteneur Description Comment définir/utiliser le port
Conteneurs intégrés Si vous sélectionnez une version de langue/framework pour une application Linux, un conteneur prédéfini est sélectionné pour vous. Pour faire pointer votre code d’application vers le port approprié, utilisez la variable d’environnement PORT.
Conteneurs personnalisés Vous avez le contrôle total du conteneur. App Service n'a aucun contrôle sur le port sur lequel votre conteneur écoute. Ce dont il a besoin, c'est de savoir vers 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 sur un autre port, vous devez définir le paramètre d’application WEBSITES_PORT sur le numéro de port et App Service transférer les demandes vers 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 un fichier (comme SQLight) avec mon application web Linux ?

Le système de fichiers de votre application est un partage réseau monté. Cela rend possibles les scénarios de scale-out dans lesquels votre code doit être exécuté sur plusieurs hôtes. Malheureusement, cela bloque l’utilisation de fournisseurs de bases 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 géré : Azure SQL, Azure Database pour MySQL ou Azure Database pour PostgreSQL

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

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

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

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