Skip to content

Configuración del servidor de producción

PabloDeAlbu edited this page Mar 11, 2019 · 5 revisions

Instalación rápida

Servidor de base de datos

apt-get update && apt-get upgrade

#habilitar actualizaciones automáticas
apt-get install -y unattended-upgrades apt-listchanges
echo "APT::Periodic::Update-Package-Lists \"1\";"  >> /etc/apt/apt.conf.d/20auto-upgrades2
echo "APT::Periodic::Unattended-Upgrade \"1\";"  >> /etc/apt/apt.conf.d/20auto-upgrades2

#instalar y configurar BD
apt-get install --no-install-recommends postgresql postgresql-contrib
su postgres
> createuser --createdb --no-superuser --no-createrole --no-createdb --pwprompt dspace
> dropdb --if-exists dspace
> createdb --encoding=UNICODE --owner=dspace dspace
> psql --dbname=dspace --command="CREATE EXTENSION pgcrypto;"
#test db connection
psql --host=localhost --username=dspace --password

echo "host    dspace          dspace          200.61.248.18/24        md5" >> /etc/postgresql/9.4/main/pg_hba.conf
echo "listen_addresses = '*'" >> /etc/postgresql/9.4/main/postgresql.conf
service postgresql restart

Servidor de aplicación

1. Dependencias

apt-get update && apt-get upgrade

#dependencias
apt-get install --no-install-recommends -t jessie-backports openjdk-8-jre-headless ca-certificates-java
apt-get install --no-install-recommends maven ant-contrib tomcat8 postgresql-client apache2 git ghostscript imagemagick
apt-get install --no-install-recommends sudo mlocate less nano curl build-essential apt-utils
apt-get autoremove -y && apt-get clean

#actualizaciones automáticas
apt-get install -y unattended-upgrades apt-listchanges
echo "APT::Periodic::Update-Package-Lists \"1\";"  >> /etc/apt/apt.conf.d/20auto-upgrades2
echo "APT::Periodic::Unattended-Upgrade \"1\";"  >> /etc/apt/apt.conf.d/20auto-upgrades2

#crea HOME del usuario
mkdir /var/dspace
useradd --home-dir /var/dspace --shell /bin/bash dspace
chown dspace.dspace /var/dspace/ -R

# DEPENDENCIAS DE MIRAGE2

#permiso temporal de sudoer para dspace, necesario para instalar dependencias de Mirage2
echo "dspace ALL= NOPASSWD:ALL" > /etc/sudoers.d/rvm
su --login dspace
> curl -sSL https://get.rvm.io | bash -s stable --auto-dotfiles
> #Si tira error de claves pgp usar
> #gpg --keyserver hkp://keys.gnupg.net:80 --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3
> curl -sSL https://get.rvm.io | bash -s stable --auto-dotfiles
> rvm install ruby --default
> source ~/.rvm/scripts/rvm
> rvm install ruby --default
> gem install sass -v 3.3.14 && gem install compass -v 1.0.1
> wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.33.2/install.sh | bash
> source ~/.bashrc && nvm install --lts
> npm install -g grunt
> npm install -g grunt-cli
> echo 'export PATH="\$PATH:\$HOME/.rvm/bin"' >> ~/.bash_profile
> echo [[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm" # Load RVM into a shell session *as a function*' >> ~/.bashrc
#eliminamos los permisos de sudo para el user dspace porque ya no son necesarios
rm  /etc/sudoers.d/rvm

2. Configuración de tomcat

service tomcat8 stop
CATALINA_HOME=/var/lib/tomcat8
rm -fr $CATALINA_HOME/webapps/ROOT $CATALINA_HOME/webapps/manager $CATALINA_HOME/webapps/examples $CATALINA_HOME/webapps/docs
# cambiar user y group por dspace
nano /etc/tomcat8/server.xml
# cambiar Xmx y agregar Xms
nano /etc/default/tomcat8
#buscar archivos del user tomcat8 y pasarlo a dspace
find / -user tomcat8 -exec chown dspace {} \;
#buscar archivos del grupo tomcat8 y pasarlo a dspace
find / -group tomcat8 -exec chown dspace {} \;
service tomcat8 start
#revisar /var/log/tomcat8/catalina.out por errores

#habilita al user dspace para controlar la ejecución del tomcat
echo "dspace ALL= NOPASSWD:/etc/init.d/tomcat8 *" > /etc/sudoers.d/dspace

Para ver la configuración de Tomcat más en detalle ver

3. Instalación DSpace

su dspace
> # Ajusta configuración
> edit /var/dspace/source/dspace/config/local.cfg
> #test db connection
> psql --host=$DB_HOST --username=dspace --password
> #Compila
> mvn -Dmirage2.on=true -Dmirage2.deps.included=false -P \!dspace-jspui,\!dspace-rdf,\!dspace-sword,\!dspace-swordv2  package
> #Instala
> cd dspace/target/dspace-installer
> ant fresh_install
> #inicializa los índices solr de oai y search
> /var/dspace/install/bin/dspace oai import
> dspace index-discovery

ln -s /var/dspace/install/webapps/xmlui /var/lib/tomcat8/webapps/ROOT
ln -s /var/dspace/install/webapps/solr /var/lib/tomcat8/webapps/solr
ln -s /var/dspace/install/webapps/oai /var/lib/tomcat8/webapps/oai

4. Proxy reverso

#Apache como proxy reverso
# agrego vhost en base a https://github.com/sedici/DSpace/blob/master/dspace/config/vhost.conf
nano /etc/apache2/sites-available/dspace.conf
a2enmod rewrite proxy proxy_ajp
a2ensite dspace.conf
service apache2 restart

5. Otras configuraciones

#Ajustar configuración de logrotate de acuerdo a https://github.com/sedici/DSpace/blob/master/dspace/config/logrotate.conf
nano /etc/logrotate.d/tomcat8
nano /etc/logrotate.d/dspace

#testear archivos de configuración
logrotate -f /etc/logrotate.conf

#TODO instalar y configurar fail2ban

Cronjobs

Dentro de las tareas de línea de comandos, existen un conjunto de ellas que necesitan ejecutarse frecuentemente a través del uso de cronjobs. En sistemas basados en Debian, existen configuraciones de cronjobs a distintos niveles, pero en particular, nuestras configuraciones de cronjobs las tendremos centralizadas en archivos bajo el directorio /etc/cron.d/.

Archivos de cronjobs

El sistema ejecutará las cronjobs configuradas bajo el directorio /etc/cron.d/. Existen 2 archivos de cronjobs cuyo contenido se encuentran en los siguientes archivos:

Validar sintaxis de cronjobs

Para validar las sintaxis de las cronjobs de forma inmediata, podemos utilizar una herramienta llamada chkcrontab. Ej

./chkcrontab /etc/cron.d/backups-dspace

Cronjobs de DSpace

Algunas de las tareas ejecutadas desde las cronjobs son las siguientes

  • ./bin/dspace packager -d -a -t AIP -e [email protected] -u -i 11746/0 $DSPACE_BACKUP_DIR/backups/aip/aip-site.zip: a través de este comando se generan AIPs una vez por semana de todos los DSpaceObjects del sitio (11746/0).
  • ./bin/dspace generate-sitemaps: a través de este comando actualizamos el arbol de páginas o sitemap de nuestro sitio para favorecer una mejor indexación del sitio por parte de los motores de búsqueda como Google, Bing, DuckDuckGo, etc.
  • ./bin/dspace index-discovery: a través de este comando se actualiza el índice de búsqueda ('search') con los últimos cambios sobre los DSpaceObjects en el repositorio.
  • ./bin/dspace index-discovery -o: a través de este comando se optimiza el índice de búsqueda.
  • ./bin/dspace sub-daily: a través de este comando se realiza el envío de emails a los usuarios suscriptos a una colección o comunidad.
  • ./bin/dspace filter-media -m100 -q: a través de este comando se ejecutan "silenciosamente" todos los filters media configurados en dspace.cfg sobre los primeros 100 bitstreams pendientes de procesar.
  • ./bin/dspace oai import: a través de este comando se actualiza el índice SOLR utilzado por la aplicación OAI 2.1 ('oai') con los últimos cambios sobre los DSpaceObjects en el repositorio.

Para más información dirigirse a la página sobre las CLI operations en la documentación de DSpace.

Rotación de logs

Periódicamente en el servidor es necesario hacer una rotación de los archivos de logs (o log rotation) debido a que éstos pueden llegar a crecer excesivamente de tamaño y consumir el espacio libre disponible. Rotar los archivos puede implicar:

  • reducir el tamaño del archivo original,
  • almacenar antiguas entradas de logs en distintos archivos de rotación,
  • eliminar archivos de logs rotados a medida que pasa el tiempo,
  • comprimir archivos de rotación, entre otras acciones.

logrotate

Mediante logrotate se pueden realizar rotaciones de forma automática a partir de la validación periódica de condiciones sobre los archivos de logs y de acciones específicas de rotación. En /etc/logrotate.conf se encuentra la configuración general del programa y en /etc/logrotate.d/* están las configuraciones de revisión y rotación para cada aplicación monitoreada.

Ver por ejemplo : [TODO: LINK A archivos de logrotate de RIUNER ]

Archivos de log

Los siguientes son archivos de logs a considerar para su rotación cuando se trabaja con DSpace:

  • $[DSPACE_INSTALL_DIR]/log/dspace.log
  • $[DSPACE_INSTALL_DIR]/log/solr.log
  • $[DSPACE_INSTALL_DIR]/log/cocoon.log (para xmlui)
  • $[DSPACE_INSTALL_DIR]/log/checker.log
  • /var/log/tomcat8/*
  • /var/log/apache2/*

Tomcat Web Container

Tomcat es el web container que normalmente se utiliza para hacer un deploy de las aplicaciones que DSpace ofrece. Al momento de instalarlo hay que tener una serie de consideraciones para evitar problemas posteriormente. Leer en la documentación oficial para averiguar las configuraciones recomendadas para Tomcat.

Apache como Proxy reverso

En un servidor de producción para aplicaciones DSpace, generalmente se utiliza un Apache Web Server como punto de entrada a DSpace. En este caso podemos configurar Apache Web como un proxy reverso o inverso para ocultar los servidores que contienen realmente las aplicaciones web. En este enfoque, DSpace es levantado por un Web Container, como por ejemplo Apache Tomcat, y todas las solicitudes hacia Tomcat son manejadas primero por Apache Web Server y luego son pasadas a Tomcat.

Apache como Proxy Reverso

Leer en la documentación de DSpace la sección Using SSL on Apache HTTPD in front of Tomcat (running on ports 80 and 443).

Base de datos

Configurar database driver

Cuando DSpace utiliza PostgreSQL como base de datos, hay que configurar agregar las siguientes configuraciones:

# JDBC Driver
db.driver = org.postgresql.Driver

# Database Dialect (for Hibernate)
db.dialect = org.dspace.storage.rdbms.hibernate.postgres.DSpacePostgreSQL82Dialect

Esta configuración es utilizada por Hibernate para saber qué dialecto utilizará para comunicarse con la base de la datos.

pgcrypto

Además sera necesario instalar la extensión pgcrypto en la base de datos creada para DSpace:

psql -U postgres -h localhost <dspace_database_name> -c "CREATE EXTENSION pgcrypto;"

Para poder instalar esta extensión será necesario previamente haberlo instalado las dependencias postgresql-contrib postgresql-contrib-9.X

Configuración de conexiones

Desde la configuración de DSpace puede configurarse el máximo de conexiones concurrentes y el máximo de conexiones activas pero ociosas (idle). Es necesario configurar estos parámetros considerando la cantidad memoria en el servidor de base de datos, logrando un balance entre la cantidad de conexiones máximas y conexiones idle.

# Maximum number of DB connections in pool (default = 30)
db.maxconnections = 30

# Maximum time to wait before giving up if all connections in pool are busy (milliseconds) (default = 5000ms or 5 seconds)
db.maxwait = 5000

# Maximum number of idle connections in pool (default = -1, unlimited)
db.maxidle = 20

En la documentación de PostgreSQL puede encontrarse más información.

Handle

El uso de identificadores persistentes como los de Handle ofrece una identificación estable de los objetos en el repositorio, que pueden ser referenciados a lo largo del tiempo.

El protocolo de Handle esta basado en TCP, es por eso que la instalación en el servidor debe ser capaz de recibir y hacer broadcast en los puertos TCP 2641 y 8000. Si la instalación del servidor se encuentra detrás de un firewall, chequear que el puerto 2641 y el 8000 también estén abiertos en el firewall.

Activación del servicio de Handle

Para configurar el repositorio para que corra el servidor handle, correr el siguiente comando:

    [dspace]/bin/dspace make-handle-config [dspace]/handle-server

Asegurarse que [dspace]/handle-server coincida con el valor de la propiedad handle.dir en dspace.cfg

Editar el archivo resultante [dspace]/handle-server/config.dct para incluir las siguientes líneas en server_config:

    "storage_type" = "CUSTOM"
    "storage_class" = "org.dspace.handle.HandlePlugin"

Esta configuración le dice al servidor Handle que tomé información sobre handles individuales desde el código en DSpace. Una vez creado el archivo de configurar, es necesario ir a http://hdl.handle.net/4263537/5014 para subir el archivo sitebndl.zip generado.

La página donde se sube el archivo va a preguntar por cierta información de contacto. Luego un administrador va a crear el prefijo(nombre de autoridad) en el servicio raiz (conocido como Global Handle Registry), y le notificará cuando esto ocurra. No se puede continuar con la instalación del servidor hasta que se reciba mas información relacionado al nombre de autoridad

Cuando CNRI le haya enviado el prefijo, sera necesario editar el archivo config.dct. Este archivo se puede encontrar en /[dspace]/handle-server. Buscar por "300:0.NA/YOUR_NAMING_AUTHORITY". Remplazar YOUR_NAMING_AUTHORITY con el prefijo recibido. Ahora iniciar el servidor de handle:

[dspace]/bin/start-handle-server

Log de handle

Los archivos de log de handle se encuentran en:

[dspace]/log/handle-server.log
[dspace]/log/handle-plugin.log

Actualizar aplicación

Existe un script de actualización automática de la aplicación, ubicado en $[DSPACE_SRC_DIR]/build.sh. Sólo requiere la clave del usuario cada vez que se ejecuta (debido al apagado e reinicio de servidor Tomcat que debe ejecutarse mediante sudo).

##########################
#USO: ./build.sh {dev|prod}
#
#MODOS DE EJECUCIÓN
#    dev [DESARROLLO]: se compila el proyecto utilizando el profile de desarrollo (development) de Mirage2, y además se ejecutan backups de la base de datos y archivos de configuración del directorio de instalación. En este modo, los archivos CSS y Javascript generados por Mirage2 no pasan por un proceso de 'minification'.
#    prod [PRODUCCIÓN]: en este modo, todos los archivos CSS y Javascript generados por Mirage2 pasaron por una 'minification'.
#
# VARIABLES CONFIGURABLES --> El script cuenta con algunas variables dependientes del entorno de ejecución, por lo que conviene editarlas antes de ejecutarlo...
# IMPORTANTE --> El script debe ejecutarse configurando la consola como "Login Shell", sino fallará la compilación de Mirage2... Para ésto, ejecutar /bin/bash --login antes de ejecutar el script, ó ejecutar el script de la siguiente forma: /bin/bash --login -c "./build.sh {dev|prod}".
##########################

Para la actualización del entorno de producción solo bastaría con ejecutar

/bin/bash --login
./build.sh prod

El script en modo producción realiza lo siguiente:

  • Backups de base de datos y archivos de configuración [dspace]/config.
  • Actualización de código fuente desde github.
  • Apagado e Inicio de Tomcat
  • Compilación e instalación de las apps.
    • Compilación de Mirage2 en modo producción (minificación de archivos .js y .css).
  • Borrado de antiguos directorios de backups.

Revisión de logs

  • DSpace log:

    • [dspace]/log/dspace.log (generalmente)
  • Solr log:

    • [dspace]/log/solr.log (generalmente)
  • Tomcat log directory:

    • [tomcat]/logs (generalmente)

    [tomcat] instalación de tomcat.

  • (Sólo para XMLUI) Cocoon log:

    • [dspace]/log/cocoon.log

Para ver el log de dspace en tiempo real, se puede ejecutar el siguiente comando en linux

tail -F /var/logs/dspace.log

que dará una salida similar a

2009-05-18 12:52:45,935 WARN  org.dspace.app.webui.servlet.DSpaceServlet @ name\
@place:session_id=F32DD4066DD475B8841A2A2204961B9A:ip_addr=1.2\
.3.4:database_error:org.postgresql.util.PSQLException: ERROR: duplicate key \
violates unique constraint "metadatafieldregistry_pkey"
org.postgresql.util.PSQLException: ERROR: duplicate key violates unique constra\
int "metadatafieldregistry_pkey"
        at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryE\
xecutorImpl.java:1525)
Clone this wiki locally