/decide

Plataforma de voto electrónico educativa

Primary LanguageJavaScriptGNU Affero General Public License v3.0AGPL-3.0

Python 3.6 Build Status Coverage Status Sonarcloud Status

Plataforma voto electrónico educativa

El objetivo de este proyecto es implementar una plataforma de voto electrónico seguro, que cumpla una serie de garantías básicas, como la anonimicidad y el secreto del voto.

Se trata de un proyecto educativo, pensado para el estudio de sistemas de votación, por lo que prima la simplicidad por encima de la eficiencia cuando sea posible. Por lo tanto se asumen algunas carencias para permitir que sea entendible y extensible.

Subsistemas, apps y proyecto base

El proyecto se divide en subsistemas, los cuales estarán desacoplados entre ellos. Para conseguir esto, los subsistemas se conectarán entre si mediante API y necesitamos un proyecto base donde configurar las ruts de estas API.

Este proyecto Django estará dividido en apps (subsistemas y proyecto base), donde cualquier app podrá ser reemplazada individualmente.

Configurar y ejecutar el proyecto

Para configurar el proyecto, podremos crearnos un fichero local_settings.py basado en el local_settings.example.py, donde podremos configurar la ruta de nuestras apps o escoger que módulos ejecutar.

Una vez hecho esto, será necesario instalar las dependencias del proyecto, las cuales están en el fichero requirements.txt:

pip install -r requirements.txt

Tras esto tendremos que crearnos nuestra base de datos con postgres:

sudo su - postgres
psql -c "create user decide with password 'decide'"
psql -c "create database decide owner decide"

Entramos en la carpeta del proyecto (cd decide) y realizamos la primera migración para preparar la base de datos que utilizaremos:

./manage.py migrate

Por último, ya podremos ejecutar el módulos o módulos seleccionados en la configuración de la siguiente manera:

./manage.py runserver

Ejecutar con docker

Existe una configuración de docker compose que lanza 3 contenedores, uno para el servidor de base de datos, otro para el django y otro con un servidor web nginx para servir los ficheros estáticos y hacer de proxy al servidor django:

  • decide_db
  • decide_web
  • decide_nginx

Además se crean dos volúmenes, uno para los ficheros estáticos y medias del proyecto y otro para la base de datos postgresql, de esta forma los contenedores se pueden destruir sin miedo a perder datos:

  • decide_db
  • decide_static

Se puede editar el fichero docker-settings.py para modificar el settings del proyecto django antes de crear las imágenes del contenedor.

Crear imágenes y lanzar contenedores:

$ cd docker
$ docker-compose up -d

Parar contenedores:

$ docker-compose down

Crear un usuario administrador:

$ docker exec -ti decide_web ./manage.py createsuperuser

Lanzar la consola django:

$ docker exec -ti decide_web ./manage.py shell

Lanzar tests:

$ docker exec -ti decide_web ./manage.py test

Lanzar una consola SQL:

$ docker exec -ti decide_db ash -c "su - postgres -c 'psql postgres'"