Share via


Publication d’applications web Python dans Azure App Service sur Linux

Visual Studio offre la possibilité de publier directement une application web Python sur Azure App Service sur Linux. Cela signifie copier les fichiers nécessaires sur le serveur et configurer un fichier web.config adapté qui indique au serveur web comment lancer votre application.

Remarque

Linux est le seul système d’exploitation permettant d’exécuter des applications Python dans App Service. Python sur Windows n’est plus pris en charge, comme décrit dans App Service Linux Docs - Prise en charge de Python. Pour Windows, vous pouvez créer votre propre image conteneur Windows personnalisée et l’exécuter dans App Service. Pour plus d’informations, consultez Utiliser une image Docker personnalisée.

Prérequis

  • Visual Studio. Pour installer le produit, suivez les étapes décrites dans Installer Visual Studio.

  • Un projet d’application web Python basé sur l’infrastructure Bottle, Flask ou Django. Vous pouvez créer un projet de test pour essayer le processus de publication.

  • Pour publier sur Azure, vous avez besoin d’un service Azure App Service cible pour votre abonnement Azure.

    Si vous n’avez pas encore d’abonnement Azure, commencez avec un compte Azure gratuit. Envisagez également de vous inscrire à Visual Studio Dev Essentials.

Versions de Visual Studio

Le processus de publication diffère entre Visual Studio 2017 et ultérieur, et Visual Studio 2015. Les deux approches sont décrites dans cet article.

  • Visual Studio 2015 automatise certaines des étapes d'installation, notamment la création du fichier web.config, mais cette automatisation limite la flexibilité et le contrôle sur le long terme.

  • Visual Studio 2017 et ultérieur nécessite plus d’étapes d'installation manuelles, mais offre un contrôle plus précis sur votre environnement Python.

Pour plus d’informations sur les changements entre Visual Studio 2015 et Visual Studio 2017 et ultérieur, consultez le billet de blog Publier sur Azure dans Visual Studio 2017.

Créer un projet de test

Si vous n’avez pas de projet existant à publier, vous pouvez créer un projet de test pour essayer le processus.

  1. Dans Visual Studio, sélectionnez Fichier > Nouveau > Projet dans le menu de la barre d’outils pour ouvrir la boîte de dialogue Créer un nouveau projet.

  2. Dans la boîte de dialogue, entrez bottle dans le champ Recherche, sélectionnez le modèle Projet web Bottle, puis sélectionnez Suivant.

    Le modèle Projet web Bottle est inclus dans la charge de travail de développement Python. Pour plus d’informations, consultez Modèles de projet d’application web Python.

  3. Entrez un nom et un emplacement de chemin d’accès pour le projet, puis sélectionnez Créer.

  4. Suivez les invites pour installer les packages externes, sélectionnez Installer dans un environnement virtuel, puis choisissez votre interpréteur de base favori pour l’environnement virtuel.

    L’environnement virtuel correspond généralement à la version de Python installée sur App Service.

Lorsque vous êtes prêt, vous pouvez tester le projet localement en sélectionnant Déboguer > Démarrer le débogage ou utiliser le raccourci clavier F5.

Créer le service Azure App Service cible

La publication sur Azure nécessite un service Azure App Service cible pour un abonnement Azure.

Créez un service App Service avec une application web vide en procédant comme suit :

  1. Connectez-vous au portail Azure.

  2. Accédez à la page App Services.

  3. Sélectionnez Créer puis Application web dans la liste déroulante. La page Créer une application web s’ouvre.

  4. Sous l’onglet Informations de base, configurez les paramètres suivants :

    Setting Description
    Groupe de ressources Ignorez ce champ. Le système met à jour cette valeur après avoir choisi le paramètre d’exécution.
    Nom Entrez le nom de l’application web.
    Publier Sélectionnez Code.
    Pile d’exécution Choisissez le runtime Python approprié dans le menu déroulant. Après avoir choisi un élément, le système met à jour le champ Groupe de ressources.
    Région Sélectionnez une région Azure près de chez vous.
    Plan tarifaire Sélectionnez le plan F1 gratuit.

    Pour les exemples de cet article, vous pouvez ignorer les paramètres des autres onglets.

  5. Sélectionnez Vérifier + créer. Vérifiez vos sélections, puis sélectionnez Créer.

  6. (Facultatif) Une fois l’App Service prêt, vous pouvez accéder à la ressource, sélectionner Télécharger le profil de publication et enregistrer le fichier localement.

Configurer Python sur Azure App Service

Une fois que vous avez un App Service avec une application web vide s’exécutant dans votre abonnement, installez la version de Python de votre choix. Pour publier depuis Visual Studio 2017 et ultérieur, enregistrez le chemin exact de l’interpréteur Python installé avec l’extension de site. Pour plus d’informations, veuillez consulter la rubrique Installer des interpréteurs Python.

Si vous le souhaitez, vous pouvez également installer le package bottle. Toutefois, ce package est installé lors d'une étape ultérieure de cette procédure pas à pas.

Publier sur App Service - Visual Studio 2017 et ultérieur

La publication sur Azure App Service à partir de Visual Studio 2017 et ultérieur copie seulement les fichiers de votre projet sur le serveur. Vous devez créer les fichiers nécessaires pour configurer l’environnement du serveur.

  1. Dans l’Explorateur de solutions de Visual Studio, cliquez avec le bouton droit sur le projet, puis sélectionnez Ajouter > Nouvel élément. Dans la boîte de dialogue, sélectionnez le modèle Azure web.config (Fast CGI), puis sélectionnez Ajouter. Cette étape crée un fichier web.config dans le dossier racine de votre projet.

  2. Modifiez l’entrée PythonHandler dans le fichier web.config pour que le chemin d'accès corresponde à l’installation de Python sur le serveur, comme décrit dans Référence de configuration IIS (iis.net). Par exemple, pour Python 3.6.1 x64, l’entrée doit être la suivante :

    <system.webServer>
      <handlers>
        <add name="PythonHandler" path="*" verb="*" modules="FastCgiModule"
            scriptProcessor="D:\home\Python361x64\python.exe|D:\home\Python361x64\wfastcgi.py"
            resourceType="Unspecified" requireAccess="Script"/>
      </handlers>
    </system.webServer>
    
  3. Définissez l’entrée WSGI_HANDLER dans le fichier web.config de façon appropriée pour le framework que vous utilisez :

    • Bottle : ajoutez des parenthèses après la valeur app.wsgi_app, comme indiqué dans cet exemple. Les parenthèses sont nécessaires, car l’objet est une fonction plutôt qu’une variable. Vous pouvez voir la syntaxe dans le fichier app.py.

      <!-- Bottle apps only -->
      <add key="WSGI_HANDLER" value="app.wsgi_app()"/>
      
    • Flask : changez la valeur de WSGI_HANDLER en <project_name>.app, où <project_name> correspond au nom de votre projet. Vous pouvez trouver l’identificateur exact en examinant l’instruction from <project_name> import app dans le fichier runserver.py. Par exemple, si le projet est nommé « FlaskAzurePublishExample », l’entrée apparaît comme suit :

      <!-- Flask apps only: Change the project name to match your app -->
      <add key="WSGI_HANDLER" value="FlaskAzurePublishExample.app"/>
      
    • Django : deux modifications sont nécessaires dans le fichier web.config pour les projets Django.

      • Remplacez la valeur WSGI_HANDLER par django.core.wsgi.get_wsgi_application(). L’objet se trouve dans le fichier wsgi.py.

        <!-- Django apps only -->
        <add key="WSGI_HANDLER" value="django.core.wsgi.get_wsgi_application()"/>
        
      • Ajoutez l’entrée suivante immédiatement après l’entrée de la clé WSGI_HANDLER. Remplacez la valeur DjangoAzurePublishExample par le nom de votre projet :

        <add key="DJANGO_SETTINGS_MODULE" value="django_iis_example.settings" />
        
  4. Applications Django uniquement : dans le fichier settings.py du projet Django, ajoutez votre domaine d’URL de site ou votre adresse IP à l’entrée ALLOWED_HOSTS. Remplacez « vspython-test-02.azurewebsites.net » par votre URL :

    # Change the URL to your specific site
    ALLOWED_HOSTS = ['vspython-test-02.azurewebsites.net']
    

    Si vous n’ajoutez pas votre URL aux résultats du tableau, l’erreur suivante s’affiche :

    DisallowedHost at / Invalid HTTP_HOST header: '\<site URL\>'. You might need to add '\<site URL\>' to ALLOWED_HOSTS.
    

    Lorsque le tableau est vide, Django autorise automatiquement 'localhost' en tant qu’hôte. Si vous ajoutez votre URL de production, 'localhost' n’est pas automatiquement autorisé en tant qu’hôte. Pour cette raison, vous pouvez conserver des copies de développement et de production distinctes du fichier settings.py, ou utiliser des variables d’environnement pour contrôler les valeurs d’exécution.

  5. Sélectionner le modèle.

    1. Dans la fenêtre de l’Explorateur de solutions, développez le dossier de votre projet.
    2. Cliquez avec le bouton droit sur le dossier static et sélectionnez Ajouter > Nouvel élément.
    3. Sélectionnez le modèle Fichier web.config des fichiers statiques Azure, puis Ajouter.

    Cette action crée un autre fichier web.config dans le dossier statique, qui désactive le traitement de Python pour ce dossier. Cette configuration envoie des demandes de fichiers statiques au serveur web par défaut au lieu d’utiliser l’application Python.

  6. Dans l’Explorateur de solutions, enregistrez votre projet puis cliquez avec le bouton droit sur votre projet et sélectionnez Publier.

    Capture d’écran montrant comment accéder à la commande Publier pour un projet dans Visual Studio.

  7. Dans la fenêtre Publier, spécifiez la cible de publication :

    1. Pour la cible, sélectionnez Azure, puis Suivant.

    2. Pour la cible spécifique, sélectionnez Azure App Service (Windows), puis Suivant.

      • Si la boîte de dialogue indique que d’autres composants obligatoires sont nécessaires pour terminer l’installation, sélectionnez Terminer. Visual Studio Installer s’ouvre. Confirmez les options, puis sélectionnez Installer.
    3. Pour l'App Service, sélectionnez l’App Service approprié pour votre abonnement, puis Terminer.

      Capture d’écran montrant comment préparer le processus de publication sur Azure dans Visual Studio 2017 et versions ultérieures à l’aide d’un abonnement existant.

      Une fois le processus de création de publication terminé, sélectionnez Fermer.

  8. Visual Studio affiche l’état dans une fenêtre « Activité de publication web » et également dans la fenêtre de progression de la création du profil de publication. Lorsque le message « Prêt à publier » s'affiche pour l’application web, sélectionnez Publier.

    Capture d’écran montrant comment publier l'application web dans Visual Studio.

  9. Lorsque la publication réussit, le navigateur par défaut s’ouvre sur l’URL du site. L’URL du site apparaît également dans la fenêtre Publier.

    Capture d’écran montrant le navigateur ouvert à l’URL du site pour l’application web publiée.

    Si l’URL du site ne s’ouvre pas automatiquement, sélectionnez Ouvrir le site pour afficher l’application web dans le navigateur :

    Capture d’écran montrant comment ouvrir l’URL du site pour l’application web publiée dans le navigateur.

  10. Lorsque le navigateur s’ouvre, il se peut que vous voyiez le message : « La page ne peut pas être affichée, car une erreur de serveur interne s’est produite ». Ce message indique que votre environnement Python sur le serveur n’est pas entièrement configuré, auquel cas procédez comme suit :

    1. Vérifiez qu'une extension de site Python appropriée est installée. Pour plus d'informations, consultez Démarrage rapide : Déployer une application web Python (Django ou Flask) sur Azure App Service.

    2. Vérifiez le chemin de l’interpréteur Python dans votre fichier web.config. Le chemin doit correspondre exactement à l’emplacement d’installation de l’extension de site que vous avez choisie.

    3. Utilisez la console Kudu pour mettre à niveau tous les packages répertoriés dans le fichier requirements.txt de votre application. Accédez au même dossier Python utilisé dans le fichier web.config, par exemple /home/python361x64. Exécutez la commande suivante, comme décrit dans la section de la console Kudu :

      python -m pip install --upgrade -r /home/site/wwwroot/requirements.txt
      

      Si vous voyez des erreurs d’autorisation lorsque vous exécutez cette commande, vérifiez que vous exécutez la commande dans votre dossier d’extension de site. N’exécutez pas la commande dans un dossier qui possède l’une des installations Python par défaut de l’App Service. Étant donné que vous ne pouvez pas modifier ces environnements par défaut, toute tentative d’installation de packages risque d’échouer.

    4. Pour obtenir des informations détaillées sur les erreurs, ajoutez la ligne suivante au fichier web.config dans le nœud <system.webServer>, qui fournit des informations plus détaillées sur les erreurs :

      <httpErrors errorMode="Detailed"></httpErrors>
      
    5. Essayez en redémarrant le service App Service après l’installation de nouveaux packages. Vous n’avez pas besoin de faire un redémarrage après avoir changé le fichier web.config, car App Service effectue automatiquement un redémarrage quand des changements sont apportés au fichier web.config.

      Conseil

      Si vous apportez des modifications au fichier requirements.txt de votre application, veillez à utiliser à nouveau la console Kudu pour installer tous les packages désormais répertoriées dans ce fichier.

  11. Une fois que vous avez entièrement configuré l’environnement du serveur, actualisez la page dans le navigateur pour afficher l’application web :

    Capture d’écran montrant les résultats de la publication d’applications Bottle, Flask et Django dans Azure App Service dans Visual Studio.

Publier sur App Service - Visual Studio 2015

Suivez ces étapes pour publier votre application web Python sur Azure App Service dans Visual Studio 2015.

  1. Dans l’Explorateur de solutions, cliquez avec le bouton droit sur le projet, puis sélectionnez Publier.

  2. Dans la boîte de dialogue Publier, sélectionnez Microsoft Azure App Service :

    Capture d’écran montrant comment publier sur Azure dans Visual Studio et sélectionner un service Azure App Service.

  3. Sélectionnez Microsoft Azure App Service comme cible de publication. Dans la boîte de dialogue suivante, sélectionnez un App Service existant ou Sélectionnez Nouveau pour en créer un.

  4. Les détails d’App Service apparaissent dans l’onglet Connexion de la boîte de dialogue Publier.

    Capture d’écran montrant comment publier sur Azure dans Visual Studio et afficher la connexion App Service.

  5. Si nécessaire, sélectionnez Suivant pour passer en revue d'autres paramètres.

  6. Sélectionnez Publier. Une fois votre application déployée sur Azure, votre navigateur par défaut s’ouvre au niveau de cet URL de site.

Dans le cadre de ce processus, Visual Studio effectue également les étapes suivantes :

  • Crée un fichier web.config sur le serveur, qui contient des pointeurs appropriés vers la fonction wsgi_app de l’application et vers l’interpréteur Python 3.4 par défaut d’App Service.
  • Désactive le traitement des fichiers dans le dossier statique du projet. (Les règles de cette action se trouvent dans le fichier web.config.)
  • Publie l’environnement virtuel sur le serveur.
  • Ajouter un fichier web.debug.config et les outils de débogage pour permettre le débogage à distance. Pour Visual Studio 2019 version 16.4 et versions antérieures, les outils de débogage sont ptvsd. Pour Visual Studio 2019 version 16.5 et ultérieures, les outils de débogage sont debugpy.

Comme mentionné précédemment, ces étapes automatiques simplifient le processus de publication, mais elles peuvent rendre plus difficile le contrôle de l’environnement Python. Par exemple, le fichier web.config est créé seulement sur le serveur, mais il n’est pas ajouté à votre projet. Le processus de publication prend aussi plus de temps, car il copie tout l’environnement virtuel à partir de votre ordinateur de développement, au lieu de s’appuyer sur la configuration du serveur.

Enfin, vous pouvez préférer gérer votre propre fichier web.config et utiliser requirements.txt pour gérer directement les packages sur le serveur. Lorsque vous utilisez le fichier requirements.txt en particulier, vous pouvez garantir que vos environnements de développement et de serveur correspondent toujours.