# rm-rf.es

Cómo instalar JBoss

Vamos a ver los pasos necesarios para instalar JBoss Application Server en Linux, concretamente en GNU/Linux CentOS 6. Los pasos son aplicables prácticamente en su totalidad al resto de sistemas GNU/Linux como por ejemplo Debian, Ubuntu o Fedora (excepto la parte final del chkconfig, en Debian no es válida).

Descarga de JBoss Application Server

En el site de JBoss tenemos disponibles todas las descargas, tanto de JBoss AS como de JBoss Enterprise Application (EAP). Nosotros vamos a descargar la versión 7.1.1 final de JBoss AS en su versión precompilada en formato .zip. Podríamos bajar el código fuente y compilarlo según nuestros requerimientos pero para una instalación estándar no suele ser necesario.

$ wget http://download.jboss.org/jbossas/7.1/jboss-as-7.1.1.Final/jboss-as-7.1.1.Final.zip

Instalación de JAVA JDK

CentOS por defecto, en su instalación «base» trae por defecto JAVA instalado, podéis verificarlo con el siguiente comando:

# java -version
java version "1.7.0_09-icedtea"
OpenJDK Runtime Environment (rhel-2.3.3.2.el6_3-i386)
OpenJDK Client VM (build 23.2-b09, mixed mode)
# rpm -qa | grep jdk
java-1.7.0-openjdk-1.7.0.9-2.3.3.2.el6_3.i686

Si no tuvierais el JDK instalado, es tan sencillo como instalarlo a través de yum:

# yum install java-1.7.0-openjdk

Instalación de JBoss

La instalación a partir del paquete precompilado (binary .zip) es tan sencilla como descomprimir en la ruta que queramos. Podemos dejar un directorio con el nº de versión para tener y hacer un link simbólico «jboss»:

# mv jboss-as-7.1.1.Final.zip /opt
# cd  /opt/ && unzip jboss-as-7.1.1.Final.zip
# ln -s /opt/jboss-as-7.1.1.Final /opt/jboss
# ls -l /opt/
total 4
lrwxrwxrwx  1 root root   25 Sep 10 21:29 jboss -> /opt/jboss-as-7.1.1.Final
drwxr-xr-x 10 root root 4096 Sep 10 21:28 jboss-as-7.1.1.Final

Configuración de JBoss

El servidor de aplicaciones no va a correr como root, así que creamos un usuario específico para la ejecución de JBoss:

# adduser jboss
# passwd jboss

Configuramos las variables de entorno necesarias para que se puedea ejecutar el servidor de aplicaciones:

# su - jboss
$ vi ~/.bashrc

Las variables necesarias son JAVA_HOME, PATH (añadir el path de java y de JBoss) y JBOSS_HOME.

# .bashrc

# Source global definitions
if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi

# User specific aliases and functions

export JAVA_HOME=/usr/lib/jvm/jre-1.7.0-openjdk
export PATH=$PATH:$JAVA_HOME/bin
        
export JBOSS_HOME=/opt/jboss
export PATH=$PATH:$JBOSS_HOME/bin

Podéis recargar las variables de entorno ejecutando:

$ bash

o también

source .bashrc

Como root, cambiamos el propietario del directorio JBoss al nuevo usuario:

# chown -R jboss.jboss /opt/jboss-as-7.1.1.Final

Iniciar JBoss

Existen varias formas de arrancar JBoss, podemos iniciar una única instancia en modo standalone o como Managed Domain. Esta última permite controlar y configurar múltiples instancias de JBoss de varias máquinas mientras que el standalone es una instancia local única.

Para arrancar el modo standalone ejecutamos el siguiente comando. Si quisieramos lanzar JBoss como Managed Domain simplemente ejecutar el script de arranque correspondiente:

# su - jboss
$ $JBOSS_HOME/bin/standalone.sh

Si todo ha ido bien, la ejecución mostrará lo siguiente:

=========================================================================

  JBoss Bootstrap Environment

  JBOSS_HOME: /opt/jboss

  JAVA: /usr/lib/jvm/jre-1.7.0-openjdk/bin/java

  JAVA_OPTS:  -server -XX:+TieredCompilation -Xms64m -Xmx512m -XX:MaxPermSize=256m -Djava.net.preferIPv4Stack=true -Dorg.jboss.resolver.warning=true -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000 -Djboss.modules.system.pkgs=org.jboss.byteman -Djava.awt.headless=true -Djboss.server.default.config=standalone.xml

=========================================================================

21:46:04,082 INFO  [org.jboss.modules] JBoss Modules version 1.1.1.GA
21:46:06,487 INFO  [org.jboss.msc] JBoss MSC version 1.0.2.GA
21:46:07,130 INFO  [org.jboss.as] JBAS015899: JBoss AS 7.1.1.Final "Brontes" starting
21:46:18,898 INFO  [org.xnio] XNIO Version 3.0.3.GA
21:46:18,951 INFO  [org.jboss.as.server] JBAS015888: Creating http management service using socket-binding (management-http)
21:46:19,451 INFO  [org.xnio.nio] XNIO NIO Implementation Version 3.0.3.GA
21:46:19,638 INFO  [org.jboss.remoting] JBoss Remoting version 3.2.3.GA
21:46:20,265 INFO  [org.jboss.as.configadmin] JBAS016200: Activating ConfigAdmin Subsystem
21:46:20,310 INFO  [org.jboss.as.logging] JBAS011502: Removing bootstrap log handlers
21:46:20,635 INFO  [org.jboss.as.security] (ServerService Thread Pool -- 44) JBAS013101: Activating Security Subsystem
21:46:20,630 INFO  [org.jboss.as.naming] (ServerService Thread Pool -- 38) JBAS011800: Activating Naming Subsystem
21:46:20,632 INFO  [org.jboss.as.osgi] (ServerService Thread Pool -- 39) JBAS011940: Activating OSGi Subsystem
21:46:20,899 INFO  [org.jboss.as.webservices] (ServerService Thread Pool -- 48) JBAS015537: Activating WebServices Extension
21:46:22,029 INFO  [org.jboss.as.security] (MSC service thread 1-2) JBAS013100: Current PicketBox version=4.0.7.Final

[...]
21:46:31,249 INFO  [org.jboss.as.remoting] (MSC service thread 1-2) JBAS017100: Listening on /127.0.0.1:4447
21:46:31,836 INFO  [org.jboss.as.connector.subsystems.datasources] (MSC service thread 1-2) JBAS010400: Bound data source [java:jboss/datasources/ExampleDS]
21:46:32,138 INFO  [org.jboss.as] (Controller Boot Thread) JBAS015951: Admin console listening on http://127.0.0.1:9990
21:46:32,145 INFO  [org.jboss.as] (Controller Boot Thread) JBAS015874: JBoss AS 7.1.1.Final "Brontes" started in 30736ms - Started 133 of 208 services (74 services are passive or on-demand)

Si os fijáis, la consola de administración y el servicio sólo estan disponibles en local:

21:46:31,249 INFO  [org.jboss.as.remoting] (MSC service thread 1-2) JBAS017100: Listening on /127.0.0.1:4447
21:46:32,138 INFO  [org.jboss.as] (Controller Boot Thread) JBAS015951: Admin console listening on http://127.0.0.1:9990

Podéis modificarlo y que escuche por otras o todas las IPs de la máquina en el fichero:

/opt/jboss-as-7.1.1.Final/standalone/configuration/standalone.xml

 <interface name="management">
 <inet-address value="${jboss.bind.address.management:127.0.0.1}"/>
 </interface>
 <interface name="public">
 <inet-address value="${jboss.bind.address:127.0.0.1}"/>
 </interface>

Si queremos que escuche por todas las IPs:

  <interface name="management">
 <inet-address value="${jboss.bind.address.management:0.0.0.0}"/>
 </interface>
 <interface name="public">
 <inet-address value="${jboss.bind.address:0.0.0.0}"/>
 </interface>

En este caso lo hemos modificado para el standalone, si hubieramos levantado el Managed Domain lo deberíamos cambiar en su archivo de configuración correspondiente. Volvemos a iniciar y ahora efectivamente escucha por todas las IPs. Tanto la consola de administración web (puerto TCP 9990) como el propio servicio (puerto TCP 8080):

21:57:39,619 INFO  [org.apache.coyote.http11.Http11Protocol] (MSC service thread 1-1) Starting Coyote HTTP/1.1 on http--0.0.0.0-8080

Administración de JBoss

Si accedemos a la consola de administración nos informarán con un pantallazo de que no hemos creado ningún usuario para administrar el servidor:

Tenemos que ejecutar el script adduser.sh para crear un usuario de administración. Está disponible en el directorio bin/ de nuestra instalación. El script da la opción de crear un usuario de gestión o de aplicación. En este caso creamos el usuario de gestión:

# /opt/jboss-as-7.1.1.Final/bin/add-user.sh

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) : ManagementRealm
Username : foo
Password : 
Re-enter Password : 
About to add user 'foo' for realm 'ManagementRealm'
Is this correct yes/no? yes
Added user 'foo' to file '/opt/jboss-as-7.1.1.Final/standalone/configuration/mgmt-users.properties'
Added user 'foo' to file '/opt/jboss-as-7.1.1.Final/domain/configuration/mgmt-users.properties'

Una vez creado, recargamos la página y aparecerá la ventana de autenticación, introducimos los datos del usuario creado y ya tendremos acceso a la consola de administración:

Crear servicio de sistema para JBoss

En el directorio «/opt/jboss/bin/init.d» tenemos la plantilla necesaria para crear el script de arranque automático e integrarlo en el sistema (chkconfig).

Vamos a copiar el script a /etc/init.d:

# cp -p /opt/jboss/bin/init.d/jboss-as-standalone.sh /etc/init.d/jboss
# chmod 755 jboss

Y copiamos el archivo jboss-as.conf, que permite personalizar variables, a la ruta correspondiente:
# mkdir /etc/jboss-as/
# cp -p jboss-as.conf /etc/jboss-as/

Tenemos que cambiar la variable JBOSS_HOME por la ruta en la que lo hayamos instalado:

JBOSS_HOME=/opt/jboss

Este archivo de configuración nos permite indicar el usuario con el que vamos a ejecutar JBoss, debemos modificarlo y configurar el usuario «jboss» que hemos creado antes:

# vi /etc/jboss-as/jboss-as.conf
JBOSS_USER=jboss

Ahora ya podemos añadir el script a chkconfig y configurarlo para que arranque automáticamente:

# chkconfig --add jboss  
# chkconfig jboss on

Si todo ha ido bien, ya podemos arrancar, parar y reiniciar el servicio con el script:

# /etc/init.d/jboss start
Starting jboss-as:                                         [  OK  ]
# ps -ef | grep jboss | grep -v grep
root      2472     1  0 22:18 pts/1    00:00:00 su - jboss -c LAUNCH_JBOSS_IN_BACKGROUND=1 JBOSS_PIDFILE=/var/run/jboss-as/jboss-as-standalone.pid /opt/jboss/bin/standalone.sh -c standalone.xml
jboss     2475  2472  0 22:18 ?        00:00:00 /bin/sh /opt/jboss/bin/standalone.sh -c standalone.xml
jboss     2525  2475  5 22:18 ?        00:00:34 /usr/lib/jvm/jre-1.7.0-openjdk/bin/java -D[Standalone] -server -XX:+TieredCompilation -Xms64m -Xmx512m -XX:MaxPermSize=256m -Djava.net.preferIPv4Stack=true -Dorg.jboss.resolver.warning=true -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000 -Djboss.modules.system.pkgs=org.jboss.byteman -Djava.awt.headless=true -Djboss.server.default.config=standalone.xml -Dorg.jboss.boot.log.file=/opt/jboss/standalone/log/boot.log -Dlogging.configuration=file:/opt/jboss/standalone/configuration/logging.properties -jar /opt/jboss/jboss-modules.jar -mp /opt/jboss/modules -jaxpmodule javax.xml.jaxp-provider org.jboss.as.standalone -Djboss.home.dir=/opt/jboss -c standalone.xml

Y esto es todo, ya tenemos JBoss AS instalado y listo para utilizar. Si os resulta interesante, en próximos artículos puedo explicar más cosas del funcionamiento de este servidor de aplicaciones.

Salir de la versión móvil