Skip to content

romilgildo/Proyecto-PLUCO

Repository files navigation

PLUCO: PLATAFORMA UNIVERSITARIA DE COMPARTICIÓN DE CONOCIMIENTOS

Autores

  • Rubén Martín Hidalgo
  • Rafael Lachica Garrido

Web del proyecto

Apuntados en el proyecto de software libre de la oficina OSL

Travis Shippable Snap CI

Heroku Azure Docker

Introducción

Se trata de una plataforma académica de compartición de archivos de la Universidad de Granada, que permite la colaboración en grupo entre los usuarios del sistema. Ofrece servicios de almacenamiento de archivos en la nube, y de mensajería y foros para la resolución de dudas, potenciando la interacción de los usuarios, y agrupando a los mismos por grupos, por ejemplo de asignaturas o cursos.

Seguridad

En cuanto a la seguridad de nuestra plataforma los objetivos son: Permitir tener un sistema seguro en el que se separen datos sensibles y credenciales de los usuarios, y por otra parte archivos de los mismos. Además tendremos una web con foros que si es atacada no compremete la privacidad de los usuarios ni sus archivos.

Infraestuctura

La infraestructura se basa en un despliegue sobre Azure de la aplicación. La base de datos usada es MySQL, como lenguaje de programación se usa Python, además de utilizar Django como framework para agilizar el desarrollo web.

La plataforma se divide en tres partes:

  1. Red Social y soporte Sistema Web. Implementación de una red social en la que los usuarios puedan participar en la compartición del conocimiento y apoyo en problemas que puedan surgir en las asignaturas o tareas determinadas. Para ello se implementará un sistema web en Azure, con un servidor al que se conectarán los usuarios y hará de frontend, y que contendrá la información de asignaturas asociadas a cada usuario y de los foros en los que participa.

  2. Gestión de bases de datos de usuarios. Consistirá en un despliegue de MySQL sobre Azure que permita la organización y gestión de datos de los usuarios y asignaturas de la plataforma, pudiendo así recuperar la información de los usuarios, consultar sus datos asociados, modificar los datos, además de los procesos asociados a dar de alta o baja a los usuarios. El servidor web estará alojado en un servidor distinto al de la base de datos, con el objetivo de repartir la carga y dar mayor seguridad a la infraestructura.

  3. Sistema de almacenamiento sftp de recursos en la nube. Realización de un sistema de almacenamiento sftp de recursos en la nube, que se usará para la organización, administración y compartición de archivos. Tendremos al final un servicio de almacenamiento y compartición de recursos en la nube, donde cada usuario podrá subir sus propios archvivos y compartirlos con los demás usuarios. Habrá que implementar un registro asociado a los usuarios que se dan de alta en la nube para permitir subir los mismos. Todo esto irá sobre otro servidor que usaremos de Cloud Storage de Azure.

Al final del proyecto, deberemos enlazar en conjunto las tres partes del proyecto, y realizar el despliegue correcto sobre cualquier infraestructura virtual.

Proyecto bajo licencia GNU V.3

Herramienta de construcción con Make

Para la construcción automática de la app, he usado Make. Para su funcionamiento, he creado un Makefile con las distintas opciones.

Para ejecutar la herramienta de construcción, simplemente debemos escribir en la terminal el comando make seguido de la opción que queramos ejecutar (clean, test, run...).

Más información

Integración contínua

La integración contínua consiste en hacer integraciones automáticas de un proyecto cada vez que actualizamos el repositorio para así poder detectar fallos cuanto antes. Este proceso conlleva la ejecución de pruebas del proyecto.

Realización de tests con Nose

Para la realización de tests que permitan comprobar que el código creado funciona correctamente, he usado para mi código escrito en Python, el sistema de pruebas Nose, que está basado en funciones de Unittest. Existen otras alternativas para Python como pueden ser Tox y Pytest, pero he escogido Nose por ser el más conocido.

Aquí está el archivo tests.py actualizado con los tests correspondientes para manejar los modelos de la app.

Para ejecutar los tests localmente, hacer make test.

Aquí vemos como la aplicación pasa el test de pruebas inicial:

Ejecucion Nosetest

Herramientas de integración contínua

El siguiente paso es elegir un sistema de integración contínua de modo que cada cambio realizado en el repositorio, implique una ejecución de los tests anteriores comprobando y asegurandonos de que el programa sigue funcionando.

En mi caso, estoy haciendo la integración contínua con Shippable, Travis y Snap-CI

Más información

Descarga de la app

Para realizar cualquiera de las funcionalidades que vienen en esta documentación, necesitaremos descargar antes la aplicación en nuestro ordenador, y a partir de ahí podremos realizar tests, desplegar la app o simplemente arrancarla localmente.

Para ello ejecutamos los siguientes comandos:

$ sudo apt-get install git
$ sudo apt-get install make
$ git clone https://github.com/romilgildo/Proyecto-PLUCO.git
$ cd IV-PLUCO-RMH/

Instalación local de la app

Para ejecutar la aplicación en nuestro propio ordenador, ejecutamos los siguientes comandos:

$ make install
$ make run

Si todo ha ido bien, ya podremos acceder a nuestra app introduciendo localhost:8000 en nuestro navegador web. Debemos asegurarnos antes de que tenemos las bases de datos ya montadas, sino habría que hacer make mysql.

Despliegue de la app

Para desplegar la aplicación en Azure, lo primero que debemos hacer es crear el certificado para Azure.

Una vez hecho el paso anterior, ya podemos poner en marcha toda la app en la web de manera totalemente automatizada con solo ejecutar lo siguiente:

sudo ./desplegarPLUCO.sh

Dicho script instalará todo lo necesario, crea las bases de datos y despliega la aplicación en Azure con los siguientes comandos:

make install
make mysql
make azure

Para eliminar cualquiera de las máquinas creadas con Vagrant, bastará con ejecutar sudo vagrant destroy dentro del directorio donde se encuentre el fichero Vagrantfile que crea dicha máquina.

Instalación de MySQL en Azure

Para poder tener disponible desde cualquier lugar nuestra base de datos, he decidido instalar y configurar la app con MySQL en una máquina virtual independiente dentro de Azure.

Para ello, bastará con ejecutar make mysql y automáticamente se crearán las bases de datos en una máquina independiente en Azure.

Más información

Entorno de pruebas con Docker

Docker es una plataforma que automatiza el despliegue de aplicaciones dentro de contenedores software, permitiendo probarla en un entorno aislado para posteriormente desplegarla a producción rápidamente.

El repositorio de mi app en Docker se actualiza automáticamente cada vez que hago un 'push' de git. La Automated Build de mi app es esta.

Aquí está funcionando el entorno de pruebas instalado en Azure: http://pruebas-pluco.cloudapp.net

Para crear dicho entorno, se debe ejecutar el siguiente comando en local:

make docker

Más información

Despliegue en un PaaS: Heroku

Nos decantamos por Heroku, debido a que funciona realmente bien y su sencilla configuración para integración contínua. Otra alternativa de PaaS puede ser OpenShift.

Esta es la aplicación ya desplegada en Heroku: https://pluco-db.herokuapp.com/

Más información

Despliegue en un IaaS: Azure

Para el despliegue en un IaaS, he usado Azure. La aplicación se despliega automáticamente con solo ejecutar make azure usando Vagrant y Ansible.

Con el comando make push podemos actualizar al mismo tiempo los archivos en el repositorio de Git y luego en nuestra máquina de Azure.

Si el crédito de Azure no se ha agotado, tendré la aplicación web totalmente actualizada funcionando en esta dirección: http://pluco-iv.cloudapp.net/

Más información

Administración remota con Fabric

Si queremos realizar una administración remota del despliegue de manera automática, podemos usar Fabric.

Más información