Public | Automated Build

Last pushed: 2 years ago
Short Description
Proyecto de DAI e IV
Full Description

ProyIVDAI_FJGM

Autor: Francisco Javier Garrido Mellado

Introducción Proyecto Restaurante

Se trata de una aplicación de Bares (tambien restaurantes) y Tapas donde los usuarios se registran e introducen su bar con sus correspondientes tapas, además se les permite votar (solo es necesario estar registrados) las tapas que más le ha gustado. La página muestra una gráfica de los Bares más exitosos así como un mapa de Google para que el usuario pueda visitarlo fisicamente.

Este proyecto se ha llevado a cabo conjuntamente con la asignatura de Diseño de Aplicaciones para Internet (DAI).

Inscrito en el certamen de Software Libre

Seguridad

Respecto a la seguridad se garantiza que los datos y credenciales de los usuarios quedan salvaguardados de cualquier ataque, para ello se ha usado un sistema criptográfico basado en hash (SHA 256) que garantiza la autenticidad e integridad de los usuarios de la aplicación.

Infraestructura

Se ha creado en la nube la infraestructura necesaria para la aplicación, habiendo sido necesario el provisionamiento y la instalación de diferentes librerías para su correcto funcionamiento.

Resumen:

  • 1.Aplicación web donde interaccionan varios usuarios.
  • 2.Servidores web.
  • 3.Base de datos.

##Herramienta de Construcción

Python permite como herramienta de construcción el uso del archivo manage.py , es el que he usado en mi caso, puede verse en travis y snap-ci como lo uso para la construcción y el posterior testeo.

Además se añaden los archivos create_and_run, docker_install_and_run, heroku_deploy, run_app e install_tools para el despligue automático en una máquina virtual de Azure (inclusive la posibilidad de despliegue en una máquina local de VirtualBox ), la construcción de un entorno seguro (contenedor Docker), su posterior despliegue automático en el PAAS de Heroku, el arranque de la aplicación en local y la instalación de las librerías necesarias para realizar el despliegue en Azure o VirtualBox respectivamente.

Por último, hay dos scripts en la carpeta DAI/scripts/ que se llaman deploy_Azure y deploy_VB que se encargan de manera automatizada de crear una máquina virtual con la aplicación en Azure y VirtualBox respectivamente.Basta una única ejecución para ello.

Instalación local de la aplicación

Para ello basta con ejecutar los siguientes comandos:

$ git clone https://github.com/javiergarridomellado/DAI.git
$ cd DAI
$ python manage.py migrate
$ python manage.py createsuperuser
$ python manage.py runserver

##Desarrollo basado en pruebas

Para las pruebas he usado el sistema de testeo de Django. Basta con ejecutar el siguiente comando:

python manage.py test ó python manage.py test nombreaplicacion

Puede verse los correspondientes tests que se realizan.Se usan tanto para travis como para snap-ci.

##Integración continua

En este paso he elegido dos sistemas de integración continua de modo que cada cambio que realice implique una ejecución de los tests mencionados anteriormente, de esta manera se comprueba que la aplicación sigue funcionando correctamente.

En mi caso, he realizado la integración continua con Travis y con snap-ci ya que me parecieron sencillos y muy completos.

Más información

Despliegue en un Paas Heroku

Me he decantado por Heroku por la facilidad para el despliegue y porque es la que pedían en los ejercicios de la relación.
Esta es la aplicación desplegada en Heroku: https://restaurantejaviergarrido.herokuapp.com/restaurante/

Se ha automatizado el despliegue en heroku con el script heroku_deploy

Más información

Despliegue remoto: Fabric

Con la ayuda de Fabric, que es una biblioteca de Python para automatizar tareas de administración haciendo uso de SSH, he creado un entorno de pruebas en una máquina virtual de Azure.

La creación del entorno Docker en Azure usando el archivo fabfile puede consultarse aqui.

Como he creado la máquina virtual puede consultarse.

La aplicación (del Docker) desplegada es la siguiente http://restaurantejaviergarrido.westeurope.cloudapp.azure.com/restaurante/.

Entorno de pruebas:Docker

Se usa Docker como plataforma que automatiza el despliegue de la aplicación dentro de contenedores software, de manera que pueda probarse en un entorno aislado antes de desplegarla a producción.

La imagen de la aplicación es la siguiente

Para crear el entorno de prueba se ha provisto del archivo docker_install_and_run.sh (explicado en el siguiente apartado), basta con ejecutar:

./docker_install_and_run.sh

Sino se desea usar el script puede descargarse la imagen directamente ejecutando:

sudo docker run -t -i javiergarridomellado/dai:dai /bin/bash

Para mayor comodidad se puede hacer un reenvio de puertos de la siguiente manera (esto evita tener que buscar la ip del docker):

docker run -t -i -p 8000:8000 javiergarridomellado/dai:dai /bin/bash

Más información

Automatización o Modo de Uso ( Online )

Consultar el apartado de Despliegue Remoto.

Notar que se ha añadido un script heroku_deploy.sh el cual despliega la aplicación en el PaaS Heroku siempre y cuando las pruebas en el entorno seguro de Docker hayan sido satisfactorias. Dicho script se encuentra en DAI/scripts.

Automatización o Modo de Uso (Local)

Para facilitar el uso de la aplicación se han añadido tres scripts de manera que cualquier persona con un conocimento básico pueda probarla en un entorno tanto aislado como online.

Los pasos a seguir son los siguientes:

  • Clonar o copiar el contenido del archivo docker_install_and_run.sh en un archivo .sh
  • Dar permisos de ejecución mediante la orden chmod, por ejemplo chmod 777 docker_install_and_run.sh
  • Ejecutar el archivo mediante la orden ./docker_install_and_run.sh

Con esto nos encontramos dentro de la imagen descargada, la cual tiene la aplicación dentro. Hecho esto, hay que teclear cd DAI/scripts y se nos abre un abanico de dos posibilidades:

Ejecución

De esta manera se ejecuta la aplicación de manera local (obviamente aislado del sistema anfitrión ya que se encuentra dentro del contenedor):

  • Ejecutar la orden ifconfig para conocer la IP que hay que poner en el navegador.
  • Dar permisos de ejecución mediante la orden chmod al archivo run_app.sh, por ejemplo chmod 777 run_app.sh
  • Ejecutar el archivo mediante la orden ./run_app.sh
  • Ingresar en el navegador anfitrión ip_del_contenedor:8000 , con ello tendremos la aplicación lanzada (existe la opción de reenvio de puertos para Docker como he comentado antes).

Despliegue en Paas

De esta manera se despliega la aplicación en el PaaS Heroku (obviamente es interesante realizar el paso anterior y probar la aplicación en dicho entorno aislado antes de desplegarlo) y se utiliza la base de datos PostgreSQL que nos proporciona Heroku:

  • Dar permisos de ejecución mediante la orden chmod al archivo heroku_deploy.sh, por ejemplo chmod 777 heroku_deploy.sh
  • Ejecutar el archivo mediante la orden ./heroku_deploy.sh
  • Ingresar el user/password de nuestra cuenta Heroku y automaticamente la aplicación queda desplegada.

Despliegue en un Iaas: Azure

He usado Azure como IaaS. La aplicación se despliega automáticamente y queda en modo producción ejecutando el script deploy_Azure que se encuentra en la carpeta DAI/scripts.Esto se realiza gracias a Vagrant y Ansible.

./deploy_Azure.sh

Otra posibilidad de desplegar la aplicación (recomiendo la anterior por estar más automatizada) es ejecutar el script create_and_run aunque para ello es necesario tener en el mismo nivel los archivos Vagrantfile, ansible_hosts e iv.yml que se encuentran en el siguiente directorio. Se recomienda definir la variable de entorno ejecutando export ANSIBLE_HOSTS=~/ruta/ansible_hosts.
La url donde puede verse la aplicación es la siguiente http://restaurantejaviergarrido.cloudapp.net/restaurante/.

./create_and_run.sh

Los servicios utilizados en modo producción son los siguientes:

  • Azure como IaaS (servicio en la nube).
  • MySQL como servidor de base de datos.
  • Nginx como servidor web (tiene como función principal responder a las peticiones estáticas).
  • Gunicorn como servidor web (es el servidor de la aplicación y responde a las peticiones dinámicas).
  • Supervisor como watchdog (monitoriza y mantiene en continuo funcionamiento el servidor Gunicorn)

Más información

Despliegue en VirtualBox

Debido a que no todo el mundo dispone de cuenta en Azure facilito la opción del despliegue local gracias a VirtualBox, para ello al igual que antes, se despliega automáticamente y queda en modo producción ejecutando un script, en este caso deploy_VB que se encuentra en la carpeta DAI/scripts.Esto se realiza gracias a Vagrant y Ansible.

./deploy_VB.sh

Al igual que antes, otra posibilidad de desplegar la aplicación (recomiendo la anterior por estar más automatizada) es ejecutar el script create_and_run aunque para ello es necesario tener en el mismo nivel los archivos Vagrantfile, ansible_hosts e iv.yml que se encuentran en el siguiente directorio. Se recomienda definir la variable de entorno ejecutando export ANSIBLE_HOSTS=~/ruta/ansible_hosts.

Los servicios utilizados en modo producción son los siguientes:

  • VirtualBox como software de virtualización local.
  • MySQL como servidor de base de datos.
  • Nginx como servidor web (tiene como función principal responder a las peticiones estáticas).
  • Gunicorn como servidor web (es el servidor de la aplicación y responde a las peticiones dinámicas).
  • Supervisor como watchdog (monitoriza y mantiene en continuo funcionamiento el servidor Gunicorn)

Más información

##Generacion de Documentación

  • Ingresar en el directorio /apu
  • Ejecutar en el terminal epydoc --html views.py models.py

Cambios Realizados

Se ha añade un fichero donde se comentan los cambios más relevantes entre los diferentes hitos para facilitar la corrección de la práctica.

Comandos Básicos

###Instalación de herramientas para el despliegue en Azure

$ ./install_tools.sh

###Despliegue en Azure o VirtualBox

$ ./create_and_run.sh

###Instalar dependencias

$ pip install -r requirements.txt

###Sincronizar base de datos

$ python manage.py migrate --noinput

###Test

$ python manage.py test

###Arrancar aplicación (2 opciones)

$ ./run_app.sh
$ python manage.py runserver

###Despliegue en heroku

$ ./heroku_deploy.sh

###Instalar imagen docker (Contenedor Ubuntu+Aplicación)

$ ./docker_install_and_run.sh

Borrar una Box de Vagrant

$ vagrant box remove <nombre_box>

Referencias

Docker Pull Command
Owner
javiergarridomellado
Source Repository

Comments (0)