Aplicaciones web con Django sobre Heroku
Actualmente me encuentro dictando cursos de Python | Django y programas universitarios de Desarrollo Web, en los dos casos he notado que la gran mayoría de los estudiantes conocen poco de sistemas operativos, de servidores, bases de datos , de seguridad, redes y otros factores que se requieren a la hora de implementar y sostener una aplicación web. En estos cursos por lo general enseño a implementar servicios en linux, bases de datos, servidores web y otras cosas que enseñaban en mi época. Pero la verdad es que la gran mayoría de los estudiantes solo quieren sentarse a programar en un lenguaje específico y dejar de preocuparse por los servidores, parches, vulnerabilidades, etc… y esto no está para nada mal, aunque por cultura general es bueno saber lo básico de cada cosa
.
Debido a este escenario he preparado la siguiente guía durante la cual explicaré el proceso para utilizar una plataforma como servicio y dedicarse únicamente a desarrollar y a desplegar la aplicación sin pagar un peso, aunque si llegas a desarrollar algo a nivel profesional que pueda generar buenos ingresos y que requiera más procesamiento, mayores consultas a las bases de datos puedes comenzar a pagar para poder ofrecer una aplicación profesional.
Anteriormente los que iniciábamos en el desarrollo web , implementábamos un servidor local de pruebas (LAMP, XAMPP) o nos inscribíamos en un hosting barato o gratuito. En la actualidad existen plataformas en la nube, donde el programador ya cuenta con una infraestructura y solo debe preocuparse por programar. Alternativas como Google APP Engine, dotCloud, Gondor, Heroku, etc.. Aquí solo necesitas inscribirte y comenzar a subir código. Personalmente he trabajado con Heroku, por eso escribiré el proceso para poder colocar en funcionamiento una aplicación desarrollada con Django, un framework para desarrollo web en Python. Adicionalmente configuraremos Git como sistema de control de versiones.
Para seguir esta guía puedes trabajar con Debian o Ubuntu, y será la primera parte de un curso gratuito de Django que estoy desarrollando, muy pronto publicaremos los primeros capítulos.
Les recomiendo que antes de comenzar se registren en Heroku y vean este tutorial sobre Git y Github
Instalación de Git
sudo apt-get install git-doc git-gui git-core
Configuración de claves SSH
Para establecer la conexión entre el equipo y github se deben configurar las claves ssh.
Ingresamos a la carpeta donde se almacenan las claves ssh con el comando:
cd ~/.ssh
Listamos el contenido.
/.ssh$ ls
Nos debe aparecer algo como esto:
id_rsa id_rsa.pub known_hosts
Creamos una carpeta para guardar una copia de las claves
mkdir keyBackups
Copiamos las claves a la carpeta de Backup.
cp id_rsa* keyBackups/
Generamos una nueva clave ssh
ssh-keygen -t rsa -C “su_correo@dominio.com”
Debe aparecer algo como esto:
Generating public/private rsa key pair.
Enter file in which to save the key (/home/drodriguez/.ssh/id_rsa):
/home/drodriguez/.ssh/id_rsa already exists.
Overwrite (y/n)? y
Enter passphrase (empty for no passphrase): //Aquí colocamos una contraseña y la confirmamos en la siguiente línea
Enter same passphrase again:
Your identification has been saved in /home/drodriguez/.ssh/id_rsa.
Your public key has been saved in /home/drodriguez/.ssh/id_rsa.pub.
The key fingerprint is:
Abrimos el archivo id_rsa.pub
vim id_rsa.pub
Copiamos el contenido del archivo e ingresamos a https://github.com, se requiere registro.
Una vez autenticados en Github, ingresamos a la configuración de la cuenta.
En Profile ingresamos a SSH Keys
Alli asignamos un titulo a la clave, pegamos el contenido que copiamos del archivo id_rsa.pub , agregamos la clave.
Comprobamos la configuración desde nuestro equipo, ejecutamos el comando.
ssh -T git@github.com
Si todo está bien debe aparecer algo como esto:
The authenticity of host ‘github.com (207.97.227.239)’ can’t be established.
RSA key fingerprint is 16:27:ac:a5:72:23:2d:32:63:1b:56:4d:eb:df:a6:48.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added ‘github.com,203.93.223.229′ (RSA) to the list of known hosts.
Hi D-Virus! You’ve successfully authenticated
Configuramos nuestro nombre y cuenta de correo con los comandos:
git config --global user.name "Nombre Apellido"
git config --global user.email "usuario@dominio.com"
Listo con esto finaliza la configuración de Github.
Instalar Heroku Toolbelt
Heroku Toolbet es una Interfaz de línea de comandos para administrar nuestras aplicaciones Heroku.
wget -qO- https://toolbelt.heroku.com/install-ubuntu.sh | sh
Instalamos Heroku
sudo gem install heroku
Ejecutamos el comando:
heroku login
Ingresamos nuestras credenciales de heroku.
Instalamos las dependencias para poder trabajar con django y heroku
sudo apt-get install python-pip postgresql-server-dev-9.1 python-dev
Con pip instalamos virtualenv, con virtualenv podemos trabajar en entornos virtuales.
sudo pip install virtualenv
Creamos una carpeta en nuestro sistema en la cual vamos a crear la aplicación.
mkdir heroku_django
Ingresamos a la carpeta
cd heroku_django/
Ejecutamos virtualenv
virtualenv venv –distribute
New python executable in venv/bin/python
Installing distribut……………………….done.
Installing pip……………………………….done.
Activamos el entorno virtual.
source venv/bin/activate
El prompt de linux cambiará y aparecerá (venv) al inicio como se observa en la siguiente línea
(venv)drodriguez@hotfixed:~/heroku_django$
Esto nos indicará que estamos en el entorno virtual, desde allí vamos a instalar django y postgreSQL
pip install Django psycopg2 dj-database-url
Successfully installed Django psycopg2 Cleaning up…
Creando el proyecto en Django
Para crear un proyecto en django ejecutamos:
django-admin.py startproject hotfixed .
donde hotfixed es el nombre de nuestro proyecto, pueden colocar cualquier nombre.
Iniciamos el servidor
python manage.py runserver
Validating models…
0 errors found
Django version 1.4, using settings ‘hotfixed.settings’
Development server is running at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
Si ingresamos a un navegador y colocamos http://127.0.0.1:8000 nos debe aparecer algo como esto:

Nota: Si aparece un error como este
Traceback (most recent call last):
File “manage.py”, line 7, in <module>
from django.core.management import execute_from_command_line
ImportError: No module named django.core.management
Ejecuta el siguiente comando python2.7 manage.py runserver
Creamos un archivo con los requisitos de nuestra aplicación utilizando pip.
pip freeze > requirements.txt
Verificamos el archivo creado, allí aparecerán los requisitos de nuestra aplicación.
cat requirements.txt
Django==1.4
argparse==1.2.1
distribute==0.6.24
psycopg2==2.4.5
wsgiref==0.1.2
Enviando el proyecto a GIT
Iniciamos el repositorio y agregamos nuestro proyecto con los siguientes comandos
git init
git add .
git commit -am "heroku test"
Desplegamos la aplicación a Heroku
Creamos la aplicación en heroku
heroku create –stack cedar
Este comando nos debe retornar un mensaje como este:
Creating growing-mountain-6723… done, stack is cedar
http://growing-mountain-6723.herokuapp.com/ | git@heroku.com:growing-mountain-6723.git
Git remote heroku added
Al ingresar a nuestro panel de Heroku, debemos ver la misma aplicación que creamos con el comando anterior, allí podemos ver las propiedades entre ellas la URL de la aplicación:
Subir la clave pública a Heroku
heroku keys:add ~/.ssh/id_rsa.pub
Desplegamos la aplicación con git.
git push heroku master
Para validar los proceso y estado del proceso ejecutamos:
heroku ps
Si sale crash en el campo state verifica los logs con el comando heroku logs puede que algo ande mal
Ejecutamos el comando heroku open nos debe direccionar a nuestra aplicación django.
Si todo el proceso fue exitoso debe aparecer el siguiente mensaje pero esta vez en los servidores de heroku.
Eso es todo ya tenemos nuestra aplicación django en la nube con control de versiones!!!
Referencias:
https://devcenter.heroku.com/articles/django
http://help.github.com/linux-set-up-git/
Tags: django, git, github, heroku, linux, pip, Python, virtualenv











Presentación e instalación Kali linux
Openfire y Sparkweb en Debian Squeeze
4K Conference 2012
Barcamp Security Edition 2012
Por qué voy al Security Zone 2012 ?































5 Comentarios
Muchas gracias Dani por permitirnos aprender de ti, será muy interesante aprender programación aunque antes me gustara que se concluyera todo sobre asterisk.
Claro!!! como comenté en este artículo estamos preparando un curso de django y algo de python.
Saludos
Y para subir un proyecto que ya esté hecho?
Yo tengo una app funcionando de manera local con apache pero quiero subirla a heroku. Ya tenia mi git creado cuando entre a este post. Sigo los mismos pasos excepto donde creas la app con el manage.py y la corres. Todo lo hago dentro del directorio de la app, sube el proyecto pero no inicia el servicio web. :/ Algun comentario?
que sale en los logs??
heroku logs
Hola disculpa, ya lo resolví. Gracias por la respuesta de todas formas, haré un tutorial xD.