Artículo Original: https://blogs.msdn.microsoft.com/drewlewis/2018/03/29/running-django-on-azure-web-apps-for-containers-with-docker/



En esta publicación, lo guiaré por un enfoque muy simple para desarrollar y alojar una aplicación simple de Python / Django en Azure App Service. Para esta demostración, apuntemos a Azure Web Apps for Containers, que nos brinda la flexibilidad de personalizar nuestras dependencias de aplicaciones envolviendo esas bibliotecas necesarias en un contenedor Docker. Actualmente, App Service en Linux no es compatible con Python, pero podremos contener nuestra aplicación web e incluir cualquier dependencia según sea necesario. Si el servicio de aplicaciones no admite los tiempos de ejecución de la aplicación de manera predeterminada, este es el enfoque que utilizará para ejecutar su aplicación en Azure.


La aplicación

Para esta aplicación, crearé un blog simple con la tecnología de Django / Python. Para que sea más fácil seguir la estructura de la aplicación, comencé el desarrollo de la aplicación en base al excelente tutorial aquí. Este tutorial lo guiará en la creación de una aplicación de encuesta, pero lo he modificado ligeramente para que coincida con un blog simple. Por ahora, el blog se basa en un tema de arranque de código abierto, y tiene solo unas pocas páginas de trabajo, pero en el futuro agregaré una base de datos adecuada, configuraré la depuración, configuraré telemetría e instalaré CI / CD para hacer las implementaciones mucho más fáciles.

Dependencias


Descargue la aplicación


Para comenzar, clone el repositorio preconstruido con los siguientes comandos. Abra un símbolo del sistema, vaya a un lugar donde la aplicación vivirá en el sistema de archivos y escriba lo siguiente.

mkdir DjangoApps
cd DjangoApps
git clone https://github.com/drewelewis/azure-django-gunicorn-docker.git
cd azure-django-gunicorn-docker

Ahora que el esqueleto de la aplicación se ha configurado, el siguiente paso es abrirlo en Visual Studio Code. En el símbolo del sistema, escriba lo siguiente.

code





Anatomía de la aplicación


El repositorio de código contiene tanto el código de la aplicación como los detalles de la imagen, todos en el mismo repositorio. Cualquier cambio con nuestra aplicación o los detalles de nuestra imagen se realizarán en el mismo lugar.

Aquí está el resumen de las secciones más importantes.

/mysite
Bajo el directorio de mysite está nuestro proyecto principal de Django, y contiene todas las configuraciones requeridas para que nuestro proyecto se ejecute.


/Blog
El directorio del blog es una aplicación dentro de nuestro proyecto y contiene todos los bits necesarios para la funcionalidad de nuestro blog.


init.sh
Init.sh es una secuencia de comandos que se ejecutará cuando se inicie nuestro contenedor Docker. Para nuestros propósitos, este archivo arrancará Gunicorn apuntando a la ubicación de nuestra aplicación web.


Docker File


En la raíz de este proyecto está nuestro archivo docker, que contiene los detalles necesarios para que Docker construya una imagen.

El archivo docker no es más que unos pocos comandos necesarios para permitir que el acoplador construya una imagen y contiene detalles sobre ubicaciones de archivos y dependencias específicas.


Observe la primera línea en nuestro archivo docker FROM python: 3.6. Esta es una referencia a una imagen base de la que se construirá nuestra imagen. Puede elegir una imagen base que coincida con sus requisitos y luego personalizarla según sea necesario añadiendo bibliotecas adicionales.


Para obtener una lista de imágenes base, consulte la lista de Repositorios oficiales. https://hub.docker.com/explore/


Dependencias de la aplicación


Observe la línea que comienza con la instalación PIP de RUN. Esta línea instala las dependencias de aplicaciones específicas de la siguiente manera:

Gunicorn: Un servidor web que servirá nuestro contenido dinámico de Django. http://docs.gunicorn.org/en/stable/index.html

Django: Nuestro framework de aplicaciones web Python. https://www.djangoproject.com/

psycopg2: un controlador de base de datos que usaremos más tarde para conectarnos a una base de datos PostgreSQL alojada en Azure.

Whitenoise: una biblioteca que permitirá a Gunicorn ofrecer contenido estático y contenido dinámico. Ver más aquí. http://whitenoise.evans.io/en/stable/django.html




Alojando el Docker Container en Docker Hub


Con la aplicación básica y todo configurado para ejecutar un contenedor Docker listo (ver arriba), el siguiente paso es colocar el contenedor y la aplicación que está alojada dentro de él, en un repositorio Docker. Este es un paso importante porque Azure utilizará este contenedor al crear y ejecutar nuestra aplicación.


Para esto puedes alojar el contenedor Docker en Docker Hub o Azure Container Registry, pero para esta demostración elegí Docker Hub. Una vez que tenemos una cuenta Docker, podemos crear un repositorio y cargar nuestro código fuente de imagen. Si no tiene una cuenta de Docker Hub, puede configurar una aquí.


Para cargar la imagen, abra un símbolo del sistema, navegue hasta la aplicación y escriba lo siguiente.

cd azure-django-gunicorn-docker
docker login --username your-user-name
docker build -t your-user-name/azure-django-gunicorn-docker:v1.0.0 .
docker push your-user-name/azure-django-gunicorn-docker:v1.0.0


Ahora, si vuelve a iniciar sesión en Docker Hub, debería ver su repositorio cargado de manera similar.


Nota: si el repositorio no existe, se creará uno nuevo. Por defecto, esto se creará como un repositorio público.



Configurar Azure


El último paso para ejecutar nuestro contenedor Docker en Azure App Service es crear nuestro Servicio de aplicaciones. Para esto, necesitaremos crear un Grupo de recursos y un Plan de servicio de aplicaciones, y luego podremos crear nuestra aplicación.


De vuelta en el símbolo del sistema, primero inicie sesión en Azure. Se le pedirá que complete el proceso de inicio de sesión en un navegador web.

az login

Grupos de recursos


A continuación, creemos nuestro Grupo de recursos. Este grupo de recursos es un contenedor que nos permitirá administrar un grupo de recursos un poco más fácil en el futuro. Asegúrese de elegir la ubicación más cercana a usted.

az group create --name azure-django-gunicorn-dockerRG --location "East US"


Planes de servicio de aplicaciones


Vamos a crear nuestro plan de servicio de aplicaciones. Un plan de servicio nos permitirá agrupar nuestros servicios de aplicaciones para facilitar la adición o eliminación de servicios adicionales. Para obtener más detalles sobre los planes del Servicio de aplicaciones, consulte el siguiente recurso. Descripción general de los planes de servicio de aplicaciones Azure

az appservice plan create --name azure-django-gunicorn-dockerSP --resource-group azure-django-gunicorn-dockerRG --sku S1 --is-linux


Servicio de aplicaciones Azure


El siguiente comando creará nuestro servicio de aplicaciones Azure. Aquí es donde haremos referencia a nuestro grupo de recursos, servicio de aplicaciones y depósito de Docker Hub. Asegúrese de que su depósito de Docker Hub esté escrito correctamente ya que nuestra aplicación no se cargará si hay un error tipográfico, y no se le proporcionará un mensaje de error si lo escribe mal.

az webapp create --resource-group azure-django-gunicorn-dockerRG --plan azure-django-gunicorn-dockerSP --name django-on-azure-app --deployment-container-image-name drewl/azure-django-gunicorn-docker:v1.0.0


Configuraciones de la aplicación


Modificaremos nuestro Servicio de aplicaciones para que sepa que nuestro servidor web Gunicorn está escuchando en el puerto 8000 todo el tráfico.

az webapp config appsettings set --resource-group azure-django-gunicorn-dockerRG --name django-on-azure-app --settings WEBSITES_PORT=8000

Nuestra aplicación en ejecución
Ahora tenemos todo configurado y deberíamos poder ver nuestra aplicación alojada en Azure App Service. Para echar un vistazo, su URL debería verse más o menos así.


https://django-on-azure-app.azurewebsites.net


Si todo fue bien, ¡esto es lo que verás!



Próximos pasos


Seguiré este post mostrándole cómo hacer cambios en nuestra aplicación y automatizar el lanzamiento usando Visual Studio Team Services (VSTS).