La presente guía de instalación proporciona el paso a paso de la instalación y configuración del proyecto bajo un entorno con sistema operativo GNU/Linux, concretamente Ubuntu.
git clone --recursive https://github.com/tic-ull/portal-del-investigador.git
Para la instalación de dependencias de módulos Python se emplea pip. Se recomienda el uso de virtualenv junto con esta herramienta, en las instrucciones no se entrará a explicar su funcionamiento.
sudo apt-get install python-pip sudo pip install -U distribute sudo apt-get install postgresql postgresql-client postgresql-contrib libpq-dev \ libxml2-dev libxslt1-dev python-dev xvfb redis-server mercurial sudo pip install -r requirements.min.txt
Los parámetros de configuración del proyecto y sus módulos se establecen en los ficheros settings.py. Varios de estos parámetros necesitan ser sobreescritos, para ello se emplean los ficheros settings_local.py. Se proporcionan los ficheros settings_local-sample.py como ejemplo y punto de partida, por lo que se recomienda su uso.
Configuración del Proyecto Investigación
cp investigacion/settings_local-sample.py investigacion/settings_local.py
VARIABLE | DESCRIPCIÓN | TIPO |
---|---|---|
BASE_URL | URL de la página principal del proyecto. Por defecto es un servicio externo | string |
SECRET_KEY | https://docs.djangoproject.com/en/1.7/ref/settings/#secret-key | |
DEBUG | https://docs.djangoproject.com/en/1.7/ref/settings/#std:setting-DEBUG | |
TEMPLATE_DEBUG | https://docs.djangoproject.com/en/1.7/ref/settings/#template-debug | |
DEVEL | Si DEVEL es True (Entorno de Desarrollo), el servidor de aplicaciones de Django servirá los ficheros estáticos. En otro caso, deberá hacerse desde el Servidor Web del sistema | boolean |
ADMINS | https://docs.djangoproject.com/en/1.7/ref/settings/#std:setting-ADMINS | |
SUPPORT | Nombre del Departamento de Soporte que se le mostrará al usuario en caso de error | string |
EMAIL_SUPPORT | Correo Electrónico del Departamento de Soporte que se le mostrará al usuario en caso de error | string |
CAS_SERVER_URL | URL del Servicio de Autenticación (CAS) | string |
WS_SERVER_URL | URL base del Servicio de Web Services | string |
Configuración específica de cada módulo
Base de Datos por defecto
La base de datos puede configurarse sobreescribiendo los valores por defecto en investigacion/settings_local.py siguiendo el formato que se indica en la documentación de Django. Una vez configurada, se deben ejecutar los siguientes comandos:
sudo python manage.py makemigrations python manage.py migrate
Base de Datos histórica
Para la realización de Informes de Producción Científica extraídos de los CVN se puede clonar la base de datos por defecto a una base de datos histórica de sólo lectura. Cada base de datos histórica se debe añadir a la configuración de bases de datos de Django en investigacion/settings_local.py, y posteriormente al diccionario HISTORICAL cumpliendo con el siguiente formato:
HISTORICAL = { '2013': 'nombre_bbdd_historica_2013', '2014': 'nombre_bbdd_historica_2014', ... }
El Sistema de Autentificación implementado actualmente es CAS, con un backend basado en django-cas.
CAS es un sistema de Single Sign-On (SSO), por lo que el proyecto no incluye formulario de inicio de sesión o registro de usuarios. Cuando un nuevo usuario accede con sus credenciales a través del SSO se crea automáticamente como usuario del proyecto.
Es posible cambiar el sistema de autenticación actual de manera sencilla, este deberá manejar externamente el registro y el inicio de sesión.
Para ello, necesitará crear un nuevo backend de autenticación o adaptar uno ya existente sobreescribiendo su función authenticate
,
asegurándose de que se cumplen las siguientes condiciones:
-
Si las credenciales de un usuario son válidas se debe realizar una llamada a
UserProfile.get_or_create_user
, con el username y el documento (NIF/NIE, Pasaporte, etc.) como parámetros. -
Debe introducir en
request.session['attributes']
un json con información del usuario siguiendo la siguiente estructura:{ 'TipoCuenta': 'personal', 'username': 'Usuario', 'first_name': 'Nombre', 'last_name': 'Apellidos', 'NumDocumento': 'NIF', 'email': 'email@example.com', }
CLAVE DESCRIPCIÓN USO FUERA DEL BACKEND POR DEFECTO TipoCuenta Tipo de cuenta de usuario
Se bloqueará el acceso a los usuarios con el tipo de cuenta que se establezcan en la lista settings.CAS_TIPO_CUENTA_NOAUT
No username Nombre de usuario para el inicio de sesión Sí first_name Nombre del usuario Sí last_name Apellidos del usuario Sí NumDocumento Número de Documento de Identidar del usuario. No email Correo electrónico del usuario Sí
Para el uso del sistema de inicio de sesión integrado en el proyecto se requieren mayores cambios que los indicados en esta guía.
Aunque no se detallan, debe tener en cuenta que independientemente del método de autentificación, la creación de usuarios debe
realizarse siempre a través de UserProfile.get_or_create_user
.
Ejemplo de Sistema de Autenticación basado en Django CAS
Si dispone de un servidor CAS puede integrarlo en el proyecto realizando los siguientes pasos:
-
Configurar el servidor CAS para que retorne los atributos indicados en esta Sección.
Dependiendo del backend de autenticación elegido y la versión de CAS, puede ser necesario retornar algún otro atributo, como el
uid
con el username del usuario. -
Instalar el backend de autenticación, por ejemplo, django-cas.
-
Sobreescribir los parámetros de configuración del settings que se encuentran en la Sección AUTHENTICATION CAS - ULL, se recomienda hacer uso del settings_local.py.
-
En el fichero core/backends.py se encuentra un backend de autenticación que emplea el django-cas instalado, con la función
authenticate
sobreescrita con las necesidades del Portal del Investigador. Por lo que no es necesario modificar el resto de la configuración para su uso.
Ejemplo de Sistema de Autenticación basado en ModelBackend
Una manera sencilla de autenticarse en la aplicación es hacer uso del Sistema de Autenticación por defecto de Django. Para ello, se deben realizar los siguientes pasos:
-
Sobreescribir la variable settings.AUTHENTICATION_BACKENDS sustituyendo el backend
core.backends.CASBackend
pordjango.contrib.auth.backends.ModelBackend
. -
Reemplazar las urls a las vistas de login de django_cas de investigacion/urls.py por las siguientes:
urlpatterns += patterns('', url(r'^accounts/login/$', 'django.contrib.auth.views.login', {'template_name': 'admin/login.html'}, name="login"), url(r'^accounts/logout/$', 'django.contrib.auth.views.logout', name="logout"), )
-
La creación de usuarios puede realizarse desde una shell Django, realizando una llamada a
UserProfile.get_or_create_user
.Una vez creado el usuario debe asignarle una contraseña a través de
User.set_password
.
Cuando una página requiera autenticación, el usuario será redirigido al formulario de login de Django.
Parte de la funcionalidad del Portal del Investigador requiere la existencia de Servicios Web que provean información necesaria. Estas funcionalidades no son esenciales, por lo que pueden ser deshabilitadas.
La información necesaria para la creación de los diferentes Servicios Web se puede encontrar en las secciones correspondientes de cada módulo:
La estructura de URLs está diseñada siguiendo el esquema dominio_institución/url_investigación/aplicación/, por lo que una URL válida sería, por ejemplo, https://www.example.com/investigacion/cvn/.
Puede cambiar esta estructura en el fichero investigacion/urls.py, pero debe tener en cuenta que por defecto todas las URLs siguen este esquema.
A modo de ejemplo, si se quiere acceder al módulo de Gestión del CVN del Portal desde el servidor de desarrollo de Django,
suponiendo que se haya ejecutado con el comando: python manage.py runserver
, se deberá acceder a
http://localhost:8000/investigacion/cvn/.
Por defecto, la URL principal del proyecto, http://localhost:8000/investigacion/ es parametrizable, con el objetivo de localizar un sitio web de la institución externo a Django.