You are here: Home » Blog » Aplicaciones web con Django sobre Heroku

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:

key image

 

Abrimos el archivo id_rsa.pub

vim id_rsa.pub

Copiamos el contenido del archivo e ingresamos a https://github.com, se requiere registro.

GitHub

Una vez autenticados en Github, ingresamos a la configuración de la cuenta.

github preferences

 En Profile ingresamos a SSH Keys

SSH Key Git

Alli asignamos un titulo a la clave,  pegamos el contenido que copiamos del archivo id_rsa.pub , agregamos la clave.

Add key github

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:

<strong>git config --global user.name "<em>Nombre Apellido</em>"</strong>
<strong>git config --global user.email "usuario<em>@dominio.com</em>"</strong>

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.

Heroku login

 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:
heroku open

 

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

<strong>git init</strong>
<strong>git add .</strong>
<strong>git commit -am "heroku test"</strong>

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:

Heroku APP

Subir la clave pública a Heroku

heroku keys:add ~/.ssh/id_rsa.pub

Desplegamos la aplicación con git.

git push heroku master

git push heroku

Para validar los proceso y estado del proceso ejecutamos:

heroku ps

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.

heroku open

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/

 

Founder of http://hotfixed.net - Co-Founder of @BusyToneGroup and @S3cT0 | Penetration Tester | Security Consultant | Linux | VoIP

http://hotfixed.net

5 Comments

  1. 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

  2. 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.

Comments are closed.