Deploy de proyectos Django a Heroku


Heroku
es una plataforma de hosting orientada a desarrolladores. Fue fundada en el 2007 y actualmente brindan soporte para varios lenguajes entre ellos Python. El sistema operativo utilizado es ubuntu y debian. Para realizar el deploy de nuestras aplicaciones es necesario tener nuestro código en un repositorio, por ejemplo en Github.

En este tutorial haremos la publicación o deploy de un proyecto desarrollado en Django usando github y Ubuntu. Te recomiendo crear una cuenta en Heroku.com y en Github.com

Paso 1: 

Instalar la herramienta de Heroku Toolbet: https://toolbelt.heroku.com/ . Se encuentra disponible para los Sistemas Operativos Mac OS X, Windows, Debian/Ubuntu. Para Debian/Ubuntu puedes utilizar en la linea de comando:

wget -qO- https://toolbelt.heroku.com/install.sh | sh

Se deben agregar las llaves ssh de nuestro ordenador a Heroku con la siguiente guía.

Paso 2:

Debemos instalar GIT si aún no lo tenemos para poder realizar el deploy a heroku. En Debian o Ubuntu podemos realizarlo con el comando:

sudo apt-get install git

Crear las llaves de acceso desde nuestro ordenador. Pueden realizarlo siguiendo la guía de Github.

Paso 3:

Si todo ha salido bien, debes poder loguearte en heroku desde la consola utilizando:

heroku login

Nos solicitará nuestro email y contraseña de Heroku, recibiremos el mensaje de “Authentication successful.” si nos logueamos correctamente.

Paso 4

Creamos nuestra aplicación en heroku:

heroku create proydemo

Obtendremos un mensaje como el siguiente:

Creating proydemo... done, stack is cedar
http://proydemo.herokuapp.com/ | git@heroku.com:proydemo.git
Git remote heroku added

Esto quiere decir que nuestra aplicación ha sido creada y podemos consultar nuestro enlace de prueba: http://proydemo.herokuapp.com/

Paso 5

Nos posicionamos en el directorio donde ubicamos nuestros proyectos. Por ejemplo puede ser en “/home/<user>/”. Hacemos un clone del proyecto en Github, tomaremos de ejemplo: https://github.com/damianpv/proyecto_demo, y haremos un clone con el comando:

git clone git@github.com:damianpv/proyecto_demo.git

Paso 6

Heroku necesita que tengamos en nuestro  proyecto un archivo llamado “requirements.txt”, con el cuál podrá instalar en Heroku los paquetes que necesite nuestra aplicación. Utilizando los entornos virtuales con virtualenv y virtualenvwrapper podemos realizarlo con el siguiente comando:

pip freeze > requirements.txt

Puedes ver un ejemplo del archivo aquí. Si observas el archivo requirements.txt utilizo la aplicación “gunicorn” es un servidor para python que nos ayudará servir nuestros archivos dinámicos de forma más eficiente y rápida en heroku, también se debe agregar en INSTALLED_APPS  del archivo settings.

Paso 7

Realizamos un collectstatic de todos los archivos estaticos de nuestro proyecto: Imágenes, JS, CSS.

python manage.py collectstatic

Paso 8

Ahora necesitamos crear un archivo llamado Procfile:

nano Procfile

que tenga el siguiente contenido:

web: gunicorn proy_demo.wsgi -b 0.0.0.0:$PORT

Con esto le decimos a heroku que inicie el servidor de gunicorn con la aplicación proy_demo

Paso 8

Comprobamos los archivos modificados y nuevos:

git status

Agregar los archivos nuevos.

git add .

Realizar push a Heroku y relizar el deploy de nuestra aplicación.

git push heroku master

Al terminar recibiremos un mensaje similar a: http://proydemo.herokuapp.com/ deployed to Heroku.

Cada vez que se realicen cambios y se necesite realizar el deploy a Heroku, debemos repetir el paso 8.

Espero este tutorial les sea de ayuda para publicar sus propios proyectos en Heroku.

About the author

Damián Pérez

Python and Django Developer. Apasionado por las nuevas tecnologías.

5 Comments

Leave a comment
  • cual seria la diferencia para poner a correr mi projecto en heroku y no hacerlo por ejemplo con apache y el mod_wsgi?. pregunto esto, porque hace unos dias despues de leer tanto al fin pude hacer el deploy de mi projecto en django .. pero lo hice con apache.!

    • dando respuesta a tu pregunta, podemos decir que tus proyectos Django puedes publicarlos usando: Heroku, Apache, Nginx, etc, cada uno tiene sus características particulares. Heroku te permite publicar tus proyectos sin muchas configuraciones, por lo general si tienes un VPS puedes instalarle apache lo cual puede llevarte un poco más de tiempo. Con Heroku puede usar además gunicorn que es un servidor python más eficiente. Según mi experiencia prefiero usar nginx+gunicorn, por lo general se comporta más eficiente que usando apache+mod_wsgi. Heroku puedes usarlo para testing que es gratis, o para el deploy de tu proyecto. te recomiendo que los pruebes, aprendas a configurar cada uno, y decidas cual utilizar.

      • Ohhh, gracias =) … intente con gunicorn pero al final no pude levantar el projecto :( .. y bueno me lanze con apache!!.. pero si subieras un tuto de como hacer deploy con nginx + gunicorn!! seria fabuloso!! claro cuando tngas tiempito jijij!!… igual gracias por la info!! =)

        • gracias por tu sugerencia será muy útil tenerlo. estaremos trabajando en uno para nginx+gunicorn. saludos,

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Copyright © 2014. Created by alexjs88 [Alex Dzul].