Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Web Development

Despliegue rápido de sitios web con Django, Heroku y New Relic

by
Difficulty:IntermediateLength:LongLanguages:
This post is part of a series called Performance Monitoring With New Relic.
Optimizing Application Performance with New Relic for iOS
Front-End Monitoring with New Relic Browser

Spanish (Español) translation by Kelly Gianella (you can also view the original English article)

El desarrollo y el despliegue rápidos de aplicaciones se están convirtiendo rápidamente en un requisito y un objetivo para muchos proyectos, tanto antiguos como nuevos. Afortunadamente, está surgiendo un amplio abanico de opciones que los desarrolladores pueden aprovechar en términos de recursos de despliegue y estrecha integración con el lenguaje de programación de su elección. Las implantaciones en la nube, en las que las empresas ofrecen una gran cantidad de hardware que puedes escalar según tus necesidades, son cada vez más populares debido a su flexibilidad y rentabilidad al seguir un modelo de pago por uso.

Uno de los cambios más interesantes que ha traído este paso a las plataformas en la nube, sobre todo en el caso de los proyectos más pequeños, es que muchas nubes ofrecen una oportunidad de despliegue gratuito, aunque con un uso mínimo de hardware. Esto permite alojar gratuitamente, por ejemplo, prototipos de aplicaciones o productos en fase beta, lo que permite disponer de una instancia de aplicación en vivo y en funcionamiento que puede ponerse a disposición de quien quiera, rápidamente. Del mismo modo, funciona perfectamente para cualquier sitio web que reciba una cantidad moderada de tráfico, como un pequeño negocio local o incluso un sitio web de portafolio donde pueda mostrar algunos de sus trabajos.

Introducción

Este artículo se centra en mi experiencia en el desarrollo rápido de un sitio web de cartera en Python y el popular marco web Django utilizando algunas plantillas de bootstrap para dar estilo al sitio. Con un sitio ordenado capaz de mostrar el trabajo, te mostraré cómo añadirlo a un sistema de gestión de contenidos (CMS) generado por Django, así como lo fácil que puede ser desplegar a Heroku para el alojamiento de tu sitio y luego monitorear el tráfico, los errores y los tiempos de respuesta utilizando la integración de New Relic incorporada en Heroku. Todo ello de forma gratuita, en unas pocas horas de trabajo.

Crea tu sitio web

En primer lugar, necesitas un proyecto que desees alojar en la nube. Como ya he mencionado, mi proyecto consistía en crear rápidamente un sitio web de cartera desde el que mostrar mis artículos y otros proyectos, junto con mi C.V. e información de contacto. Python y Django ofrecen una combinación perfecta para estos requisitos y se puede empezar a construir rápidamente un sitio web dinámico con Django y su diseño ORM, proporcionando una fácil integración entre sus plantillas web y los datos subyacentes almacenados en una base de datos.

Antes de escribir cualquier código, deberías crear un entorno virtual de Python para tu proyecto, para mantener las dependencias de este proyecto separadas de cualquier otra. Bajo el capó, virtualenv efectivamente copia su instalación global de Python a la carpeta .virtualenvs bajo un directorio nombrado para su virtualenv Luego agrega esta ubicación al frente de su ruta para que su sistema utilice esta instalación de Python para su proyecto. Todas las dependencias se instalan aquí en lugar de globalmente. Puedes hacer esto instalando primero virtualenv y virtualenvwrapper usando el gestor de paquetes de Python "pip".

Después de instalar las herramientas de virtualenv, debe añadir una línea de origen a su .bashrc en su directorio de inicio (Linux/Mac OS X), que habilita los scripts de virtualenvwrapper en la línea de comandos, lo que permite crear, activar y eliminar fácilmente los entornos virtuales. Puedes crear el virtualenv de la siguiente manera.

Una vez configurado el entorno, puedes instalar Django, que utilizarás para definir la aplicación web. Django se puede instalar ejecutando el siguiente comando.

Con las dependencias en su lugar, su primer paso en la creación de su proyecto Django es crear un directorio para mantener sus archivos siguiendo una estructura bastante estándar como se muestra a continuación. Afortunadamente, Django ayuda a automatizar este proceso con el uso de la herramienta de línea de comandos django-admin.py. Ejecuta lo siguiente para crear tu proyecto y el directorio de la aplicación.

Esto producirá la siguiente estructura.

Puedes leer más sobre la configuración de las aplicaciones Django en la documentación oficial de Django, pero un resumen básico de esos archivos es el siguiente:

  • settings.py - configuración para tu aplicación Django, como las conexiones a la base de datos y las aplicaciones (ver más abajo).
  • urls.py - las rutas que enlazan con las diferentes partes de sus sitios.
  • wsgi.py - un archivo para permitir el inicio de su aplicación por servidores web como Apache.

El proyecto creado hasta ahora es sólo el contenedor externo para tu aplicación web real. El grueso del código debe vivir dentro de una aplicación y, de nuevo, puedes hacer uso de los métodos de ayuda de Django para crear la estructura de la aplicación por ti.

Esto añadirá lo siguiente a nuestra estructura general de directorios.

Una vez creada tu aplicación, tienes que registrarla en tu proyecto Django. Abre settings.py y añade "portfolio" a la tupla INSTALLED_APPS:

Para comprobar que todo funciona, introduzca el siguiente comando y visite http://localhost:8000 en su navegador. Debería ver una página como la que se muestra en la imagen siguiente.

Definir el modelo

Ahora que el directorio del proyecto está configurado, vamos a empezar a desarrollar el código. Como sabemos el tipo de datos que queremos añadir al sitio de la cartera, podemos empezar a definir el modelo. Esto describe nuestros datos en la base de datos y permite a Django seguir adelante y crear los campos y tablas apropiados en la base de datos para nosotros. En nuestro sitio web, pondremos entradas para artículos, libros y material de tesis. Cada uno de ellos podría tener su propio modelo individual si quiere darles campos de datos únicos que no se apliquen a los otros tipos de entrada. Sin embargo, para este sitio web, cada entrada tendrá un nombre, una fecha de publicación, una descripción y una URL. En el archivo models.py bajo el directorio de la aplicación de la cartera, puede definir estos datos de entrada como:

Una vez definido el modelo, puedes generarlo en la base de datos utilizando las herramientas de línea de comandos integradas en Django que se ponen a tu disposición tras la instalación. Si vuelves a utilizar el archivo manage.py, también puedes utilizar el comando syncdb para que se encargue de la configuración de la base de datos por ti. Si emite el siguiente comando, se le mostrarán las opciones disponibles que ofrece esta herramienta de administración.

El uso del método syncdb permite a Django leer el modelo que acabamos de crear y configurar la estructura correcta para almacenar estos datos en la base de datos. Como es la primera vez que ejecutas este comando, Django también te pedirá que respondas algunas preguntas. Esto incluirá elementos como la creación de un superusuario para la base de datos (esencialmente el administrador) que le permitirá proteger con contraseña la realización de actualizaciones y cambios en la base de datos. Este usuario también formará el primer usuario capaz de iniciar sesión en el CMS que se generará para el sitio web una vez que tengamos las plantillas en funcionamiento.

Con la configuración del usuario, el comando debería devolver mostrando que ha ejecutado el SQL contra la base de datos. El siguiente paso es poder acceder a los datos que se almacenarán para crear un front end dinámico que se desea mostrar al usuario. Para lograr esto, tendrá que añadir código a las vistas para acceder a los datos que almacenará en la base de datos. Con los datos disponibles para las vistas, puede pasarlos a plantillas que pueden ser interpretadas como información para el usuario final. En este caso, esto será en forma de páginas HTML para un navegador web. Sin embargo, vale la pena señalar que este patrón podría utilizarse para otros tipos de aplicaciones, como la producción de JSON o XML, que de nuevo sólo utilizaría el modelo para definir y mover los datos, y las vistas que los presentan, en el formato correcto de JSON/XML en lugar de HTML.

Nuestra opinión

En las vistas, vamos a hacer uso de los datos que se almacenarán en la base de datos para mostrarlos a los usuarios. Para ello, importamos la clase Item para acceder a ese modelo (con Django manejando el acceso de la base de datos por debajo) y proporcionamos los datos como variables a la "plantilla" que Django renderizará. La plantilla es principalmente HTML estático, con la adición de la capacidad de ejecutar un conjunto restringido de código Python para procesar sus datos y mostrarlos según sea necesario. Por ejemplo, puede pasar la lista completa de objetos de artículos a la plantilla, pero luego hacer un bucle sobre esa lista dentro de la plantilla para obtener sólo el nombre de cada artículo y mostrarlo dentro de una etiqueta H1. Esperamos que esto quede más claro con la ayuda de los siguientes ejemplos.

Abre el archivo views.py que se creó para ti antes, y añade el siguiente código que se ejecutará al acceder a la página de inicio (o índice) de tu sitio web.

Esto recogerá todos los elementos almacenados en la base de datos, los ordenará por el campo de fecha de publicación, le permitirá mostrar los más recientes primero y luego los pasará a la plantilla que creará en breve. El diccionario que se pasa al método de renderización se conoce como contexto y podrá acceder a este objeto de contexto fácilmente en la plantilla para mostrar los datos según sea necesario.

Plantillas

Django hace uso de la biblioteca de plantillas Jinja2 para manejar el procesamiento de sus plantillas y es realmente agradable de usar, ya que su sintaxis es sencilla y sus habilidades son lo suficientemente potentes como para producir lo que necesitas. Sin embargo, vale la pena señalar que una trampa en la que caen la mayoría de los desarrolladores cuando trabajan con Jinja2 es hacer demasiada lógica dentro de la plantilla. Mientras que Jinja2 le proporciona una gran cantidad de operaciones estándar de Python, está destinado a un procesamiento simple para obtener los datos en el formato para su visualización. La lógica para recuperar y estructurar los datos debería haber sido hecha en el controlador y/o la vista. Sabrás cuando has caído en esta trampa cuando estés codificando mucho dentro de las plantillas y te frustres porque Jinja2 produce errores o tus datos mostrados no aparecen como quieres. En este punto, vale la pena revisar la vista para ver si puede hacer más procesamiento por adelantado, antes de pasarlo a la plantilla.

Con nuestro método de índice manejando el acceso a los datos, todo lo que queda es definir la plantilla para mostrar nuestros elementos. Como sugiere el método del índice, necesitas añadir un archivo index.html dentro de la aplicación del portafolio para que se renderice. Añade ese archivo con el siguiente código.

This is a basic HTML page that will loop over and produce a bullet point list of the item names. Por supuesto, puedes diseñar esto como lo desee y recomiendo el uso de una plantilla de Bootstrap si estás buscando para obtener algo profesional en funcionamiento rápidamente. Ver más en el sitio web de Bootstrap.

URLs

La pieza final para ver si todo está funcionando, es seguir adelante y añadir la URL raíz para que apunte a esta plantilla para ser renderizada. En el directorio de la aplicación "tuts" abra urls.py y añada la siguiente directiva de URL a los ejemplos generados automáticamente y a la URL del administrador.

Finalmente, abre admin.py para exponer la clase Item al CMS del administrador, permitiéndote introducir los datos que se mostrarán en la página de inicio.

A continuación, debería poder iniciar su sitio (utilizando el run server como antes) y realizar las siguientes tareas.

  1. Abra la página de inicio y vea que no se muestra ningún artículo.
  2. Abra http://localhost:8000/admin e introduzca las credenciales creadas anteriormente con syncdb.
  3. Abra los artículos y añada un nuevo artículo rellenando los campos.
  4. Visita el homenaje y debería ver el nombre del artículo como una viñeta.

Intente acceder a otros aspectos de los datos del artículo en la plantilla. Por ejemplo, cambie el código dentro de la viñeta para añadir también la fecha de publicación. Por ejemplo:

Ahora tiene un sitio de trabajo que simplemente necesita algo de estilo y más contenido para poder funcionar como un sitio web de cartera de trabajo.

Despliegue en Heroku

Heroku es una gran plataforma en la nube puesta a disposición de todos los desarrolladores y empresas, como un servicio de alojamiento de clase empresarial que se adapta a todos los requisitos de alojamiento. Desde sitios web para aficionados, hasta sitios web empresariales críticos de alto tráfico, Heroku puede manejarlo todo. Lo mejor de todo es que su estructura de precios incluye un nivel gratuito que es más que capaz de ejecutar un pequeño sitio web como el sitio web de la cartera que hemos estado construyendo.

Heroku utiliza la popular herramienta de gestión de código fuente Git como mecanismo de control de los despliegues en la plataforma. Todo lo que necesitas para empezar es un proyecto, git instalado y una cuenta de Heroku que se puede obtener visitando la página de registro.

Una vez que te hayas registrado, entra en tu cuenta de Heroku y crea una aplicación con un "web dyno". Heroku proporciona un dyne de forma gratuita, que es capaz de ejecutar una única instancia de aplicación y moderar el tráfico hacia esa instancia. Dale un nombre a tu aplicación o deja que Heroku te asigne uno. Como necesitaremos usar una base de datos para nuestra aplicación, ve a Add-Ons y adjunta la instancia gratuita de PostgreSQL a tu app.

Con tu aplicación creada, sólo tienes que seguir estos pasos para configurar tu repositorio git y empujar a Heroku.

Instala el Django Toolbelt que puedes encontrar en la sección de desarrolladores del sitio web de Heroku.

Inicie el repositorio Git en el directorio de su proyecto emitiendo los siguientes comandos:

Con el repositorio Git en su lugar, agrega el remoto de la aplicación Heroku para que puedas empujar el código a heroku.

Heroku necesita saber el comando para iniciar exactamente su aplicación. Para ello, necesitas añadir un "Procfile". Añade el archivo llamado "Procfile" en la raíz del directorio de tu proyecto, con el siguiente contenido.

Para permitir a la aplicación Heroku la capacidad de conectarse a la instancia de base de datos adjunta a tu aplicación en la nube, necesitas añadir la siguiente línea a settings.py. Esto significa que no necesitas codificar ninguna configuración y Heroku manejará las conexiones por ti.

Al envolver la configuración de esta conexión a la base de datos en la declaración if, permite que la configuración funcione tal cual en su máquina local pero que se configure la base de datos correctamente cuando esté en Heroku.

También necesitas añadir un requirements.txt, que especifique tus dependencias de Python para la aplicación de manera que Heroku pueda instalarlas en el entorno creado. Añade requirements.txt al mismo nivel que el Procfile con el siguiente contenido:

Con esos archivos creados, agrégalos a Git y luego empuja al remoto de Heroku, donde será recibido e iniciado.

Deberías ver alguna salida mientras se envía a Heroku y terminará con el siguiente mensaje: "http://APP_NAME.herokuapp.com/ desplegado en Heroku"

Si ahora pulsaras la URL, verías un mensaje de fallo. Si recuerdas en tu máquina local, necesitabas ejecutar syncdb para crear las tablas en la base de datos para que la aplicación las usara. Es necesario reproducir este comportamiento en nuestra instancia de Heroku. Afortunadamente, Heroku proporcionó una forma sencilla de ejecutar estos comandos contra su instancia de aplicación en el cinturón de herramientas que instaló previamente.

Entonces deberías poder visitar tu enlace y ver el sitio web funcionando en Heroku, de forma gratuita. Intenta añadir algunos elementos a tu base de datos de la misma manera que lo hiciste localmente, para asegurarte de que la base de datos está configurada correctamente.

Añadir New Relic

Con su aplicación desplegada con éxito en la plataforma Heroku, ahora puede comenzar a mirar los muchos complementos que se proporcionan. Heroku proporciona una gran variedad de complementos que van desde bases de datos, herramientas de monitorización, herramientas de registro avanzadas, análisis, proveedores de correo electrónico y muchos más. Los complementos son uno de los mejores aspectos de alojar tu aplicación en Heroku, ya que pueden asignarse rápida y fácilmente a tu aplicación y, en cuestión de minutos, estar configurados y funcionando. Heroku ha agilizado el proceso para añadir estas herramientas y te quita mucho trabajo para que puedas centrarte en entregar tu producto.

Uno de los complementos en los que se centrará este artículo es la incorporación de la gran herramienta de monitorización y análisis New Relic. New Relic tiene muchas capacidades para profundizar en su aplicación y proporcionar estadísticas y datos en torno a elementos como las solicitudes por minuto, los errores, los tiempos de respuesta y más. Lo mejor de todo es que Heroku vuelve a ofrecer un nivel gratuito para añadir a tu sitio web que se suma al alojamiento gratuito que tenemos actualmente.

Añadir New Relic a tu aplicación de Heroku es sencillo y sólo tienes que entrar en la página de gestión de tu cuenta de Heroku. Una vez allí, haz clic en la aplicación a la que quieres añadirlo y elige "+ Get Add-Ons". A continuación, se le presentará la amplia gama de complementos que ofrece Heroku. Busca "New Relic" y haz clic en él. Se mostrará una página con la descripción y el precio y un desglose de las funciones habilitadas en cada nivel de precio. En el caso del nivel gratuito, básicamente tienes acceso a casi todas las funciones, pero sólo estás vinculado a los datos de los últimos siete días. Desde la página de complemento de New Relic, puede simplemente copiar y pegar el código para adjuntar New Relic a su aplicación y ejecutarlo en la línea de comandos.

Una vez añadido esto, puedes volver a visitar la página de tu aplicación dentro de tu cuenta de Heroku y ahora deberías ver New Relic listado debajo de tu base de datos. Haz clic en él para comenzar la configuración dentro de tu cuenta de New Relic. Aquí tendrás que aceptar los términos y condiciones y luego seguir las instrucciones para instalar New Relic en tu aplicación Django. Estas son las siguientes:

  1. Añade "newrelic" a tu requirements.txt y ejecuta: $ pip install -r requirements.txt
  2. Ejecute este comando sustituyendo la clave de licencia que se le muestra: $ newrelic-admin generate-config YOUR_LICENCE_KEY newrelic.ini
  3. Abre el newrelic.ini recién generado y cambia el "app_name" por algo significativo para ti, por ejemplo "Django Tuts+" o "Django Portfolio"
  4. Edite el Procfile para incluir el inicio del agente de New Relic con el servidor:NEW_RELIC_CONFIG_FILE=newrelic.ini newrelic-admin run-program gunicorn tuts.wsgi
  5. Confirme y empuje estos cambios a Heroku y debería empezar a ver los datos de la aplicación informando a New Relic en breve.$ git add .$ git commit -m "Added New Relic config."$ git push heroku master
  6. Después de hacer clic en el botón "Connect App" en New Relic y enviar algunas solicitudes a la aplicación, New Relic debería mostrar que la aplicación se ha conectado y puede hacer clic en su tablero para ver los datos.

Resumen

Eso es todo. En unos 15 minutos, puede tener una monitorización completa de la aplicación de New Relic adjunta a su aplicación, de nuevo de forma gratuita.

Tuts+ ha publicado recientemente unos cuantos artículos muy buenos presentando New Relic y mostrando algunas técnicas y usos más avanzados de la herramienta de monitorización. Puedes encontrar la gama completa de artículos o, alternativamente, puedes ir directamente a mi otro artículo sobre las pruebas de rendimiento utilizando New Relic y JMeter.

Esperamos que este tutorial te haya resultado informativo y que puedas sumergirte en él y probarlo por ti mismo en una o dos horas libres. Con un poco de estilo y algo de contenido introducido a través de la página de administración que crea Django, puedes desarrollar rápidamente un sitio profesional, alojado y supervisado de forma gratuita.

Consulta mi sitio web en mi perfil de autor que fue escrito en Django, alojado en Heroku y monitoreado por New Relic , que inspiró la escritura de este artículo.

Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.