Introducción
En esta entrada vamos a ver cómo instalar JBoss Application Server 7.1.1 en Ubuntu 12.04
Necesitaremos tener instalado el JDK, en nuestro ejemplo ya está instalado el jdk1.7.0_25 de Oracle
Descarga de JBoss Application Server 7.1.1
Para descargar JBoss vamos a la URL http://www.jboss.org/jbossas/downloads/ para descargar la última versión 7.1.1.Final, con lo que hacemos clic en el enlace http://download.jboss.org/jbossas/7.1/jboss-as-7.1.1.Final/jboss-as-7.1.1.Final.tar.gz
Instalación de JBoss
1) Descomprimimos JBoss en la carpeta que deseemos, en mi caso en /home/usuario/jboss-as-7.1.1.Final
tar xfvz jboss-as-7.1.1.Final.tar.gz
2) Renombramos la carpeta
mv jboss-as-7.1.1.Final jboss
3) Creamos el usuario administrador del JBoss, en este ejemplo será nuestro propio usuario, dado que hemos instalado todo en el /home/usuario
- Lanzamos el script de gestión de usuarios del propio JBoss:
/home/usuario/jboss/bin/add-user.sh
- Nos pide el tipo de usuario, pulsamos la opción "a", nos pide el "realm" (¿se traduciría por grupo?) que es el nombre de la base de datos que contiene los usuarios autorizados a utilizar el servidor, dejamos la opción por defecto "ManagementRealm", nos pide también el nombre de usuario y la contraseña (dos veces), metemos nuestro usuario/password de ubuntu (usuario/password)
What type of user do you wish to add?
a) Management User (mgmt-users.properties)
b) Application User (application-users.properties)
(a): a
Enter the details of the new user to add.
Realm (ManagementRealm) :
Username : usuario
Password : password
Re-enter Password : password
About to add user 'usuario' for realm 'ManagementRealm'
Is this correct yes/no? yes
Added user 'eduardo' to file '/home/usuario/jboss/standalone/configuration/mgmt-users.properties'
Added user 'eduardo' to file '/home/usuario/jboss/domain/configuration/mgmt-users.properties'
4) Para arraccar el servidor JBoss de modo que sea únicamente accesible desde nuestro ordenador lanzamos el script:
/home/usuario/jboss/bin/standalone.sh
5) Si tenemos una dirección IP estática y queremos que el servidor sea visible desde otras máquinas, para arrancar el servidor deberemos pasar como parámetro la dirección IP del mismo:
/home/usuario/jboss/bin/standalone.sh -Djboss.bind.address=192.168.0.11 -Djboss.bind.address.management=192.168.0.11 &
6) Accedemos a la consola de administración de JBoss en cualquiera de las siguientes URL: http://localhost:9990/console ó http://192.168.0.11:9990/console, se nos solicitará usuario y password, los datos que hemos introducido antes. Desde esta consola podremos desplegar nuestras aplicaciones: Manage deployments -> Add content
7) Para acceder a las aplicaciones desplegadas tendremos la URL http://localhost:8080/nombre-app
8) Para detener JBoss lanzamos el script:
/home/usuario/jboss/bin/jboss-cli.sh --connect command=:shutdown
Eso es todo, en la siguiente entrada montaremos jBPM en JBoss y desarrollaremos un workflow de ejemplo.
Referencias:
- https://community.jboss.org/wiki/JBossAS7UserGuide
- https://www.digitalocean.com/community/articles/how-to-install-jboss-on-ubuntu-12-10-64bit
Páginas
sábado, 22 de junio de 2013
Instalación JBoss Application Server 7.1.1 Ubuntu 12.04
jueves, 20 de junio de 2013
Gestión de proyectos y mapas conceptuales en Ubuntu
Introducción
Como necesitaba un software para la gestión de proyectos y otro para la realización de mapas conceptuales en Ubuntu me he puesto a googlear y he dado con un par de herramientas interesantes.
OpenProj
Es la alternativa en software libre a la aplicación Microsoft Project. Ofrece diagramas Gantt, PERT, histogramas, informes, etc.
Es una aplicación Java.
Instalación OpenProj
Dado que OpenProj no aparece en los repositorios de Canonical Podemos descargar el paquete de:
http://sourceforge.net/projects/openproj/files/OpenProj%20Binaries/1.4/openproj_1.4-2.deb/download
Para instalarlo basta con lanzar el comando:
sudo dpkg -i openproj_1.4-3_all.deb
También podemos hacer doble clic sobre el paquete para que se instale a través del software-center de Ubuntu.
Una vez instalado necesitamos tener instalado Java y haber definido el JAVA_HOME en nuestro fichero .profile con:
export JAVA_HOME=/home/java/jdk/jdk1.6.0_34
Nota. Con Java 1.7.0_XX he tenido problemas, por lo que he bajado a Java 1.6 y todo ha funcionado perfectamente.
FreeMind
Es la alternativa en software libre a la aplicación MindManager.
Es también una aplicación Java.
Instalación FreeMind
FreeMind sí aparece en los repositorios Canonical de Ubuntu, por lo que la instalación es más rápida. Descargamos los paquetes con:
sudo apt-get install freemind
sudo apt-get install freemind-doc
sudo apt-get install freemind-browser
sudo apt-get install freemind-plugins-help
sudo apt-get install freemind-plugins-script
sudo apt-get install freemind-plugins-svg
Nota. Con Java 1.7.0_XX también da problemas, por lo que he bajado a Java 1.6 y he reajustado el fichero .profile del mismo modo que en el aplicativo anterior y listo.
Como necesitaba un software para la gestión de proyectos y otro para la realización de mapas conceptuales en Ubuntu me he puesto a googlear y he dado con un par de herramientas interesantes.
OpenProj
Es la alternativa en software libre a la aplicación Microsoft Project. Ofrece diagramas Gantt, PERT, histogramas, informes, etc.
Es una aplicación Java.
Instalación OpenProj
Dado que OpenProj no aparece en los repositorios de Canonical Podemos descargar el paquete de:
http://sourceforge.net/projects/openproj/files/OpenProj%20Binaries/1.4/openproj_1.4-2.deb/download
Para instalarlo basta con lanzar el comando:
sudo dpkg -i openproj_1.4-3_all.deb
También podemos hacer doble clic sobre el paquete para que se instale a través del software-center de Ubuntu.
Una vez instalado necesitamos tener instalado Java y haber definido el JAVA_HOME en nuestro fichero .profile con:
export JAVA_HOME=/home/java/jdk/jdk1.6.0_34
Nota. Con Java 1.7.0_XX he tenido problemas, por lo que he bajado a Java 1.6 y todo ha funcionado perfectamente.
FreeMind
Es la alternativa en software libre a la aplicación MindManager.
Es también una aplicación Java.
Instalación FreeMind
FreeMind sí aparece en los repositorios Canonical de Ubuntu, por lo que la instalación es más rápida. Descargamos los paquetes con:
sudo apt-get install freemind
sudo apt-get install freemind-doc
sudo apt-get install freemind-browser
sudo apt-get install freemind-plugins-help
sudo apt-get install freemind-plugins-script
sudo apt-get install freemind-plugins-svg
Nota. Con Java 1.7.0_XX también da problemas, por lo que he bajado a Java 1.6 y he reajustado el fichero .profile del mismo modo que en el aplicativo anterior y listo.
miércoles, 5 de junio de 2013
Instalación de los drivers de Ralink RT3290 en Ubuntu 12.10
Introducción
Vamos a instalar los drivers de la tarjeta wifi ralink que viene instalada en un portatil HP ProBook 4540S.
Según las especificaciones del portatil, tiene una tarjeta Ralink 802.11b/g/n (1x1) y Bluetooth 4.0
Identificar la tarjeta WIFI
Averiguamos el modelo de tarjeta con:
lspci | grep Network
Deberíamos obtener la salida:
Network controller: Ralink corp. Device 3290
Compilar driver paso a paso
Dado que los drivers no están disponibles como paquete instalable en las páginas de HP, vamos a la página de Ralink, desde donde se nos deriva para descargar los drivers a MediaTek, donde encontramos en enlace al driver 3562 que, con unos ligeros ajustes nos funcionará.
1) Instalamos los paquetes necesarios para compilar los drivers de la tarjeta wifi:
sudo apt-get update && sudo apt-get install build-essential linux-headers-generic
2) Descargamos el código fuente del driver (nos pide una dirección de correo):
http://www.mediatek.com/_en/07_downloads/01-1_windowsDetail.php?sn=5019
3) Descomprimimos el archivo descargado:
tar -xvf DPO_RT3562_3592_3062_LinuxSTA_V2.4.1.1_20101217.tgz
4) Ajustamos el fichero de configuración:
gedit DPO_RT3562_3592_3062_LinuxSTA_V2.4.1.1_20101217/os/linux/config.mk
5) Cambiamos las siguientes líneas
La línea 12 deberá tener: HAS_WPA_SUPPLICANT=y
La línea 15 deberá tener: HAS_NATIVE_WPA_SUPPLICANT=y
6) Nos movemos al directorio DPO_RT3562_3592_3062_LinuxSTA_V2.4.1.1_20101217 y compilamos los fuentes:
sudo make
sudo make install
7) Activamos el driver y comprobamos si la tarjeta wifi funciona:
sudo modprobe rt3290sta
En el icono de red de la parte superior derecha de la pantalla debería aparecer una conexión de tipo inalámbrica de nombre Ralink 802.11 bg WLAN.
8) Editamos el fichero /etc/modules, que contiene los nombres de los módulos del kernel que deberán ser cargados al arrancar el sistema.
sudo gedit /etc/modules
9) Añadimos al final del fichero lo siguiente:
rt3290sta
10) Guardamos el archivo y salimos.
11) Actualizamos los cambios y reiniciamos el portatil.
sudo update-initramfs -u
12) Si tras reiniciar todo funciona correctamente (seguimos viendo la conexión de red WIFI) podemos borrar el directorio DPO_RT3562_3592_3062_LinuxSTA_V2.4.1.1_20101217 y limpiar los paquetes descargados para la compilación:
sudo apt-get remove build-essential
sudo apt-get remove linux-headers-generic
Nota. Puede ser interesante conservar los drivers por si tuviésemos que reinstalar Ubuntu en el portatil .
Nota. El driver específico para la 3290 "DPO_RT3290_LinuxSTA_V2600_20120508.tar.gz" que podemos encontrar en muchas páginas como http://www.avisa2.com/2013/03/wifi-ralink-rt3290-en-ubuntu-1210.html no funciona correctamente, bloqueando constantemente el equipo.
Nota. En Ubuntu 14.04 el reconocimiento de éste tipo de tarjetas es automático ya desde el inicio de la instalación.
Eso es todo.
Enlaces:
http://rricketts.com/installing-ralink-rt3290-wireless-drivers-in-ubuntu-12-04/
http://www8.hp.com/es/es/products/laptops/product-detail.html?oid=5229455
Vamos a instalar los drivers de la tarjeta wifi ralink que viene instalada en un portatil HP ProBook 4540S.
Según las especificaciones del portatil, tiene una tarjeta Ralink 802.11b/g/n (1x1) y Bluetooth 4.0
Identificar la tarjeta WIFI
Averiguamos el modelo de tarjeta con:
lspci | grep Network
Deberíamos obtener la salida:
Network controller: Ralink corp. Device 3290
Compilar driver paso a paso
Dado que los drivers no están disponibles como paquete instalable en las páginas de HP, vamos a la página de Ralink, desde donde se nos deriva para descargar los drivers a MediaTek, donde encontramos en enlace al driver 3562 que, con unos ligeros ajustes nos funcionará.
1) Instalamos los paquetes necesarios para compilar los drivers de la tarjeta wifi:
sudo apt-get update && sudo apt-get install build-essential linux-headers-generic
2) Descargamos el código fuente del driver (nos pide una dirección de correo):
http://www.mediatek.com/_en/07_downloads/01-1_windowsDetail.php?sn=5019
3) Descomprimimos el archivo descargado:
tar -xvf DPO_RT3562_3592_3062_LinuxSTA_V2.4.1.1_20101217.tgz
4) Ajustamos el fichero de configuración:
gedit DPO_RT3562_3592_3062_LinuxSTA_V2.4.1.1_20101217/os/linux/config.mk
5) Cambiamos las siguientes líneas
La línea 12 deberá tener: HAS_WPA_SUPPLICANT=y
La línea 15 deberá tener: HAS_NATIVE_WPA_SUPPLICANT=y
6) Nos movemos al directorio DPO_RT3562_3592_3062_LinuxSTA_V2.4.1.1_20101217 y compilamos los fuentes:
sudo make
sudo make install
7) Activamos el driver y comprobamos si la tarjeta wifi funciona:
sudo modprobe rt3290sta
En el icono de red de la parte superior derecha de la pantalla debería aparecer una conexión de tipo inalámbrica de nombre Ralink 802.11 bg WLAN.
8) Editamos el fichero /etc/modules, que contiene los nombres de los módulos del kernel que deberán ser cargados al arrancar el sistema.
sudo gedit /etc/modules
9) Añadimos al final del fichero lo siguiente:
rt3290sta
10) Guardamos el archivo y salimos.
11) Actualizamos los cambios y reiniciamos el portatil.
sudo update-initramfs -u
12) Si tras reiniciar todo funciona correctamente (seguimos viendo la conexión de red WIFI) podemos borrar el directorio DPO_RT3562_3592_3062_LinuxSTA_V2.4.1.1_20101217 y limpiar los paquetes descargados para la compilación:
sudo apt-get remove build-essential
sudo apt-get remove linux-headers-generic
Nota. Puede ser interesante conservar los drivers por si tuviésemos que reinstalar Ubuntu en el portatil .
Nota. El driver específico para la 3290 "DPO_RT3290_LinuxSTA_V2600_20120508.tar.gz" que podemos encontrar en muchas páginas como http://www.avisa2.com/2013/03/wifi-ralink-rt3290-en-ubuntu-1210.html no funciona correctamente, bloqueando constantemente el equipo.
Nota. En Ubuntu 14.04 el reconocimiento de éste tipo de tarjetas es automático ya desde el inicio de la instalación.
Eso es todo.
Enlaces:
http://rricketts.com/installing-ralink-rt3290-wireless-drivers-in-ubuntu-12-04/
http://www8.hp.com/es/es/products/laptops/product-detail.html?oid=5229455
martes, 4 de junio de 2013
Instalar Ubuntu 12.10 Windows 8 preinstalado UEFI/Legacy
Introducción
Hemos tenido que instalar Ubuntu 12.10 en una serie de portátiles en los que venía preinstalado Windows 8. El objetivo era dejar Ubuntu como único sistema operativo.
La clave de toda la operación es que los portátiles ya no tienen la típica BIOS, ahora vienen con UEFI, además la opción "Secure Boot" está bloqueada por lo que no podemos ajustar el dispositivo del que queremos arrancar ni podemos desactivar UEFI para pasar al modo Legacy (BIOS Tradicional).
Lo que no se debe hacer es entrar a saco y eliminar todas las particiones del disco (partición UEFI incluída) para dejar únicamente las particiones típicas de Linux.
Preparar la imagen de Ubuntu 12.10
Se ha montado un pendrive con la imagen de Ubuntu:
http://releases.ubuntu.com/12.10/ubuntu-12.10-desktop-amd64.iso
Mediante el uso de la herramienta:
usb-creator-gtk
El uso de la misma es simple, elegimos la imagen de la iso a instalar xxxxxxx.iso y seleccionamos la unidad usb donde volcar el disco de arranque.
Desproteger UEFI
Parece que no podemos ajustar las opciones que deseamos en la UEFI, porque de algún modo el Windows 8 preinsladalo lo deja bloquedo. Para desbloquearlo debemos terminar de instalar Windows 8 y, moviendo el ratón a la esquina inferior derecha de la pantalla, seleccionar las siguientes opciones:
Cuando reiniciamos el PC podemos acceder a la BIOS/UEFI pulsando DEL ó F9 o el botón de acceso a la BIOS/UEFI de nuestro PC.
Una vez dentro de la BIOS/UEFI desactivaremos la opción "Secure Boot", marcaremos la opción "Legacy" y ajustaremos la secuencia de dispositivos de arranque "Boot order" colocando "USB Device" la primera.
Insertaremos el pendrive con Ubuntu 12.10 en algún puerto USB y reiniciamos el PC
Instalamos Ubuntu 12.10
Tras reiniciar el PC, se lanza el proceso de instalación de Ubuntu, que tras solicitarnos la ubicación, el teclado, etc, nos lleva a la típica pantalla de definición de las particiones, en ella deberemos elegir la opción "Reemplazar Windows 8 con Ubuntu", no vamos a redefinir particiones manualmente.
Tras la instalación de Ubuntu tendremos una instalación con sólo dos particiones, la de intercambio (swap) y la del sistema (/).
Instalamos de nuevo Ubuntu 12.10
Volvemos a reiniciar el PC con el pendrive insertado en el puerto USB, la idea es repetir el anterior proceso seleccionando ahora, en la pantalla de gestión de particiones, la opción manual que permite definir a mano las mismas:
Hemos tenido que instalar Ubuntu 12.10 en una serie de portátiles en los que venía preinstalado Windows 8. El objetivo era dejar Ubuntu como único sistema operativo.
La clave de toda la operación es que los portátiles ya no tienen la típica BIOS, ahora vienen con UEFI, además la opción "Secure Boot" está bloqueada por lo que no podemos ajustar el dispositivo del que queremos arrancar ni podemos desactivar UEFI para pasar al modo Legacy (BIOS Tradicional).
Lo que no se debe hacer es entrar a saco y eliminar todas las particiones del disco (partición UEFI incluída) para dejar únicamente las particiones típicas de Linux.
Preparar la imagen de Ubuntu 12.10
Se ha montado un pendrive con la imagen de Ubuntu:
http://releases.ubuntu.com/12.10/ubuntu-12.10-desktop-amd64.iso
Mediante el uso de la herramienta:
usb-creator-gtk
El uso de la misma es simple, elegimos la imagen de la iso a instalar xxxxxxx.iso y seleccionamos la unidad usb donde volcar el disco de arranque.
Desproteger UEFI
Parece que no podemos ajustar las opciones que deseamos en la UEFI, porque de algún modo el Windows 8 preinsladalo lo deja bloquedo. Para desbloquearlo debemos terminar de instalar Windows 8 y, moviendo el ratón a la esquina inferior derecha de la pantalla, seleccionar las siguientes opciones:
- Cambiar la configuración del PC
- En la parte izquierda de la pantalla de configuración seleccionamos la opción "Uso general", en las opciones de la mitad derecha de la pantalla elegimos la última "Reiniciar ahora" del grupo "Inicio avanzado".
- En la siguiente pantalla hacemos clic en la opción "Solucionar problemas"
- En la siguiente pantalla hacemos clic en la opción "Opciones avanzadas"
- En la siguiente pantalla hacemos clic en la opción "Configuración de inicio"
- En la siguiente pantalla hacemos clic en el botón "Reiniciar"
Cuando reiniciamos el PC podemos acceder a la BIOS/UEFI pulsando DEL ó F9 o el botón de acceso a la BIOS/UEFI de nuestro PC.
Una vez dentro de la BIOS/UEFI desactivaremos la opción "Secure Boot", marcaremos la opción "Legacy" y ajustaremos la secuencia de dispositivos de arranque "Boot order" colocando "USB Device" la primera.
Insertaremos el pendrive con Ubuntu 12.10 en algún puerto USB y reiniciamos el PC
Instalamos Ubuntu 12.10
Tras reiniciar el PC, se lanza el proceso de instalación de Ubuntu, que tras solicitarnos la ubicación, el teclado, etc, nos lleva a la típica pantalla de definición de las particiones, en ella deberemos elegir la opción "Reemplazar Windows 8 con Ubuntu", no vamos a redefinir particiones manualmente.
Tras la instalación de Ubuntu tendremos una instalación con sólo dos particiones, la de intercambio (swap) y la del sistema (/).
Instalamos de nuevo Ubuntu 12.10
Volvemos a reiniciar el PC con el pendrive insertado en el puerto USB, la idea es repetir el anterior proceso seleccionando ahora, en la pantalla de gestión de particiones, la opción manual que permite definir a mano las mismas:
- SWAP. Tipo área de intercambio. Típicamente el tamaño de la ram del equipo 8GB (8000 MB).
- SISTEMA (/). Tipo EXT4. Nosotros asignamos 30GB (30.000MB).
- USUARIO (/home). Tipo EXT4. Asignamos el resto del disco duro.
Ajuste del proxy del sistema en Ubuntu 12.10 LTS
Tras instalar Ubuntu 12.10 LTS desde un pendrive en un equipo limpio nos hemos
encontrado con que no éramos capaces de ajustar la configuración del
proxy ni mediante el gestor de actualizaciones (tocando el fichero
/etc/apt/apt.conf) ni ajustando el proxy a nivel general del sistema
(jugando con el ajuste de Red del área de Configuración del Sistema).
Tras muchas pruebas, la única forma de ajustar el proxy para que el gestor de paquetes APT (Advanced Packaging Tool) pudiese realizar la primera actualización completa ha sido la siguiente:
- Crear el fichero /etc/apt/apt.conf.d/02proxy
- Meterle la siguiente línea:
Acquire::http::Proxy "http://idusuario:password@xxx.xxx.xxx.xxx:puerto";
Tras ésto, se reinicia el equipo y se pulsa la opción actualizar software del menú que se despliega en el icono superior derecho.
Nota. Tras lanzar el gestor de actualizaciones y reiniciar el equipo, ya es efectivo el ajuste del proxy a nivel de sistema el apartado "Red" de la herramienta "Configuración del sistema". Para ajustar el proxy del sistema, deberemos:
- Seleccionar el método manual (el automático con la URL de configuración no funciona al menos con nuestro proxy)
- Definir el host como usuario:password@ipproxy
- Meter el puerto en el cuadro de diálogo apropiado
Tras muchas pruebas, la única forma de ajustar el proxy para que el gestor de paquetes APT (Advanced Packaging Tool) pudiese realizar la primera actualización completa ha sido la siguiente:
- Crear el fichero /etc/apt/apt.conf.d/02proxy
- Meterle la siguiente línea:
Acquire::http::Proxy "http://idusuario:password@xxx.xxx.xxx.xxx:puerto";
Tras ésto, se reinicia el equipo y se pulsa la opción actualizar software del menú que se despliega en el icono superior derecho.
Nota. Tras lanzar el gestor de actualizaciones y reiniciar el equipo, ya es efectivo el ajuste del proxy a nivel de sistema el apartado "Red" de la herramienta "Configuración del sistema". Para ajustar el proxy del sistema, deberemos:
- Seleccionar el método manual (el automático con la URL de configuración no funciona al menos con nuestro proxy)
- Definir el host como usuario:password@ipproxy
- Meter el puerto en el cuadro de diálogo apropiado
domingo, 26 de mayo de 2013
Alfresco Community 4.2.c indexando en Solr
Introducción
En esta entrada vamos a detallar cómo instalar y configurar alfresco-community (versión 4.2.c) para que utilice Solr como motor de indexación. Cada uno de los dos aplicativos correrá en su propia instancia de Tomcat, simulando así un entorno de producción donde se intenta evitar que la sobrecarga de los procesos de indexación de documentos afecten al rendimiento de Alfresco.
Descargas
Descargar las aplicaciones
Descargar el entorno de trabajo
Para conocer los requisitos de funcionamiento de la versión 4.2.c de Alfresco se ha consultado la documentación ofrecida en el siguiente enlace: http://wiki.alfresco.com/wiki/Alfresco_Community_4.2.c_Release_Notes.
Instalacion del entorno
Instalación de PostgreSQL 9.1
Descargamos 'PostgreSQL 9.1' y la consola de administración 'pgAdmin III' mediante los comandos:
sudo apt-get postgresql
sudo apt-get pgadmin3
Iniciamos pgadmin3 mediante el comando:
$ pgadmin3
Definimos una nueva conexión con la BBDD recien instalada, haciendo clic en la opción Añadir servidor del menú Archivo:
- Propietario: alfesco
- Encoding: UTF-8
- Collation: en_GB.utf8
- Character type: en_GB.utf8
Instalación del JDK 1.7.0 u7
- Creamos las carpetas /opt/alfresco/tomcat/shared/lib/
- Ajustamos la propiedad 'shared.loader' del fichero /opt/tomcat-alfresco/conf/catalina.properties con el valor:
shared.loader=${catalina.base}/shared/classes,${catalina.base}/shared/lib/*.jar
export ALF_HOME=.
export JAVA_OPTS='-Xmx512m -Xmx1024m -Xss256k -XX:MaxPermSize=256m -XX:NewSize=256m -server'
export JAVA_OPTS="${JAVA_OPTS} -Dalfresco.home=${ALF_HOME} -Dcom.sun.management.jmxremote"
export JAVA_OPTS="${JAVA_OPTS} -Dsun.security.ssl.allowUnsafeRenegotiation=true"
<user username="admin" password="admin" roles="manager-gui,manager-script,manager-jmx,manager-status"/>
Instalación de la instancia Tomcat 7.0.30 para Solr
<Server port="8005" shutdown="SHUTDOWN">
- Cambiar 8080 por 9080 y 8443 por 9443 en el bloque:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
- Cambiar 8009 por 9009 y 8443 por 9443 en al bloque:
<Connector port="9009" protocol="AJP/1.3" redirectPort="9443" />
<user username="admin" password="admin" roles="manager-gui,manager-script,manager-jmx,manager-status"/>
Instalación y ajuste de Alfresco
a partir del fichero
/opt/alfresco/tomcat/shared/classes/alfresco-global.properties.sample
alfresco.port=8080
share.port=8080
avm.rmi.service.port=50501
avmsync.rmi.service.port=50502
attribute.rmi.service.port=50503
authentication.rmi.service.port=50504
repo.rmi.service.port=50505
action.rmi.service.port=50506
wcm-deployment-receiver.rmi.service.port=50507
monitor.rmi.service.port=50508
db.name=alfresco
db.host=localhost
db.port=5432
db.driver=org.postgresql.Driver
db.url=jdbc:postgresql://${db.host}:${db.port}/${db.name}
a partir del fichero
/opt/alfresco/tomcat/shared/classes/alfresco/web-extension/share-config-custom.xml.sample
http://localhost:8080/alfresco/faces/jsp/login.jsp (admin/admin)
Instalación y ajuste de Solr
creando las carpetas necesarias, en
/opt/solr/tomcat/conf/Catalina/localhost/solr.xml
Ajustes SSL para Alfresco
en
/opt/alfresco/alf_data/keystore
O=Alfresco Software Ltd., L=Maidenhead, ST=UK, C=GB"
roles="repoclient" password="null"/>
protocol="org.apache.coyote.http11.Http11Protocol"
SSLEnabled="true"
maxThreads="150"
scheme="https"
keystoreFile="/opt/alfresco/alf_data/keystore/ssl.keystore"
keystorePass="kT9X6oe68t"
keystoreType="JCEKS"
secure="true"
connectionTimeout="240000"
truststoreFile="/opt/alfresco/alf_data/keystore/ssl.truststore"
truststorePass="kT9X6oe68t"
truststoreType="JCEKS"
clientAuth="false"
sslProtocol="TLS"
allowUnsafeLegacyRenegotiation="true"
/>
index.subsystem.name=solr
solr.port.ssl=9443
solr.port=9080
solr.secureComms=https
Ajustes SSL para Solr
en
/opt/solr/keystore
O=Alfresco Software Ltd., L=Maidenhead, ST=UK, C=GB"
roles="repository" password="null"/>
protocol="org.apache.coyote.http11.Http11Protocol"
SSLEnabled="true"
maxThreads="150"
scheme="https"
keystoreFile="/opt/solr/keystore/ssl.keystore"
keystorePass="kT9X6oe68t"
keystoreType="JCEKS"
secure="true"
connectionTimeout="240000"
truststoreFile="/opt/solr/keystore/ssl.truststore"
truststorePass="kT9X6oe68t"
truststoreType="JCEKS"
clientAuth="false"
sslProtocol="TLS"
allowUnsafeLegacyRenegotiation="true"
/>
Puesta en marcha y verificación del funcionamiento
Para poner en marcha lo anterior deberemos arrancar solr y alfresco:
/opt/solr/tomcat/bin/startup.sh
/opt/alfresco/tomcat/bin/startup.sh
Una vez levantados ambos servidores, verificamos el número de ficheros de los índices en Solr:
/opt/solr/solrdata/workspace/SpacesStore/index
Accedemos al portal http://localhost:8080/share, entrando con admin/admin, accedemos al espacio de invitado del repositorio y añadimos algún documento.
Si todo va bien deberíamos ver que el número de ficheros de la carpeta de índices del solr ha variado.
En esta entrada vamos a detallar cómo instalar y configurar alfresco-community (versión 4.2.c) para que utilice Solr como motor de indexación. Cada uno de los dos aplicativos correrá en su propia instancia de Tomcat, simulando así un entorno de producción donde se intenta evitar que la sobrecarga de los procesos de indexación de documentos afecten al rendimiento de Alfresco.
Descargas
Descargar las aplicaciones
- Alfresco. Lo descargamos de la URL:
- Solr. Lo descargamos de la URL:
Descargar el entorno de trabajo
Para conocer los requisitos de funcionamiento de la versión 4.2.c de Alfresco se ha consultado la documentación ofrecida en el siguiente enlace: http://wiki.alfresco.com/wiki/Alfresco_Community_4.2.c_Release_Notes.
- BBDD. Elegimos PostgreSQL 9.1
- JDK. Elegimos jdk-7u7-linux-i586.tar.gz
- Servidor. Elegimos Tomcat 7.0.30
Instalacion del entorno
Instalación de PostgreSQL 9.1
Descargamos 'PostgreSQL 9.1' y la consola de administración 'pgAdmin III' mediante los comandos:
sudo apt-get postgresql
sudo apt-get pgadmin3
Iniciamos pgadmin3 mediante el comando:
$ pgadmin3
Definimos una nueva conexión con la BBDD recien instalada, haciendo clic en la opción Añadir servidor del menú Archivo:
- Nombre de la conexión: localhost
- Servidor: 127.0.0.1
- Puerto: 5432
- Usuario: postgres
- Password: <SIN PASSWORD>
- Haciendo clic con el botón derecho del ratón sobre la opción Login Roles definimos un nuevo rol de login alfresco/alfresco con privilegios Supersuer
- Haciendo clic con el botón derecho del ratón sobre la opción Databases definimos una nueva BBDD:
- Propietario: alfesco
- Encoding: UTF-8
- Collation: en_GB.utf8
- Character type: en_GB.utf8
Instalación del JDK 1.7.0 u7
- Descargamos el 'JDK 1.7.0 u7' de la URL: http://download.oracle.com/otn/java/jdk/7u7-b10/jdk-7u7-linux-i586.tar.gz
- Descomprimimos el fichero 'jdk-7u7-linux-i586.tar.gz' en la carpeta /opt/jdk1.7.0_07
- Descargamos 'Tomcat 7.0.30' de la URL: http://archive.apache.org/dist/tomcat/tomcat-7/v7.0.30/bin/apache-tomcat-7.0.30.tar.gz
- Creamos la carpeta /opt/alfresco
- Descomprimimos el fichero 'apache-tomcat-7.0.30.tar.gz' en la carpeta /opt/alfresco/apache-tomcat-7.0.30
- Renombramos la carpeta /opt/apache-tomcat-7.0.30 como /opt/alfresco/tomcat
- Ajustamos el Tomcat según las instrucciones de la página de Alfresco: http://wiki.alfresco.com/wiki/Install_Tomcat6
- Creamos las carpetas /opt/alfresco/tomcat/shared/lib/
- Ajustamos la propiedad 'shared.loader' del fichero /opt/tomcat-alfresco/conf/catalina.properties con el valor:
shared.loader=${catalina.base}/shared/classes,${catalina.base}/shared/lib/*.jar
- Ajustamos el fichero /opt/alfresco/tomcat/bin/startup.sh añadiendo las siguientes líneas al inicio del mismo
export ALF_HOME=.
export JAVA_OPTS='-Xmx512m -Xmx1024m -Xss256k -XX:MaxPermSize=256m -XX:NewSize=256m -server'
export JAVA_OPTS="${JAVA_OPTS} -Dalfresco.home=${ALF_HOME} -Dcom.sun.management.jmxremote"
export JAVA_OPTS="${JAVA_OPTS} -Dsun.security.ssl.allowUnsafeRenegotiation=true"
- Ajustamos el fichero /opt/alfresco/tomcat/conf/tomcat-users.xml añadiendo dentro del bloque <tomcat-users> los siguiente:
<user username="admin" password="admin" roles="manager-gui,manager-script,manager-jmx,manager-status"/>
Instalación de la instancia Tomcat 7.0.30 para Solr
- Ya tenemos descargado 'Tomcat 7.0.30' del paso anterior
- Creamos la carpeta /opt/solr
- Descomprimimos el fichero 'apache-tomcat-7.0.30.tar.gz' en la carpeta /opt/solr/apache-tomcat-7.0.30
- Renombramos la carpeta /opt/apache-tomcat-7.0.30 como /opt/solr/tomcat
- Ajustamos el fichero /opt/solr/tomcat/bin/startup.sh añadiendo las siguientes líneas al inicio del mismo
- Ajustamos el fichero /opt/solr/tomcat/conf/server.xml
<Server port="8005" shutdown="SHUTDOWN">
- Cambiar 8080 por 9080 y 8443 por 9443 en el bloque:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
- Cambiar 8009 por 9009 y 8443 por 9443 en al bloque:
<Connector port="9009" protocol="AJP/1.3" redirectPort="9443" />
- Ajustamos el fichero /opt/alfresco/tomcat/conf/tomcat-users.xml añadiendo dentro del bloque <tomcat-users> los siguiente:
<user username="admin" password="admin" roles="manager-gui,manager-script,manager-jmx,manager-status"/>
Instalación y ajuste de Alfresco
- Extraemos el contenido del zip de alfresco (alfresco-community-4.2.c.zip) en /opt/alfresco
- Copiamos el contenido de /opt/alfresco/web-server en /opt/alfresco/tomcat (permitiendo merge all y replace all)
- Ajustamos el propietario de /opt/alfresco con:
- Creamos el fichero
a partir del fichero
/opt/alfresco/tomcat/shared/classes/alfresco-global.properties.sample
- En el fichero /opt/alfresco/tomcat/shared/classes/alfresco-global.properties añadimos/descomentamos/ajustamos lo siguientes:
alfresco.port=8080
share.port=8080
avm.rmi.service.port=50501
avmsync.rmi.service.port=50502
attribute.rmi.service.port=50503
authentication.rmi.service.port=50504
repo.rmi.service.port=50505
action.rmi.service.port=50506
wcm-deployment-receiver.rmi.service.port=50507
monitor.rmi.service.port=50508
db.name=alfresco
db.host=localhost
db.port=5432
db.driver=org.postgresql.Driver
db.url=jdbc:postgresql://${db.host}:${db.port}/${db.name}
- Creamos el fichero
a partir del fichero
/opt/alfresco/tomcat/shared/classes/alfresco/web-extension/share-config-custom.xml.sample
- En el fichero /opt/alfresco/tomcat/shared/classes/alfresco/web-extension/share-config-custom.xml descomentamos el primer bloque (ojo que hay dos) <config evaluator="string-compare" condition="Remote">
- Arrancamos el tomcat de alfresco con:
- Monitorizamos la consola con:
- Probamos que todo funciona accediendo a las URL:
http://localhost:8080/alfresco/faces/jsp/login.jsp (admin/admin)
Instalación y ajuste de Solr
- Extraemos el contenido del zip de solr (alfresco-community-solr-4.2.c.zip) en /opt/solr
- Ajustamos el propietario de /opt/solr con:
- Copiamos el fichero
creando las carpetas necesarias, en
/opt/solr/tomcat/conf/Catalina/localhost/solr.xml
- Editamos el fichero /opt/solr/tomcat/conf/Catalina/localhost/solr.xml y remplazamos las dos apariciones de @@ALFRESCO_SOLR_DIR@@ por /opt/solr
- Creamos la carpeta /opt/solr/solrdata
- Editamos el fichero /opt/solr/workspace-SpacesStore/conf/solrcore.properties y reemplazamos @@ALFRESCO_SOLR_DIR@@ por /opt/solr/solrdata
- Editamos el fichero /opt/solr/archive-SpacesStore/conf/solrcore.properties y reemplazamos @@ALFRESCO_SOLR_DIR@@ por /opt/solr/solrdata
Ajustes SSL para Alfresco
- Creamos la carpeta /opt/alfresco/alf_data/keystore
- Copiamos el contenido de
en
/opt/alfresco/alf_data/keystore
- Editamos el fichero /opt/alfresco/tomcat/conf/tomcat-users.xml añadiendo lo siguiente al bloque <tomcat-users>:
O=Alfresco Software Ltd., L=Maidenhead, ST=UK, C=GB"
roles="repoclient" password="null"/>
- Editamos el fichero /opt/alfresco/tomcat/conf/server.xml añadiendo en el nodo <Service name="Catalina"> lo siguiente:
protocol="org.apache.coyote.http11.Http11Protocol"
SSLEnabled="true"
maxThreads="150"
scheme="https"
keystoreFile="/opt/alfresco/alf_data/keystore/ssl.keystore"
keystorePass="kT9X6oe68t"
keystoreType="JCEKS"
secure="true"
connectionTimeout="240000"
truststoreFile="/opt/alfresco/alf_data/keystore/ssl.truststore"
truststorePass="kT9X6oe68t"
truststoreType="JCEKS"
clientAuth="false"
sslProtocol="TLS"
allowUnsafeLegacyRenegotiation="true"
/>
- Ajustamos el fichero /opt/alfresco/tomcat/shared/classes/alfresco-global.properties añadiendo/modificando/descomentado:
index.subsystem.name=solr
solr.port.ssl=9443
solr.port=9080
solr.secureComms=https
Ajustes SSL para Solr
- Creamos la carpeta /opt/solr/keystore
- Copiamos el contenido de
en
/opt/solr/keystore
- Editamos el fichero /opt/solr/tomcat/conf/tomcat-users.xml añadiendo lo siguiente al bloque <tomcat-users>:
O=Alfresco Software Ltd., L=Maidenhead, ST=UK, C=GB"
roles="repository" password="null"/>
- Editamos el fichero /opt/solr/tomcat/conf/server.xml añadiendo en el nodo <Service name="Catalina"> lo siguiente:
protocol="org.apache.coyote.http11.Http11Protocol"
SSLEnabled="true"
maxThreads="150"
scheme="https"
keystoreFile="/opt/solr/keystore/ssl.keystore"
keystorePass="kT9X6oe68t"
keystoreType="JCEKS"
secure="true"
connectionTimeout="240000"
truststoreFile="/opt/solr/keystore/ssl.truststore"
truststorePass="kT9X6oe68t"
truststoreType="JCEKS"
clientAuth="false"
sslProtocol="TLS"
allowUnsafeLegacyRenegotiation="true"
/>
Puesta en marcha y verificación del funcionamiento
Para poner en marcha lo anterior deberemos arrancar solr y alfresco:
/opt/solr/tomcat/bin/startup.sh
/opt/alfresco/tomcat/bin/startup.sh
Una vez levantados ambos servidores, verificamos el número de ficheros de los índices en Solr:
/opt/solr/solrdata/workspace/SpacesStore/index
Accedemos al portal http://localhost:8080/share, entrando con admin/admin, accedemos al espacio de invitado del repositorio y añadimos algún documento.
Si todo va bien deberíamos ver que el número de ficheros de la carpeta de índices del solr ha variado.
miércoles, 22 de mayo de 2013
Balanceo de carga y SSL con Apache y Tomcat
Introducción
Vamos a configurar un servidor Apache para servir una aplicación web desplegada en varias instancias Tomcat balanceando la carga de trabajo entre los servidores. Supondremos además que el acceso a la aplicacionón se realiza a través del protocolo https.
La comunicación entre el servidor web Apache y los distintos Tomcat se realiza usando el protocolo AJP.
El usuario accederá a la url https://servidor.org/app-web/ eligirá un certificado de acceso, establecerá sesión ssl con el servidor y Apacheredirigirá la petición a alguno de los Tomcat balanceados.
Una vez establecida la sesión de trabajo con un cierto Tomcat, Apache mantendrá las restantes peticiones del usuario en ese mismo Tomcat.
Instalación y configuración de los servidores Tomcat
El primer paso para realizar la configuración consiste en instalar y configurar varias instancias del servidor Tomcat. Para ello descargamos Tomcat (por ejemplo la versión apache-tomcat-6.0.35.zip) y lo descomprimimos en tantas carpetas distintas como deseemos. Una vez instalados debemos hacer una serie de cambios en la configuración de todos ellos.
Cambiar la variable CATALINA_HOME
Debemos cambiar la variable CATALINA_HOME de cada uno de los Tomcat para que apunte a la carpeta en la que está instalado. Para ello editamos el fichero bin/catalina.sh y en la primera línea escribimos:
CATALINA_HOME=/home/egdepedro/balanceo/apache-tomcat-6.0.35-00
Cambiando la carpeta por la correspondiente en cada uno de ellos.
Configurar el puerto del servidor
Debemos configurar los Tomcat para que usen puertos distintos y no den errores en el arranque. En el archivo conf/server.xml debemos cambiar el puerto indicado en la línea:
<Server port="8005" shutdown="SHUTDOWN">
Usando distintos puertos en cada instancia. Por ejemplo 8005, 8006, 8007...
Configurar los conectores AJP
En el mismo fichero conf/server.xml debemos buscar la siguiente línea:
<Connector port="10009" protocol="AJP/1.3" redirectPort="8443" />
Y del mismo modo usar distintos puertos en cada instancia 10009, 10109, 10209...
Deshabilitar el conector HTTP
Este paso es opcional. Si lo deseamos podemos eliminar la configuración para los conectores HTTP borrando la siguiente línea del fichero conf/server.xml:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
De este modo la única forma de acceder al servidor es a través del conector AJP. Si deseamos seguir manteniendo el acceso por HTTP debemos asegurarnos de usar puertos distintos en cada instancia.
Configurar la ruta jvmRoute
Por último debemos indicar una jvmRoute a cada instancia para que sea accesible por el servidor Apache. Este nombre ha de ser único por cada Tomcat y será el que se use en la configuración de Apache. En el fichero conf/server.xml buscamos y modificamos la linea:
<Engine name="Catalina" defaultHost="localhost" jvmRoute="00">
Por último desplegamos las aplicaciones que queremos balancear y arrancamos todas las instancias de Tomcat asegurándonos de que arranquen sin errores.
Configuración del balanceador (mod_jk)
El primer paso para configurar el balanceo de carga es habilitar el módulo de apache encargado de ello. Para ello en el fichero httpd.conf debemos incluir la siguiente línea en la zona de carga de módulos
LoadModule jk_module modules/mod_jk.so
Ahora debemos configurar el módulo. Para ello pondremos la configuración en un fichero aparte que incluiremos de la siguiente forma
include /opt/apache/conf/extra/httpd-jk.conf
Fichero httpd-jk.conf
<IfModule jk_module>
JkWorkersFile /opt/apache/conf/workers.properties
JkShmFile /opt/apache/logs/jk.shm
JkLogFile logs/mod_jk.log
JkLogLevel info
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
# JkRequestLogFormat
JkRequestLogFormat "%w %V %T"
# JkOptions indicates to send SSK KEY SIZE
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
# You can use external file for mount points.
# It will be checked for updates each 60 seconds.
# The format of the file is: /url=worker
JkMountFile conf/uriworkermap.properties
# Add jkstatus for managing runtime data
<Location /jkmanager/>
JkMount jkstatus
Order deny,allow
Deny from all
Allow from 127.0.0.1
</Location>
# Should mod_jk send SSL information to Tomcat (default is On)
JkExtractSSL On
# What is the indicator for SSL (default is HTTPS)
JkHTTPSIndicator HTTPS
# What is the indicator for SSL session (default is SSL_SESSION_ID)
JkSESSIONIndicator SSL_SESSION_ID
# What is the indicator for client SSL cipher suit (default is SSL_CIPHER)
JkCIPHERIndicator SSL_CIPHER
# What is the indicator for the client SSL certificated (default is SSL_CLIENT_CERT)
JkCERTSIndicator SSL_CLIENT_CERT
</IfModule>
Lo más interesante de este fichero son las líneas donde se configura JkWorkersFile para poner el fichero donde se indican las distintas instancias de Tomcat configuradas. Otra configuración importante es la que se indica JkMountFile. En este fichero configuraremos las url que queramos mapear al balanceador. Las últimas líneas son interesantes para cuando configuremos el SSL.
Fichero workers.properties
worker.list=jkstatus,lb
worker.00.host=localhost
worker.00.port=10009
worker.00.type=ajp13
worker.00.fail_on_status=-404,500,503
worker.01.host=localhost
worker.01.port=10109
worker.01.type=ajp13
worker.01.fail_on_status=-404,500,503
worker.lb.type=lb
worker.lb.balance_workers=00,01
worker.lb.sticky_session=true
worker.lb.method=B
worker.jkstatus.type=status
En este fichero se configura la lista de workers. En la primera línea indicamos que vamos a usar el worker jkstatus, útil para acceder a la configuración del módulo desde un navegador, y el worker lb que es realmente el balanceador.
Después configuramos los worker correspondientes a cada uno de los tomcat. En este punto es muy importante nombrar a cada uno de ellos de la misma forma que los nombramos mediante el parámetro jvmRoute en sus ficheros server.xml. Esta será la forma en que el balanceador sepa la forma de redirigir las peticiones a cada uno de los tomcat. Además indicamos el host, el puerto AJP, el tipo de worker y los errores que queremos que se propaguen al apache. Si no indicamos la línea fail_on_status apache irá saltando de tomcat en tomcat cuando las instancias devuelvan errores.
Posteriormente configuramos el worker lb indicando su tipo, los worker ajp asociados, el método de balanceo y la propiedad sticky_session. Esta propiedad se usa para indicar al balanceador que mantenga cada sesión de usuario en el mismo tomcat en el que se lanzó inicialmente. Para aplicaciones web que mantienen datos en sesión esta es la forma de mantenerlos.
Por último se configura el worker jkstatus para proporcionar información acerca del módulo.
Fichero uriworkermap.properties
/jkstatus/*=jkstatus
/app-web/*=lb
En este fichero indicamos que las peticiones a jkstatus sean atendidas por el worker apropiado y las peticiones a app-web (nuestra aplicación balanceada) sean atendidas por el balanceador de carga.
Configuración de SSL
Debemos activar el módulo SSL del mismo modo que activamos el módulo jk. Incluimos las siguientes líneas en la zona de carga de módulos del fichero httpd.conf:
LoadModule ssl_module modules/mod_ssl.so
En caso de que no se encuentre cargado también debemos activar el módulo headers para la gestión de las cabeceras de las peticiones:
LoadModule headers_module modules/mod_headers.so
Ahora debemos configurar el módulo. Para ello pondremos la configuración en un fichero aparte que incluiremos de la siguiente forma
Include /opt/apache/conf/extra/httpd-ssl.conf
Fichero httpd-ssl.conf
En este fichero dejamos todos los valores por defecto salvo las siguientes líneas que incluiremos al final:
Include conf/extra/proxypass.conf
Include conf/extra/proxypass/*.conf
Fichero proxypass.conf
En el fichero proxypass.conf configuramos las opciones generales para https
#Parametros SSL
SSLEngine on
SSLCertificateFile /opt/apache/conf/server.crt
SSLCertificateKeyFile /opt/apache/conf/server.key
SSLCACertificateFile /opt/apache/conf/certificadosCA.crt
SSLVerifyClient none
SSLVerifyDepth 2
SSLOptions +ExportCertData
SSLInsecureRenegotiation on
#SSLOptions +ExportCertData +OptRenegotiate
#Inicializo cabeceras
RequestHeader set SSL_CLIENT_S_DN ""
RequestHeader set SSL-CLIENTCERT-PEM ""
RequestHeader set SSL_CLIENT_VERIFY ""
RequestHeader set SSL_CLIENT_CERT_CHAIN_0 ""
Las opciones más interesantes son SSLCertificateFile que indicará el fichero con el certificado del servidor, SSLCertificateKeyFile que indica el fichero con la clave privada del servidor y SSLCACertificateFile que referencia al fichero con los certificados de los clientes (o los de sus CA's) en los que confiemos.
Fichero proxypass/app-web.conf
En este fichero incluiremos las opciones específicas de configuración de SSL para cada aplicación. En nuestro caso estamos configurando la aplicación app-web
<Location /app-web/* >
#Cabeceras con ssl-clientcert-pem
SSLVerifyClient require
RequestHeader set SSL_CLIENT_S_DN "%{SSL_CLIENT_S_DN}s"
RequestHeader set SSL-CLIENTCERT-PEM "%{SSL_CLIENT_CERT}s"
RequestHeader set SSL_CLIENT_VERIFY "%{SSL_CLIENT_VERIFY}s"
RequestHeader set SSL_CLIENT_CERT_CHAIN_0 "%{SSL_CLIENT_CERT_CHAIN_0}s"
JkMount lb
SSLRenegBufferSize 1000000000
</Location>
Lo más interesante de este fichero es la línea JkMount lb que indica el montaje del balanceador de carga para atender a las peticiones en la url /app-web/* por protocolo seguro. Además indicamos que para estas peticiones requerimos certificado de cliente mediante la línea SSLVerifyClient require.
Vamos a configurar un servidor Apache para servir una aplicación web desplegada en varias instancias Tomcat balanceando la carga de trabajo entre los servidores. Supondremos además que el acceso a la aplicacionón se realiza a través del protocolo https.
La comunicación entre el servidor web Apache y los distintos Tomcat se realiza usando el protocolo AJP.
El usuario accederá a la url https://servidor.org/app-web/ eligirá un certificado de acceso, establecerá sesión ssl con el servidor y Apacheredirigirá la petición a alguno de los Tomcat balanceados.
Una vez establecida la sesión de trabajo con un cierto Tomcat, Apache mantendrá las restantes peticiones del usuario en ese mismo Tomcat.
Instalación y configuración de los servidores Tomcat
El primer paso para realizar la configuración consiste en instalar y configurar varias instancias del servidor Tomcat. Para ello descargamos Tomcat (por ejemplo la versión apache-tomcat-6.0.35.zip) y lo descomprimimos en tantas carpetas distintas como deseemos. Una vez instalados debemos hacer una serie de cambios en la configuración de todos ellos.
Cambiar la variable CATALINA_HOME
Debemos cambiar la variable CATALINA_HOME de cada uno de los Tomcat para que apunte a la carpeta en la que está instalado. Para ello editamos el fichero bin/catalina.sh y en la primera línea escribimos:
CATALINA_HOME=/home/egdepedro/balanceo/apache-tomcat-6.0.35-00
Cambiando la carpeta por la correspondiente en cada uno de ellos.
Configurar el puerto del servidor
Debemos configurar los Tomcat para que usen puertos distintos y no den errores en el arranque. En el archivo conf/server.xml debemos cambiar el puerto indicado en la línea:
<Server port="8005" shutdown="SHUTDOWN">
Usando distintos puertos en cada instancia. Por ejemplo 8005, 8006, 8007...
Configurar los conectores AJP
En el mismo fichero conf/server.xml debemos buscar la siguiente línea:
<Connector port="10009" protocol="AJP/1.3" redirectPort="8443" />
Y del mismo modo usar distintos puertos en cada instancia 10009, 10109, 10209...
Deshabilitar el conector HTTP
Este paso es opcional. Si lo deseamos podemos eliminar la configuración para los conectores HTTP borrando la siguiente línea del fichero conf/server.xml:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
De este modo la única forma de acceder al servidor es a través del conector AJP. Si deseamos seguir manteniendo el acceso por HTTP debemos asegurarnos de usar puertos distintos en cada instancia.
Configurar la ruta jvmRoute
Por último debemos indicar una jvmRoute a cada instancia para que sea accesible por el servidor Apache. Este nombre ha de ser único por cada Tomcat y será el que se use en la configuración de Apache. En el fichero conf/server.xml buscamos y modificamos la linea:
<Engine name="Catalina" defaultHost="localhost" jvmRoute="00">
Por último desplegamos las aplicaciones que queremos balancear y arrancamos todas las instancias de Tomcat asegurándonos de que arranquen sin errores.
Configuración del balanceador (mod_jk)
El primer paso para configurar el balanceo de carga es habilitar el módulo de apache encargado de ello. Para ello en el fichero httpd.conf debemos incluir la siguiente línea en la zona de carga de módulos
LoadModule jk_module modules/mod_jk.so
Ahora debemos configurar el módulo. Para ello pondremos la configuración en un fichero aparte que incluiremos de la siguiente forma
include /opt/apache/conf/extra/httpd-jk.conf
Fichero httpd-jk.conf
<IfModule jk_module>
JkWorkersFile /opt/apache/conf/workers.properties
JkShmFile /opt/apache/logs/jk.shm
JkLogFile logs/mod_jk.log
JkLogLevel info
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
# JkRequestLogFormat
JkRequestLogFormat "%w %V %T"
# JkOptions indicates to send SSK KEY SIZE
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
# You can use external file for mount points.
# It will be checked for updates each 60 seconds.
# The format of the file is: /url=worker
JkMountFile conf/uriworkermap.properties
# Add jkstatus for managing runtime data
<Location /jkmanager/>
JkMount jkstatus
Order deny,allow
Deny from all
Allow from 127.0.0.1
</Location>
# Should mod_jk send SSL information to Tomcat (default is On)
JkExtractSSL On
# What is the indicator for SSL (default is HTTPS)
JkHTTPSIndicator HTTPS
# What is the indicator for SSL session (default is SSL_SESSION_ID)
JkSESSIONIndicator SSL_SESSION_ID
# What is the indicator for client SSL cipher suit (default is SSL_CIPHER)
JkCIPHERIndicator SSL_CIPHER
# What is the indicator for the client SSL certificated (default is SSL_CLIENT_CERT)
JkCERTSIndicator SSL_CLIENT_CERT
</IfModule>
Lo más interesante de este fichero son las líneas donde se configura JkWorkersFile para poner el fichero donde se indican las distintas instancias de Tomcat configuradas. Otra configuración importante es la que se indica JkMountFile. En este fichero configuraremos las url que queramos mapear al balanceador. Las últimas líneas son interesantes para cuando configuremos el SSL.
Fichero workers.properties
worker.list=jkstatus,lb
worker.00.host=localhost
worker.00.port=10009
worker.00.type=ajp13
worker.00.fail_on_status=-404,500,503
worker.01.host=localhost
worker.01.port=10109
worker.01.type=ajp13
worker.01.fail_on_status=-404,500,503
worker.lb.type=lb
worker.lb.balance_workers=00,01
worker.lb.sticky_session=true
worker.lb.method=B
worker.jkstatus.type=status
En este fichero se configura la lista de workers. En la primera línea indicamos que vamos a usar el worker jkstatus, útil para acceder a la configuración del módulo desde un navegador, y el worker lb que es realmente el balanceador.
Después configuramos los worker correspondientes a cada uno de los tomcat. En este punto es muy importante nombrar a cada uno de ellos de la misma forma que los nombramos mediante el parámetro jvmRoute en sus ficheros server.xml. Esta será la forma en que el balanceador sepa la forma de redirigir las peticiones a cada uno de los tomcat. Además indicamos el host, el puerto AJP, el tipo de worker y los errores que queremos que se propaguen al apache. Si no indicamos la línea fail_on_status apache irá saltando de tomcat en tomcat cuando las instancias devuelvan errores.
Posteriormente configuramos el worker lb indicando su tipo, los worker ajp asociados, el método de balanceo y la propiedad sticky_session. Esta propiedad se usa para indicar al balanceador que mantenga cada sesión de usuario en el mismo tomcat en el que se lanzó inicialmente. Para aplicaciones web que mantienen datos en sesión esta es la forma de mantenerlos.
Por último se configura el worker jkstatus para proporcionar información acerca del módulo.
Fichero uriworkermap.properties
/jkstatus/*=jkstatus
/app-web/*=lb
En este fichero indicamos que las peticiones a jkstatus sean atendidas por el worker apropiado y las peticiones a app-web (nuestra aplicación balanceada) sean atendidas por el balanceador de carga.
Configuración de SSL
Debemos activar el módulo SSL del mismo modo que activamos el módulo jk. Incluimos las siguientes líneas en la zona de carga de módulos del fichero httpd.conf:
LoadModule ssl_module modules/mod_ssl.so
En caso de que no se encuentre cargado también debemos activar el módulo headers para la gestión de las cabeceras de las peticiones:
LoadModule headers_module modules/mod_headers.so
Ahora debemos configurar el módulo. Para ello pondremos la configuración en un fichero aparte que incluiremos de la siguiente forma
Include /opt/apache/conf/extra/httpd-ssl.conf
Fichero httpd-ssl.conf
En este fichero dejamos todos los valores por defecto salvo las siguientes líneas que incluiremos al final:
Include conf/extra/proxypass.conf
Include conf/extra/proxypass/*.conf
Fichero proxypass.conf
En el fichero proxypass.conf configuramos las opciones generales para https
#Parametros SSL
SSLEngine on
SSLCertificateFile /opt/apache/conf/server.crt
SSLCertificateKeyFile /opt/apache/conf/server.key
SSLCACertificateFile /opt/apache/conf/certificadosCA.crt
SSLVerifyClient none
SSLVerifyDepth 2
SSLOptions +ExportCertData
SSLInsecureRenegotiation on
#SSLOptions +ExportCertData +OptRenegotiate
#Inicializo cabeceras
RequestHeader set SSL_CLIENT_S_DN ""
RequestHeader set SSL-CLIENTCERT-PEM ""
RequestHeader set SSL_CLIENT_VERIFY ""
RequestHeader set SSL_CLIENT_CERT_CHAIN_0 ""
Las opciones más interesantes son SSLCertificateFile que indicará el fichero con el certificado del servidor, SSLCertificateKeyFile que indica el fichero con la clave privada del servidor y SSLCACertificateFile que referencia al fichero con los certificados de los clientes (o los de sus CA's) en los que confiemos.
Fichero proxypass/app-web.conf
En este fichero incluiremos las opciones específicas de configuración de SSL para cada aplicación. En nuestro caso estamos configurando la aplicación app-web
<Location /app-web/* >
#Cabeceras con ssl-clientcert-pem
SSLVerifyClient require
RequestHeader set SSL_CLIENT_S_DN "%{SSL_CLIENT_S_DN}s"
RequestHeader set SSL-CLIENTCERT-PEM "%{SSL_CLIENT_CERT}s"
RequestHeader set SSL_CLIENT_VERIFY "%{SSL_CLIENT_VERIFY}s"
RequestHeader set SSL_CLIENT_CERT_CHAIN_0 "%{SSL_CLIENT_CERT_CHAIN_0}s"
JkMount lb
SSLRenegBufferSize 1000000000
</Location>
Lo más interesante de este fichero es la línea JkMount lb que indica el montaje del balanceador de carga para atender a las peticiones en la url /app-web/* por protocolo seguro. Además indicamos que para estas peticiones requerimos certificado de cliente mediante la línea SSLVerifyClient require.
Suscribirse a:
Comentarios (Atom)