Implementación rápida de sitios web con Django, Heroku y New Relic

El rápido desarrollo y despliegue de aplicaciones se está convirtiendo rápidamente en un requisito y objetivo para muchos proyectos, antiguos y nuevos. Afortunadamente, está surgiendo una amplia gama de opciones para que los desarrolladores aprovechen los recursos de implementación y la estrecha integración con el lenguaje de programación que elija. Las implementaciones en la nube, donde las compañías ofrecen una gran cantidad de hardware que puede escalar según sus necesidades, son cada vez más populares debido a su flexibilidad y rentabilidad al seguir un modelo de pago al usar.

Uno de los cambios más emocionantes que ha traído este cambio a las plataformas en la nube, particularmente en el caso de proyectos más pequeños, es que muchas nubes ofrecen una oportunidad de implementación gratuita aunque con un uso mínimo de hardware. Esto permite el alojamiento gratuito de aplicaciones prototipo, por ejemplo, o productos beta que le brindan una instancia de aplicación en vivo y en ejecución que puede poner 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 una pequeña empresa local o incluso un sitio web de cartera donde puede mostrar algunos de sus trabajos..

Introducción

Este artículo se centra en mi experiencia en el rápido desarrollo de un sitio web de portafolio en Python y en el popular marco web Django utilizando algunas plantillas de arranque para darle estilo al sitio. Con un sitio limpio capaz de mostrar el trabajo, le mostraré cómo agregarlo a un sistema de administración de contenido (CMS) generado por Django, así como qué tan fácil puede ser implementarlo en Heroku para el alojamiento de su sitio y luego supervise el tráfico, los errores y los tiempos de respuesta utilizando la integración de New Relic incorporada de Heroku. Todo gratis, dentro de unas horas de trabajo..

Crea tu sitio web

En primer lugar, necesita un proyecto que desee alojar en la nube. Como se mencionó anteriormente, mi proyecto fue crear rápidamente un sitio web de portafolio desde el cual mostrar mis artículos y otros proyectos, junto con mi CV e información de contacto. Python y Django ofrecieron una combinación perfecta para estos requisitos y puede comenzar rápidamente a construir un sitio web dinámico con Django y su diseño ORM, lo que proporciona una integración sencilla entre sus plantillas web y los datos subyacentes almacenados en una base de datos..

Antes de escribir cualquier código, debe crear un entorno virtual de Python para su proyecto, para mantener las dependencias de este proyecto separadas de las demás. Bajo el capó, virtualenv copia efectivamente su instalación global de Python a la .virtualenvs carpeta bajo un directorio con nombre para su virtualenv. Luego agrega esta ubicación al frente de su ruta para que su sistema use 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 "pipa".

 $ pip install virtualenv $ pip install virtualenvwrapper 

Después de instalar el virtualenv herramientas que luego debe agregar una línea de origen a su .Bashrc en su directorio de inicio (Linux / Mac OS X), que permite la virtualenvwrapper Scripts en la línea de comandos, lo que permite la creación, activación y eliminación sencillas de entornos virtuales. Puedes crear el virtualenv como sigue.

 $ mkvirtualenv portfolio 

Con la configuración de su entorno, puede instalar Django, que utilizará para definir la aplicación web. Django se puede instalar ejecutando el siguiente comando.

 $ pip instalar django 

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

 $ django-admin.py startproject tuts 

Esto producirá la siguiente estructura.

 tuts / tuts / __init__.py settings.py urls.py wsgi.py 

Puede 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 su aplicación Django, como conexiones de base de datos y aplicaciones (ver más abajo).
  • urls.py - Las rutas que enlazan a 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 solo el contenedor externo para su aplicación web real. La parte del código debe estar dentro de una aplicación y puedes usar los métodos de ayuda de Django para crear la estructura de la aplicación para ti..

 $ python manage.py portfolio de startapp 

Esto agregará lo siguiente a nuestra estructura general de directorios..

 tuts / tuts / __init__.py settings.py urls.py wsgi.py portfolio / admin.py models.py tests.py views.py 

Una vez que haya creado su aplicación, deberá registrarla en su proyecto Django. Abrir settings.py y añadir "cartera" a la INSTALLED_APPS tupla

 INSTALLED_APPS = ('django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles' , 'portafolio' ) 

Para comprobar que todo funciona, ingrese 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 de abajo..

Definiendo el modelo

Ahora que el directorio de su proyecto está configurado, comencemos a aplicar el código. Como sabemos el tipo de datos que queremos agregar al sitio de la cartera, podemos comenzar a definir el modelo. Esto describe nuestros datos en la base de datos y le permite a Django seguir adelante y crear los campos y tablas apropiados en la base de datos para nosotros. En nuestro sitio web, colocaremos entradas para artículos, libros y material de tesis. Cada uno de estos podría tener su propio modelo individual si desea darles campos de datos únicos que no se aplican a los otros tipos de entradas. Sin embargo, para este sitio web, cada entrada recibirá un nombre, fecha de publicación, descripción y URL. En el modelos.py archivo en el directorio de la aplicación de cartera, puede definir estos datos de entrada como:

 clase Elemento (models.Model): publish_date = models.DateField (max_length = 200) name = models.CharField (max_length = 200) detail = models.CharField (max_length = 1000) url = models.URLField () thumbnail = models.CharField (max_length = 200) 

Con el modelo definido, puede generar esto en la base de datos utilizando las herramientas de línea de comandos integradas de Django que se ponen a su disposición después de la instalación. Si haces uso de la manage.py archivo de nuevo, también puede utilizar el syncdb comando para manejar la configuración de la base de datos para usted. Si ejecuta el siguiente comando, se le mostrarán las opciones disponibles que proporciona esta herramienta de administración.

 $ python manage.py syncdb Creando tablas ... Creando una tabla portfolio_item Instalando SQL personalizado ... Instalando índices ... Instalaron 0 objeto (s) desde 0 arreglo (s) 

Utilizando la syncdb El método le 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 esta es la primera vez que ejecuta este comando, Django también le pedirá que responda algunas preguntas. Estos incluirán elementos como la creación de un superusuario para la base de datos (esencialmente el administrador) que le permitirá protegerse con una contraseña para evitar 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 volver mostrando que ha ejecutado el SQL en 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 desea mostrar al usuario. Para lograr esto, deberá agregar 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 pasar esto a plantillas que pueden interpretarse 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 usarse para otros tipos de aplicaciones, como producir JSON o XML, que nuevamente solo usaría el modelo para definir y mover los datos, y las vistas que lo presentan, en el formato correcto de JSON. / XML en lugar de HTML.

Nuestras vistas

En las vistas, va a hacer uso de los datos que se almacenarán en la base de datos para mostrarlos a los usuarios. Para ello, importamos el ít clase para acceder a ese modelo (con Django manejando el acceso de la base de datos debajo) y proporciona los datos como variables a la "plantilla" que Django representará. La plantilla es en su mayoría HTML estático, con la posibilidad 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 elementos a la plantilla, pero luego recorrer esa lista dentro de la plantilla para obtener solo el nombre de cada elemento y mostrarlo dentro de una H1 etiqueta. Con suerte, esto se aclarará con la ayuda de los siguientes ejemplos..

Abre el vistas.py archivo creado anteriormente, y agregue el siguiente código que se ejecutará al acceder a la página de inicio (o índice) de su sitio web.

def index (request): items = Item.objects.order_by ("- publish_date") now = datetime.datetime.now () return render (request, 'portfolio / index.html', "items": items, "year ": now.year) 

Esto recopilará 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 pasarlos a la plantilla que creará en breve. El diccionario pasado 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 utiliza 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 capacidades son lo suficientemente poderosas para producir lo que necesita. Vale la pena señalar, sin embargo, 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. Si bien 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 de visualización. La lógica para recuperar y estructurar los datos debe haberse realizado en el controlador o en la vista. Sabrá cuándo ha caído en esta trampa cuando codifica mucho dentro de las plantillas y se frustra a medida que Jinja2 produce errores o sus datos mostrados simplemente no aparecerán como usted desea. 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 índice Método que maneja el acceso a los datos, todo lo que queda es definir la plantilla para mostrar nuestros artículos. Como lo sugiere el índice método, usted necesita agregar un index.html archivo dentro de la aplicación de cartera para que se pueda procesar. Agrega ese archivo con el siguiente código.

    Tuts + Django Ejemplo   

Bienvenido a tu sitio Django.

Aquí están tus objetos:

    % para el artículo en artículos%
  • nombre del árticulo
  • % endfor%

Esta es una página HTML básica que se desplazará y generará una lista de puntos de viñeta con los nombres de los elementos. Por supuesto, puede personalizarlo como desee y recomiendo encarecidamente el uso de una plantilla bootstrap si está buscando poner algo profesional en funcionamiento rápidamente. Ver más en el sitio web de Bootstrap.

URLs

La última pieza para ver si todo funciona, es seguir adelante y agregar la URL raíz para que apunte a esta plantilla que se va a representar. Debajo del directorio de aplicaciones "tuts" abre urls.py y agregue la siguiente directiva de URL a los ejemplos generados automáticamente y la URL de administrador.

 urlpatterns = patrones (", # Ejemplos: # url (r '^ $', 'tuts.views.home', name =" home "), # url (r '^ blog /', include ('blog.urls' )), url (r '^ admin /', include (admin.site.urls)), url (r '^ $', views.index, name = "index"),) 

Por fin abrir admin.py para exponer el ít clase al administrador CMS, lo que le permite ingresar los datos que se mostrarán en la página de inicio.

 desde portfolio.models import Item admin.site.register (Item) 

Entonces deberías poder iniciar tu sitio (usando ejecutar servidor como antes) y realizar las siguientes tareas..

  1. Abra la página de inicio y vea que no se muestren elementos.
  2. Abra http: // localhost: 8000 / admin e ingrese las credenciales creadas usando syncdb más temprano.
  3. Abrir elementos y agregar un nuevo elemento rellenando los campos..
  4. Visita el homenaje y deberías ver el nombre del artículo como un punto de bala..

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

 item.publish_date - item.name 

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

Desplegando a Heroku

Heroku es una gran plataforma en la nube disponible para todos los desarrolladores y empresas, como un servicio de alojamiento de clase empresarial que se adapta a todos los requisitos de alojamiento. Heroku puede manejarlo todo, desde sitios web de pasatiempos hasta sitios de negocios críticos y con mucho tráfico. Lo mejor de todo es que su estructura de precios incluye un nivel gratuito que es más que capaz de administrar un sitio web pequeño como el sitio web de cartera que hemos estado construyendo..

Heroku aprovecha la siempre popular herramienta de administración de código fuente Git como su mecanismo para controlar implementaciones en la plataforma. Todo lo que necesitas para empezar es un proyecto., git instalado y una cuenta Heroku que se puede obtener visitando la página de registro.

Una vez que se haya registrado, ingrese a su cuenta Heroku y cree una aplicación con un "web dyno". Heroku proporciona una dina gratis, que es capaz de ejecutar una instancia de aplicación única y tráfico moderado a esa instancia. Dale un nombre a tu aplicación o deja que Heroku te asigne uno. Como necesitaremos utilizar una base de datos para nuestra aplicación, entre en Complementos y adjunte la instancia gratuita de PostgreSQL a su aplicación.

Con su aplicación creada, simplemente siga estos pasos para configurar su git repositorio y empuje a Heroku.

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

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

 $ git init. $ git añadir. $ git commit -m "Compromiso inicial del proyecto". 

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

 $ heroku git: remote -a YOUR_APP_NAME 

Heroku necesita saber el comando para exactamente cómo iniciar su aplicación. Para esto, necesitas agregar un "Procfile". Agregue el archivo llamado"Procfile"en la raíz de su directorio de proyectos, con los siguientes contenidos.

 web: gunicorn tuts.wsgi 

Para permitir que la aplicación Heroku pueda conectarse a la instancia de base de datos adjunta a su aplicación en la nube, debe agregar la siguiente línea a settings.py. Esto significa que no necesita codificar por hardware ninguna configuración y Heroku manejará las conexiones por usted..

 si no es os.environ.get ("HOME") == '/ PATH / TO / YOUR / HOME': # Analizar la configuración de la base de datos desde $ DATABASE_URL import dj_database_url DATABASES ['default'] = dj_database_url.config () 

Al ajustar la configuración de esta conexión de base de datos en el Si declaración, permite que la configuración funcione como está en su máquina local pero configura la base de datos correctamente cuando está en Heroku.

También necesita agregar un requisitos.txt, que especifica las dependencias de Python para la aplicación para que Heroku pueda instalarlas en el entorno creado. Añadir requisitos.txt al mismo nivel que el Procfile Con los siguientes contenidos:

 Django == 1.6.2 dj-database-url == 0.3.0 dj-static == 0.0.5 django-toolbelt == 0.0.1 gunicorn == 18.0 newrelic == 2.16.0.12 psycopg2 == 2.5.2 wsgiref = = 0.1.2 

Con los archivos creados, agréguelos a Git y luego presione el control remoto de Heroku, donde se recibirán y comenzarán..

 $ git añadir. $ git commit -m "Agregado procfile y Requirements.txt" $ git push heroku master 

Debería ver algunos resultados cuando se envía a Heroku y terminará con el siguiente mensaje:
"http://APP_NAME.herokuapp.com/ desplegado a Heroku"

Si golpeara la URL ahora, vería un mensaje de error. Si recuerda en su máquina local, necesita ejecutar syncdb para crear las tablas en la base de datos para que la aplicación las use. Necesitas reproducir este comportamiento en nuestra instancia de Heroku. Afortunadamente, Heroku proporcionó una forma sencilla de ejecutar estos comandos en su instancia de aplicación en el cinturón de herramientas que instaló anteriormente.

 $ heroku ejecuta python manage.py syncdb 

Entonces deberías poder visitar tu enlace y ver el sitio web que se ejecuta en Heroku, de forma gratuita. Intente agregar algunos elementos a su base de datos de la misma manera que lo hizo localmente, para asegurarse de que la base de datos esté configurada correctamente..

Añadir nueva reliquia

Con su aplicación implementada con éxito en la plataforma Heroku, ahora puede comenzar a ver los muchos complementos que se proporcionan. Heroku ofrece una gran variedad de complementos que van desde bases de datos, herramientas de monitoreo, herramientas de registro avanzadas, análisis, proveedores de correo electrónico y muchos más. Los complementos son uno de los grandes aspectos de hospedar su aplicación en Heroku, ya que pueden asignarse rápida y fácilmente a su aplicación y, en cuestión de minutos, configurarse y funcionar. Heroku ha simplificado el proceso para agregar estas herramientas y le quita mucho trabajo para que pueda concentrarse en entregar su producto..

Uno de los complementos en los que se centrará este artículo es el de adjuntar la gran herramienta de análisis y análisis, New Relic. New Relic tiene muchas capacidades para profundizar en su aplicación y proporcionar estadísticas y datos sobre elementos tales como solicitudes por minuto, errores, tiempos de respuesta y más. Lo mejor de todo es que, una vez más, Heroku proporciona un nivel gratuito para agregar a su sitio web junto con el alojamiento gratuito que tenemos actualmente..

Agregar New Relic a su aplicación Heroku es simple y requiere que solo inicie sesión en la página de administración de su cuenta Heroku. Una vez allí, haga clic en la aplicación a la que desea agregarla y elija "+ Obtener complementos". Luego se te presentará con la amplia gama de complementos que Heroku proporciona. Busca a través de"Nueva reliquia"y haga clic en él. Se mostrará una página que muestra la descripción y el precio y un desglose de las funciones en cada nivel de precio. Para el nivel gratuito, esencialmente obtiene acceso a casi todas las funciones pero está vinculado a solo los últimos siete días Un valor de los datos. Desde el complemento de New Relic en la página, simplemente puede copiar y pegar el código para adjuntar New Relic a su aplicación y ejecutarlo en la línea de comandos..

 Addons de $ heroku: add newrelic: stark 

Con eso agregado, puedes volver a visitar la página de tu aplicación dentro de tu cuenta de Heroku y ahora deberías ver New Relic debajo de tu base de datos. Haz clic en él para comenzar la configuración dentro de tu cuenta de New Relic. Aquí deberá aceptar los términos y condiciones y luego seguir las instrucciones para instalar New Relic en su aplicación Django. Estos son los siguientes:

  1. Añadir "newrelic" para usted requisitos.txt y luego ejecute:
    $ pip install -r Requirements.txt
  2. Ejecute este comando sustituyendo en la clave de licencia que se le muestra:
    $ newrelic-admin genera-config YOUR_LICENCE_KEY newrelic.ini
  3. Abre el recién generado. newrelic.ini y cambiar el "nombre de la aplicación"a algo significativo para usted, por ejemplo," Django Tuts + "o" Django Portfolio "
  4. Editar 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. Confirma y envía estos cambios a Heroku y deberías comenzar a ver los informes de datos de aplicaciones en New Relic en breve..
    $ git add .
    $ git commit -m "Agregada nueva configuración de Relic".
    $ git push heroku master
  6. Después de hacer clic en "Conectar aplicación"en New Relic y al 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 panel para ver los datos.

Envolver

¡Eso es todo al respecto! Dentro de unos 15 minutos, puede tener el monitoreo completo de la aplicación New Relic adjunto a su aplicación, nuevamente de forma gratuita.

Tuts + ha tenido recientemente algunos excelentes artículos que presentan New Relic y muestran algunas técnicas y usos más avanzados para la herramienta de monitoreo. Puede encontrar la gama completa de artículos o, alternativamente, puede ir directamente a mi otro artículo sobre pruebas de rendimiento con New Relic y JMeter.

Esperamos que hayas encontrado este tutorial informativo y algo en lo que puedas sumergirte y probarlo por ti mismo en una o dos horas libres. Con un poco de estilo y contenido ingresado a través de la página de administración que crea Django, puede desarrollar rápidamente un sitio profesional, alojado y monitoreado de forma gratuita.

Verifique mi sitio web en mi perfil de autor que fue escrito en Django, alojado por Heroku y supervisado por New Relic, lo que inspiró la redacción de este artículo.