Instalación

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

investigacion/settings_local.py
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

Se recomienda el uso de PostgreSQL como Sistema Gestor de Bases de Datos. No se entrará a detallar la configuración del SGBD ni el proceso de creación de usuarios o bases de datos.

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
    first_name Nombre del usuario
    last_name Apellidos del usuario
    NumDocumento Número de Documento de Identidar del usuario. No
    email Correo electrónico del usuario

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:

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

  2. Instalar el backend de autenticación, por ejemplo, django-cas.

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

  4. 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:

  1. Sobreescribir la variable settings.AUTHENTICATION_BACKENDS sustituyendo el backend core.backends.CASBackend por django.contrib.auth.backends.ModelBackend.

  2. 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"),
    )
    
  3. 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.