Implementaci贸n de aplicaciones Django en Heroku desde GitHub

    Introducci贸n

    Heroku es una plataforma como servicio (PaaS) popular que permite a los desarrolladores ejecutar e implementar aplicaciones aprovechando la infraestructura requerida en t茅rminos de hardware y software.

    Esto significa que no tenemos que invertir en el hardware y software necesarios para exponer nuestras aplicaciones a los usuarios finales y esta libertad nos permite concentrarnos en nuestra l贸gica empresarial en lugar de la implementaci贸n.

    En esta publicaci贸n, describiremos c贸mo implementar una aplicaci贸n Django simple en una canalizaci贸n de Heroku. Se dirige a los desarrolladores de Python existentes y asume un conocimiento b谩sico de la configuraci贸n y ejecuci贸n de una aplicaci贸n Django.

    Prerrequisitos

    Para esta publicaci贸n, necesitaremos:

    • Un nivel libre Cuenta de Heroku,
    • Python 3+ y Virtualenv instalados
    • Git instalado y una cuenta de GitHub.

    Aplicaci贸n de demostraci贸n

    Bootstrapping de la aplicaci贸n Django

    Antes de implementar nuestra aplicaci贸n Django, necesitaremos prepararla seg煤n los requisitos de Heroku. Comenzaremos creando un entorno virtual, activ谩ndolo e instalando los paquetes requeridos, y finalmente arrancando una aplicaci贸n Django simple:

    $ virtualenv --python=python3 env --no-site-packages
    $ source env/bin/activate
    $ pip install django gunicorn
    $ django-admin startproject plaindjango
    

    Si todo va bien, deber铆amos tener la siguiente p谩gina de destino ejecut谩ndose en nuestro servidor local:

    En este punto, la estructura de carpetas de nuestro proyecto es:

    $ cd plaindjango && tree .
    .
    鈹溾攢鈹 manage.py
    鈹斺攢鈹 plaindjango
        鈹溾攢鈹 __init__.py
        鈹溾攢鈹 asgi.py
        鈹溾攢鈹 settings.py
        鈹溾攢鈹 urls.py
        鈹斺攢鈹 wsgi.py
    
    1 directory, 6 files
    

    Antes de implementar en Heroku, necesitaremos realizar algunos cambios. Primero, necesitamos cambiar el ALLOWED_HOSTS en nuestro plaindjango/settings.py a:

    ALLOWED_HOSTS = ['*']
    

    Esta configuraci贸n define los hosts o dominios que nuestra aplicaci贸n Django puede servir. Es una medida de seguridad contra Ataques de host de encabezado HTTP, pero dado que el nuestro es un proyecto de demostraci贸n simple, permitiremos que todos los hosts agreguen '*' en la lista.

    El siguiente cambio que debemos hacer es especificar una carpeta para nuestros archivos est谩ticos a trav茅s del STATIC_ROOT ajuste:

    STATIC_ROOT = os.path.join(BASE_DIR, 'static')
    

    Cuando Heroku est谩 implementando nuestra aplicaci贸n, ejecuta el comando django-admin collectstatic, que agrupa y guarda todos los archivos est谩ticos en la carpeta especificada. Esta carpeta estar谩 en el directorio ra铆z de nuestro proyecto.

    Preparaci贸n de la aplicaci贸n para la implementaci贸n

    Con nuestra aplicaci贸n Django lista, Heroku requiere que incluyamos los siguientes archivos en la ra铆z de nuestro proyecto para que pueda estar listo para su implementaci贸n:

    • runtime.txt

    El prop贸sito de este archivo es especificar la versi贸n de Python que se utilizar谩 para ejecutar nuestro proyecto. En nuestro caso, el archivo solo contendr谩:

    python-3.7.6
    
    • Procfile

    Este archivo especifica los comandos que se ejecutar谩n cuando se inicie el programa.

    Mientras configuramos, instalamos Gunicorn (‘Green Unicorn’) que es un servidor WSGI (Web Server Gateway Interface) puro de Python para UNIX.

    Si bien Django se env铆a con su propio servidor WSGI, nuestro perfil le dir谩 a Heroku que use Gunicorn para servir nuestra aplicaci贸n. El contenido de este archivo ser谩:

    web: gunicorn plaindjango.wsgi:application --log-file -
    

    Esta l铆nea le dice a Heroku que la nuestra es una web proceso o aplicaci贸n que se iniciar谩 utilizando gunicorn. Gunicorn luego usar谩 el archivo WSGI de nuestro proyecto para iniciar nuestro servidor de aplicaciones.

    • requirements.txt

    Finalmente, necesitamos el requirements.txt archivo que define los requisitos de nuestra aplicaci贸n Django. Podemos crear esto en nuestro entorno virtual ejecutando el siguiente comando:

    $ pip freeze > requirements.txt
    

    La estructura de carpetas final de nuestra aplicaci贸n Django que contiene los archivos adicionales ahora ser谩:

    $ tree .
    .
    鈹溾攢鈹 Procfile
    鈹溾攢鈹 manage.py
    鈹溾攢鈹 plaindjango
    鈹   鈹溾攢鈹 __init__.py
    鈹   鈹溾攢鈹 wsgi.py
    鈹   鈹溾攢鈹 settings.py
    鈹   鈹溾攢鈹 urls.py
    鈹   鈹斺攢鈹 wsgi.py
    鈹溾攢鈹 requirements.txt
    鈹斺攢鈹 runtime.txt
    
    1 directory, 9 files
    

    Con estos archivos en su lugar, nuestra aplicaci贸n est谩 lista para Heroku.

    Implementar en Heroku a trav茅s de GitHub

    Si bien Heroku ofrece su propia plataforma Git que podemos usar para nuestras implementaciones, no es tan rica en funciones como GitHub. Heroku tambi茅n nos permite extraer nuestro c贸digo de GitHub e implementarlo.

    Nuestro c贸digo est谩 listo para su implementaci贸n, por lo que podemos seguir adelante y crear un repositorio de GitHub y empuja nuestro c贸digo.

    Para referencia, aqu铆 est谩 una aplicaci贸n de muestra de Django en GitHub que est谩 listo para su implementaci贸n en Heroku.

    Con nuestro trabajo listo en GitHub, vayamos a Heroku y creemos una nueva canalizaci贸n usando el bot贸n “Nuevo” en la parte superior derecha de nuestro panel de Heroku.

    Proporcionamos el nombre de nuestra canalizaci贸n y el repositorio de GitHub al que conectarse:

    Una canalizaci贸n representa un grupo de aplicaciones de Heroku que comparten la misma base de c贸digo. En un pipeline, podemos definir diferentes etapas en un flujo de trabajo de entrega continua.

    Esto significa que, a trav茅s de Heroku, podemos implementar nuestro c贸digo en nuestros entornos de producci贸n, preparaci贸n y desarrollo al mismo tiempo, todo desde GitHub.

    Cuando usamos GitHub como fuente de nuestra aplicaci贸n, podemos configurar las canalizaciones de Heroku para implementar c贸digo desde diferentes ramas a diferentes entornos.

    Por ejemplo, el c贸digo de nuestra rama “maestra” se implementar谩 en el entorno de producci贸n, la rama “staging” en nuestro entorno de ensayo y la rama “dev” en nuestro entorno de desarrollo.

    Esto nos da visibilidad sobre nuestro proyecto en m煤ltiples etapas mejorando nuestra entrega.

    Las canalizaciones de Heroku tienen una funci贸n llamada “Revisar aplicaciones” que nos permite implementar Pull Requests como aplicaciones independientes. Con esto habilitado, podemos verificar el trabajo en solicitudes de extracci贸n sin tener que extraer los cambios localmente y probarlos.

    El oleoducto Heroku

    Esta es la vista de nuestra canalizaci贸n creada recientemente para nuestra aplicaci贸n en GitHub:

    La canalizaci贸n tiene dos etapas por defecto y una secci贸n para habilitar aplicaciones de revisi贸n. Dado que todo nuestro c贸digo reside actualmente en la rama “maestra”, sigamos adelante e implementemos la rama haciendo clic en “Agregar aplicaci贸n” en la etapa de producci贸n:

    Heroku nos permite agregar aplicaciones existentes a una tuber铆a o crear una nueva. Dado que se trata de una nueva canalizaci贸n, crearemos una nueva aplicaci贸n llamada plaindjango-production ese ser谩 nuestro entorno de producci贸n.

    Esto resulta en:

    Nuestra aplicaci贸n de producci贸n ha sido creada pero nuestro c贸digo a煤n no se est谩 ejecutando. El siguiente paso es elegir la rama desde la que se implementar谩 el c贸digo en nuestro entorno de producci贸n:

    Una vez que hagamos clic en “Implementar”, Heroku extraer谩 nuestro c贸digo de la rama “maestra” y lo implementar谩. Podemos ver el progreso de la implementaci贸n viendo los registros y una vez que la aplicaci贸n est茅 implementada, recibiremos un enlace a nuestra aplicaci贸n en ejecuci贸n:

    Al final de los registros, hay un enlace a nuestra aplicaci贸n en ejecuci贸n. Cuando accedemos al enlace, somos recibidos por nuestra p谩gina de destino de Django:

    Hemos implementado con 茅xito nuestra aplicaci贸n de producci贸n Django en Heroku a trav茅s de GitHub. Para crear una aplicaci贸n para nuestro entorno de ensayo, se siguen los mismos pasos que para el entorno maestro.

    Comenzaremos creando una rama “provisional” en GitHub a trav茅s de la terminal:

    $ git checkout -b staging && git push origin staging
    

    Finalmente, se agrega una aplicaci贸n al proyecto y se crea una solicitud de extracci贸n desde la rama “provisional” a la rama “maestra”.

    Se puede ver la solicitud de extracci贸n aqu铆 en GitHub, y este es el resultado de nuestra canalizaci贸n de Heroku:

    Podemos ver que se ha creado una nueva aplicaci贸n para nuestra solicitud de extracci贸n y cuando la abrimos, podemos ver los cambios que la solicitud de extracci贸n introduce en nuestro proyecto:

    Nuestra solicitud de extracci贸n se implement贸 con 茅xito y podemos revisarla antes de fusionar los cambios en el maestro. Con las implementaciones autom谩ticas activadas, Heroku implementar谩 nuestros cambios una vez que fusionemos la solicitud de extracci贸n en la rama maestra y los cambios se activar谩n autom谩ticamente.

    Conclusi贸n

    Nuestra aplicaci贸n Django se ha implementado en Heroku desde GitHub mediante una canalizaci贸n. Si bien esta no es la 煤nica forma de implementar una aplicaci贸n Django en Heroku, es la m谩s adecuada para un proyecto colaborativo.

    Las aplicaciones en contenedores se pueden implementar en Heroku creando im谩genes de Docker y public谩ndolas en Dockerhub o en el propio registro de contenedores de Heroku. Puede encontrar m谩s informaci贸n sobre la implementaci贸n de aplicaciones Dockerized en Heroku en el documentaci贸n oficial. Heroku tambi茅n proporciona una plataforma Git que se puede utilizar para implementar aplicaciones junto con su herramienta CLI.

    Con la integraci贸n a git y la funcionalidad de GitHub para permitir la implementaci贸n de aplicaciones en contenedores, Heroku es una plataforma capaz de manejar sus necesidades de desarrollo. La plataforma tambi茅n proporciona plugins a trav茅s de un mercado.

    Estos plugins son servicios o piezas de infraestructura que se pueden utilizar para mejorar nuestras aplicaciones. Dichos plugins nos permiten integrar nuestra aplicaci贸n a bases de datos y almacenes de datos, incluidos PostgreSQL, MySQL y Redis.

    Hay m谩s por lograr con las aplicaciones Django en Heroku, y esta publicaci贸n ten铆a la intenci贸n de presentar una vista simple sobre c贸mo implementar una aplicaci贸n Django en la plataforma de una manera que se adapte a nuestro flujo de trabajo diario.

    Se puede encontrar el proyecto Django listo para Heroku aqu铆 en GitHub as铆 como la solicitud de extracci贸n abierta que tambi茅n se implement贸.

    .

    Etiquetas:

    Deja una respuesta

    Tu direcci贸n de correo electr贸nico no ser谩 publicada. Los campos obligatorios est谩n marcados con *