-
Notifications
You must be signed in to change notification settings - Fork 0
Configuración del servidor de producción
- Instalación Rápida
- Cronjobs
- Rotación de logs
- Tomcat web container
- Apache como proxy reverso
- Base de datos
- Handle (Identificadores persistentes)
- Actualizar aplicación
- Revisión de logs
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
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
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
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
#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
#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
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/
.
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:
Para validar las sintaxis de las cronjobs de forma inmediata, podemos utilizar una herramienta llamada chkcrontab. Ej
./chkcrontab /etc/cron.d/backups-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.
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.
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 ]
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 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.
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.
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).
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.
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
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.
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.
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
Los archivos de log de handle se encuentran en:
[dspace]/log/handle-server.log
[dspace]/log/handle-plugin.log
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.
-
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)