Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este artículo, aprenderá cuándo y cómo configurar un archivo de inicio personalizado para una aplicación web de Python hospedada en Azure App Service. Aunque no se requiere un archivo de inicio para el desarrollo local, Azure App Service ejecuta la aplicación web implementada dentro de un contenedor de Docker que puede usar comandos de inicio si se proporcionan.
Necesita un archivo de inicio personalizado en las situaciones siguientes:
Argumentos de Gunicorn personalizados: quiere iniciar el servidor web predeterminado gunicorn con argumentos adicionales más allá de sus valores predeterminados, que son
--bind=0.0.0.0 --timeout 600
.Plataformas o servidores alternativos: la aplicación se compila con un marco distinto de Flask o Django, o quiere usar un servidor web diferente además de Gunicorn.
Estructura de aplicación de Flask no estándar: tiene una aplicación de Flask cuyo archivo de código principal se denomina algo distinto de app.py o application.py*, o el objeto de aplicación se denomina algo distinto de
app
.
Es decir, se requiere un comando de inicio personalizado a menos que el proyecto tenga un archivo app.py o application.py en la carpeta raíz con un objeto de aplicación flask denominado app
.
Para más información, consulte Configuración de aplicaciones de Python: proceso de inicio de contenedor.
Creación de un archivo de inicio
Cuando necesite un archivo de inicio personalizado, siga estos pasos:
Cree un archivo en el proyecto denominado startup.txt, startup.sh u otro nombre de su elección que contenga los comandos de inicio. Consulte las secciones posteriores de este artículo para obtener información específica sobre Django, Flask y otros marcos.
Un archivo de inicio puede incluir varios comandos si es necesario.
Confirme el archivo en el repositorio de código para que se pueda implementar con el resto de la aplicación.
En Visual Studio Code, seleccione el icono de Azure en la barra de actividades, expanda RECURSOS, busque y expanda la suscripción, expanda App Services y haga clic con el botón derecho en App Service y seleccione Abrir en el portal.
En el portal de Azure, en la página de Configuración del App Service, seleccione Configuración general, escriba el nombre de su archivo de inicio (como startup.txt o startup.sh) en la sección >Comando de inicio, y luego seleccione Guardar.
Nota:
En lugar de usar un archivo de comandos de inicio, puede colocar el comando de inicio directamente en el campo Comando de inicio en Azure Portal. Se recomienda usar un archivo de comandos de inicio porque almacena la configuración en el repositorio. Esto permite que el control de versiones realice un seguimiento de los cambios y simplifica la reimplementación en otras instancias de Azure App Service.
Seleccione Continuar cuando se le pida que reinicie App Service.
Si accede al sitio de Azure App Service antes de implementar el código de la aplicación, aparece un "Error de aplicación" porque no hay código disponible para procesar la solicitud.
Comandos de inicio de Django
De forma predeterminada, Azure App Service busca la carpeta que contiene el archivo wsgi.py e inicia Gunicorn con el siguiente comando:
# <module> is the folder that contains wsgi.py. If you need to use a subfolder,
# specify the parent of <module> using --chdir.
gunicorn --bind=0.0.0.0 --timeout 600 <module>.wsgi
Si desea modificar cualquier argumento gunicorn, como aumentar el valor de tiempo de espera a 1200 segundos(--timeout 1200
), cree un archivo de comandos de inicio personalizado. Esto le permite invalidar la configuración predeterminada con sus requisitos específicos. Para obtener más información, consulte Proceso de inicio de contenedor: aplicación Django.
Comandos de inicio de Flask
De forma predeterminada, App Service en Linux supone que la aplicación flask cumple los siguientes requisitos:
- El WSGI al que se puede llamar se denomina
app
. - El código de la aplicación se encuentra en un archivo denominado application.py o app.py.
- El archivo de aplicación se encuentra en la carpeta raíz de la aplicación.
Si el proyecto difiere de esta estructura, el comando de inicio personalizado debe identificar la ubicación del objeto de aplicación en el archivo de formato :app_object:
Nombre de archivo o nombre de objeto de aplicación diferentes: si el archivo de código principal de la aplicación es hello.py y el objeto de aplicación se denomina
myapp
, el comando de inicio es el siguiente:gunicorn --bind=0.0.0.0 --timeout 600 hello:myapp
El archivo de inicio está en una subcarpeta: si el archivo de inicio es myapp/website.py y el objeto de aplicación es
app
, use el argumento de--chdir
Gunicorn para especificar la carpeta y, a continuación, asigne el nombre al archivo de inicio y al objeto de aplicación como de costumbre:gunicorn --bind=0.0.0.0 --timeout 600 --chdir myapp website:app
El archivo de inicio está dentro de un módulo: en el código python-sample-vscode-flask-tutorial , el archivo de inicio de webapp.py se encuentra dentro de la carpeta hello_app, que es un módulo con un archivo __init__.py . El objeto de aplicación se denomina
app
y se define en __init__.py y webapp.py usa una importación relativa.Debido a esta organización, cuando Gunicorn apunta a
webapp:app
, se genera el error "Attempted relative import in non-package" (Intento de importación relativa en no paquete) y la aplicación no se inicia.En esta situación, cree un archivo shim que importe el objeto de la aplicación desde el módulo y, a continuación, haga que Gunicorn inicie la aplicación mediante el shim. El código python-sample-vscode-flask-tutorial , por ejemplo, contiene startup.py con el siguiente contenido:
from hello_app.webapp import app
A continuación, el comando de inicio es:
gunicorn --bind=0.0.0.0 --workers=4 startup:app
Para más información, consulte Proceso de inicio del contenedor: aplicación Flask.
Otros marcos y servidores web
El contenedor de App Service que ejecuta aplicaciones de Python tiene Django y Flask instalados de forma predeterminada, junto con el servidor web Gunicorn.
Para usar un marco distinto de Django o Flask (como Falcon, FastAPI, etc.) o para usar un servidor web diferente:
Incluya el marco o el servidor web en el archivo requirements.txt .
En el comando de inicio, identifique el WSGI al que se puede llamar como se describe en la sección anterior de Flask.
Para iniciar un servidor web distinto de Gunicorn, use un
python -m
comando en lugar de invocar el servidor directamente. Por ejemplo, el siguiente comando inicia el servidor uvicorn, suponiendo que el WSGI se llameapp
y que se encuentre en application.py:python -m uvicorn application:app --host 0.0.0.0
Se usa
python -m
porque los servidores web instalados a través de requirements.txt no se agregan al entorno global de Python y, por tanto, no se pueden invocar directamente. Elpython -m
comando invoca el servidor desde el entorno virtual actual.