Publicar aplicaciones web de Python en Azure App Service en Linux
Visual Studio ofrece la posibilidad de publicar una aplicación web de Python directamente en Azure App Service en Linux. Publicar en Azure App Service en Linux implica copiar los archivos necesarios en el servidor y configurar un archivo web.config
apropiado que indique al servidor web cómo lanzar la aplicación.
Nota:
Linux es la única opción de sistema operativo para ejecutar aplicaciones de Python en App Service. Python en Windows ya no es compatible, como se describe en Soporte técnico de Linux para App - Compatibilidad con Python. Para Windows, puede crear su propia imagen personalizada de contenedor de Windows y ejecutar la imagen en App Service. Para obtener más información, consulte Usar una imagen de Docker personalizada.
Requisitos previos
Visual Studio. Para instalar el producto, siga los pasos descritos en Instalación de Visual Studio.
Un proyecto de aplicación web de Python basado en el marco de trabajo Bottle, Flask o Django. Puede crear un proyecto de prueba para probar el proceso de publicación.
Para publicar en Azure, necesita un Azure App Service de destino para su suscripción de Azure.
Si aún no tiene una suscripción a Azure, puede empezar con una cuenta completa de Azure gratuita. Considere también la posibilidad de suscribirse a Visual Studio Dev Essentials.
Versiones de Visual Studio
El proceso de publicación difiere entre Visual Studio 2017 y Visual Studio 2015. Ambos métodos se describen en este artículo.
Visual Studio 2015 automatiza algunos de los pasos de instalación, incluida la creación del archivo
web.config
, pero esta automatización limita la flexibilidad y el control a largo plazo.Visual Studio 2017 y versiones posteriores requieren más pasos manuales de instalación, pero ofrece un control más exacto sobre el entorno de Python.
Para obtener más información sobre los cambios entre Visual Studio 2015 y Visual Studio 2017 y versiones posteriores, consulte la entrada de blog Publish to Azure in Visual Studio 2017 (Publicar en Azure en Visual Studio 2017).
Crear un proyecto de prueba
Si no tiene un proyecto existente para publicar, puede crear un proyecto de prueba para probar el proceso.
En Visual Studio, seleccione Archivo > Nuevo > Proyecto en el menú de la barra de herramientas para abrir el cuadro de diálogo Crear un nuevo proyecto.
En el cuadro de diálogo, escriba bottle en el cuadro Buscar, seleccione la plantilla Proyecto web de Bottle y, a continuación, seleccione Siguiente.
El proyecto web de Bottle se incluye con la carga de trabajo de desarrollo de Python. Para obtener más información, consulte Plantillas de proyecto de aplicación web de Python.
Escriba un nombre y una ubicación de ruta para el proyecto y, a continuación, seleccione Crear.
Siga las indicaciones para instalar los paquetes externos, seleccione Instalar en un entorno virtual y elija el intérprete base que prefiera para el entorno virtual.
El entorno virtual suele coincidir con la versión de Python instalada en App Service.
Cuando esté listo, puede probar el proyecto localmente. Para ello, seleccione Depurar > Iniciar depuración o utilice el método abreviado de teclado F5.
Creación de Azure App Service de destino
La publicación en Azure requiere un Azure App Service de destino para una suscripción de Azure.
Puede crear un App Service con una aplicación web vacía de la siguiente manera:
Inicie sesión en el Portal de Azure.
Vaya a la página App Services.
Seleccione Crear y elija Aplicación web desde el menú desplegable. Se abre la página Crear aplicación web.
En la pestaña Información básica, configure los siguientes valores:
Configuración Descripción Grupo de recursos Omita este campo. El sistema actualiza este valor después de elegir la configuración en tiempo de ejecución. Nombre Escriba un nombre para la aplicación web. Publicar Seleccione Código. Pila del entorno en tiempo de ejecución Elija el entorno de ejecución de Python adecuado en el menú desplegable. Después de elegir un elemento, el sistema actualiza el campo Grupo de recursos. Región Seleccione cualquier región de Azure cercana. Plan de precios Seleccione el plan F1 gratis. Para ver los ejemplos de este artículo, puede omitir la configuración en las otras pestañas.
Seleccione Revisar + crear. Revise las opciones seleccionadas y elija Crear.
(Opcional) Una vez que la instancia de App Service esté lista, puede ir al recurso, seleccionar Descargar perfil de publicación y guardar el archivo localmente.
Configurar Python en Azure App Service
Cuando tenga una instancia de App Service con una aplicación web vacía que se ejecuta en la suscripción, instale la versión que desee de Python. Para publicar desde Visual Studio 2017 y versiones posteriores, registre la ruta exacta en el intérprete de Python instalado con la extensión. Para obtener más información, consulte Instalación de intérpretes de Python.
Si lo desea, también puede instalar el paquete bottle
. Sin embargo, este paquete se instala en un paso posterior de este tutorial.
Publicación en App Service: Visual Studio 2017 y versiones posteriores
Al publicar en Azure App Service desde Visual Studio 2017, solo se copian los archivos de su proyecto en el servidor. Debe crear los archivos necesarios para configurar el entorno del servidor.
En el Explorador de soluciones de Visual Studio, haga clic con el botón derecho en el proyecto y seleccione Agregar > Nuevo elemento. En el cuadro de diálogo, seleccione la plantilla Azure web.config (Fast CGI) y, a continuación, seleccione Agregar. Este paso crea un archivo
web.config
en la raíz del proyecto.Modifica la entrada
PythonHandler
en el archivoweb.config
para que la ruta de acceso coincida con la instalación de Python en el servidor, tal como se describe en la Referencia sobre la configuración de IIS (iis.net). Por ejemplo, para Python 3.6.1 x64, la entrada debería aparecer de esta forma:<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>
Establece la entrada
WSGI_HANDLER
en el archivoweb.config
de forma adecuada para el marco que estés usando:Bottle: agregue paréntesis después del valor
app.wsgi_app
como se muestra en este ejemplo. Los paréntesis son necesarios porque el objeto es una función en lugar de una variable. Puedes ver la sintaxis en el archivoapp.py
.<!-- Bottle apps only --> <add key="WSGI_HANDLER" value="app.wsgi_app()"/>
Flask: cambie el valor
WSGI_HANDLER
por<project_name>.app
, donde<project_name>
coincide con el nombre del proyecto. Para encontrar el identificador exacto, examina la instrucciónfrom <project_name> import app
en el archivorunserver.py
. Por ejemplo, si el proyecto se denominara "FlaskAzurePublishExample", la entrada aparecería así:<!-- Flask apps only: Change the project name to match your app --> <add key="WSGI_HANDLER" value="FlaskAzurePublishExample.app"/>
Django: se requieren dos cambios en el archivo
web.config
para los proyectos de Django.Cambie el valor
WSGI_HANDLER
pordjango.core.wsgi.get_wsgi_application()
. El objeto está en el archivowsgi.py
.<!-- Django apps only --> <add key="WSGI_HANDLER" value="django.core.wsgi.get_wsgi_application()"/>
Agregue la entrada siguiente inmediatamente después de la entrada de la clave
WSGI_HANDLER
. Reemplace el valorDjangoAzurePublishExample
por el nombre del proyecto:<add key="DJANGO_SETTINGS_MODULE" value="django_iis_example.settings" />
Solo aplicaciones de Django: en el archivo
settings.py
del proyecto de Django, agrega el dominio de la dirección URL o la dirección IP del sitio a la entradaALLOWED_HOSTS
. Reemplace 'vspython-test-02.azurewebsites.net' por la dirección URL:# Change the URL to your specific site ALLOWED_HOSTS = ['vspython-test-02.azurewebsites.net']
Si no agrega la dirección URL a los resultados de la matriz, se mostrará el siguiente error:
DisallowedHost at / Invalid HTTP_HOST header: '\<site URL\>'. You might need to add '\<site URL\>' to ALLOWED_HOSTS.
Cuando la matriz está vacía, Django permite automáticamente
'localhost'
como host. Si agrega la dirección URL de producción,'localhost'
no se permite automáticamente como host. Por este motivo, puede que desees mantener copias de desarrollo y producción independientes del archivosettings.py
, o bien usar variables de entorno para controlar los valores de tiempo de ejecución.Seleccione la plantilla.
- En Explorador de soluciones, expanda la carpeta del proyecto.
- Haga clic con el botón derecho en la carpeta static y seleccione Agregar > Nuevo elemento.
- Seleccione la plantilla web.config de archivos estáticos de Azure y seleccione Agregar.
Esta acción crea otro archivo
web.config
en la carpeta static que deshabilita el procesamiento de Python para esa carpeta. Esta configuración envía solicitudes de archivos estáticos al servidor web predeterminado en lugar de usar la aplicación de Python.En el Explorador de soluciones guarde el proyecto y haga clic con el botón derecho en el proyecto y seleccione Publicar.
En la ventana Publicar, especifique el destino de publicación:
En Destino, seleccione Azure y, a continuación, seleccione Siguiente.
En Destino específico, seleccione Azure App Service (Windows) y seleccione Siguiente.
- Si el cuadro de diálogo indica que se necesitan otros Componentes necesarios para completar la instalación, seleccione Finalizar. Se abre el Instalador de Visual Studio. Confirme las opciones y seleccione Instalar.
En App Service, seleccione la instancia de App Service adecuada para la suscripción y seleccione Finalizar.
Una vez completado el proceso de creación de la publicación, seleccione Cerrar.
Visual Studio muestra el estado en una ventana "Actividad de publicación web" y también en la ventana Progreso de creación del perfil de publicación. Cuando vea el mensaje "Listo para publicar" para la aplicación web, seleccione Publicar.
Cuando la publicación se realiza correctamente, se abre el navegador predeterminado en la dirección URL del sitio. La dirección URL del sitio también se muestra en la ventana Publicar.
Si la dirección URL del sitio no se abre automáticamente, seleccione Abrir sitio para ver la aplicación web en el explorador:
Cuando se abre el explorador, es posible que vea el mensaje "The page cannot be displayed because an internal server error has occurred (No se puede mostrar la página porque se ha producido un error interno del servidor)". Este mensaje indica que el entorno de Python en el servidor no está totalmente configurado, en cuyo caso realice los pasos siguientes:
Asegúrese de tener instalada una extensión de sitio de Python adecuada. Para obtener más información, consulte Inicio rápido: implementación de una aplicación web de Python (Django o Flask) en Azure App Service.
Compruebe la ruta al intérprete de Python en el archivo
web.config
. La ruta debe coincidir exactamente con la ubicación de instalación de la extensión de sitio elegida.Utiliza la consola de Kudu para actualizar los paquetes enumerados en el archivo
requirements.txt
de la aplicación. Ve a la misma carpeta de Python que se usa en el archivoweb.config
, como/home/python361x64
. Ejecute el siguiente comando tal y como se describe en la sección Consola de Kudu:python -m pip install --upgrade -r /home/site/wwwroot/requirements.txt
Si ve errores de permiso al ejecutar este comando, confirme que está ejecutando el comando en la carpeta de extensión del sitio. No ejecute el comando en una carpeta que tenga una de las instalaciones predeterminadas de Python de App Service. Dado que no se pueden modificar esos entornos predeterminados, se producirá un error al intentar instalar paquetes.
Para obtener una salida de error detallada, agrega la siguiente línea al archivo
web.config
dentro del nodo<system.webServer>
, que proporciona una salida de error más detallada:<httpErrors errorMode="Detailed"></httpErrors>
Pruebe a reiniciar el App Service después de instalar nuevos paquetes. No es necesario reiniciar al cambiar el archivo
web.config
, ya que la instancia de App Service realiza un reinicio automático cada vez que se cambia el archivoweb.config
.Sugerencia
Si realiza algún cambio en el archivo
requirements.txt
de la aplicación, asegúrese de usar de nuevo la consola de Kudu para instalar cualquier paquete que esté ahora incluido en ese archivo.
Después de configurar completamente el entorno del servidor, actualice la página en el explorador para ver la aplicación web:
Publicar en App Service: Visual Studio 2015
Siga estos pasos para publicar la aplicación web de Python en Azure App Service en Visual Studio 2015.
En el Explorador de soluciones, haga clic con el botón derecho en el proyecto y seleccione Publicar.
En el cuadro de diálogo Publicar, seleccione Microsoft Azure App Service:
Seleccione Microsoft Azure App Service como destino de publicación. En el cuadro de diálogo siguiente, seleccione una instancia de App Service existente o seleccione Nuevo para crear una instancia nueva.
Los detalles de App Service aparecen en la pestaña Conexión del cuadro de diálogo Publicar:
Según sea necesario, seleccione Siguiente para revisar otras opciones de configuración.
Seleccione Publicar. Después de que la aplicación se implemente en Azure, el explorador predeterminado se abre en la dirección URL del sitio.
Como parte de este proceso, Visual Studio también completa los siguientes pasos:
- Crea un archivo
web.config
en el servidor que contiene punteros adecuados a la funciónwsgi_app
de la aplicación y al intérprete predeterminado Python 3.4 de App Service. - Desactiva el procesamiento de archivos en la carpeta static del proyecto. (Las reglas de esta acción se encuentran en el archivo
web.config
). - Publica el entorno virtual en el servidor.
- Agrega un archivo
web.debug.config
y las herramientas de depuración para permitir la depuración remota. En Visual Studio 2019, versión 16.4 y anterior, la herramienta de depuración es ptvsd. En Visual Studio 2019, versión 16.5 y posteriores, la herramienta de depuración es debugpy.
Tal y como se mencionó antes, estos pasos automáticos simplifican el proceso de publicación, pero pueden dificultar el control del entorno de Python. Por ejemplo, el archivo web.config
se crea solo en el servidor, pero no se agrega al proyecto. El proceso de publicación también tarda más, ya que copia todo el entorno virtual desde el equipo de desarrollo en lugar de confiar en la configuración del servidor.
Finalmente, es posible que desees mantener tu propio archivo web.config
y usar el archivo requirements.txt
para mantener los paquetes en el servidor directamente. Al usar el archivo requirements.txt
, en particular, puedes ayudar a garantizar que los entornos de desarrollo y servidor coincidan siempre.
Contenido relacionado
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de