Cómo instalar Apache Tomcat 9 en Linux CentOS 7 y desplegar aplicaciones JSP WAR

Explicamos cómo montar un servidor web con Apache Tomcat 9 en un equipo con sistema operativo Linux CentOS 7 (Minimal). Mostramos cómo hacer una configuración básica de Tomcat y cómo desplegar alguna aplicación JSP, fichero WAR (Web Application Resource).

Requisitos para montar servidor web con Apache Tomcat 9 sobre Linux CentOS 7

Para poder montar un servidor web (o contenedor de aplicaciones) con Apache Tomcat necesitaremos los siguientes requisitos:

  • Un equipo físico o máquina virtual con sistema operativo Linux CentOS 7.
  • Usuario y contraseña con permisos suficientes para instalar software en el equipo Linux CentOS.
  • Acceso mediante SSH, dado que es una distribución Minimal y no lleva modo gráfico haremos todo el proceso por consola (comandos).
  • Para conectarnos al servidor Linux usaremos PuTTY y el protocolo SSH. Por lo tanto deberemos disponer de un equipo que esté en la misma red que el Linux CentOS y que tenga acceso mediante SSH. O bien accederemos directamente a la consola del equipo Linux.
  • El equipo Linux CentOS debe tener conexión a Internet (descargaremos los paquetes de instalación de Tomcat, así como otros dependientes).

Antes de iniciar la instalación es recomendable asegurarnos de que tenemos todos los paquetes a la última versión. Esto podemos hacerlo ejecutando el comando:

yum -y update

 

Instalar Apache Tomcat 9 en Linux CentOS 7

En primer lugar instalaremos algunos paquetes necesarios, como Open JDK. Para ello ejecutaremos el siguiente comando:

yum install java-1.8.0-openjdk.x86_64 java-1.8.0-openjdk-devel.x86_64

Nos solicitará confirmación para descargar e instalar los paquetes, pulsaremos y (yes).

Instalar Apache Tomcat 9 en Linux CentOS 7

Si el proceso ha concluido correctamente nos lo indicará con “¡Listo!”. Ahora podremos ver la versión de java que tenemos instalada, con el comando:

java -versión

Que nos devolverá algo así:

Instalar Apache Tomcat 9 en Linux CentOS 7

Con el texto:

[root@SRVLINUX~]# java -version
openjdk version “1.8.0_191”
OpenJDK Runtime Environment (build 1.8.0_191-b12)
OpenJDK 64-Bit Server VM (build 25.191-b12, mixed mode)

Descargamos ahora el paquete que contiene los archivos de Apache Tomcat 9. Para saber la URL lo mejor es visitar la web oficial de Apache Tomcat y buscar la URL de la descarga de la versión que queramos instalar, en nuestro caso la última disponible 9.0.12.

Nos posicionaremos en la carpeta /tmp para realizar la descarga, con el comando:

cd /tmp

Y descargaremos el fichero zip de Apache Tomcat con:

wget http://apache.uvigo.es/tomcat/tomcat-9/v9.0.12/bin/apache-tomcat-9.0.12.zip

(la URL será la que hayamos obtenido de la web oficial de Tomcat para la versión que deseemos)

Instalar Apache Tomcat 9 en Linux CentOS 7

Descomprimimos el fichero zip con el comando:

unzip apache-tomcat-9.0.12.zip

Instalar Apache Tomcat 9 en Linux CentOS 7

Nos habrá creado la carpeta /tmp/apache-tomcat-9.0.12. La moveremos a la carpeta /opt con el nombre tomcat:

cd /tmp/apache-tomcat-9.0.12

Instalar Apache Tomcat 9 en Linux CentOS 7

mv apache-tomcat-9.0.12 /opt/tomcat

De forma que quede la carpeta tomcat dentro de la carpeta /opt:

Instalar Apache Tomcat 9 en Linux CentOS 7

Añadiremos ahora una variable de entorno (environment variable) llamada CATALINA_HOME, con la carpeta de los ficheros de Apache Tomcat, para ello ejecutaremos el comando:

echo “export CATALINA_HOME=’/opt/tomcat/'” >> ~/.bashrc

Y este otro comando:

source ~/.bashrc

Instalar Apache Tomcat 9 en Linux CentOS 7

Crearemos un grupo y  un usuario que será con el que iniciaremos el demonio de Tomcat, ejecutando los comandos:

groupadd tomcat

useradd -s /bin/false -g tomcat -d /opt/tomcat tomcat

Instalar Apache Tomcat 9 en Linux CentOS 7

Haremos propietario de la carpeta de Tomcat (/opt/tomcat) al grupo tomcat:

chgrp -R tomcat /opt/tomcat

Y estableceremos los permisos particulares por carpetas con los siguientes comandos:

chmod -R g+r /opt/tomcat/conf

chmod g+x /opt/tomcat/conf

chown -R tomcat /opt/tomcat/webapps/ /opt/tomcat/work/ /opt/tomcat/temp/ /opt/tomcat/logs/

Instalar Apache Tomcat 9 en Linux CentOS 7

Estableceremos los permisos de ejecución para todos los script .sh del directorio bin, para ello ejecutaremos el comando:

chmod +x /opt/tomcat/bin/*.sh

Instalar Apache Tomcat 9 en Linux CentOS 7

Por último configuraremos el sistema para que arranque el demonio (servicio) de Tomcat cuando arranque el equipo. Para ello crearemos el fichero tomcat.service en la carpeta /etc/systemd/system con el siguiente comando:

nano /etc/systemd/system/tomcat.service

Instalar Apache Tomcat 9 en Linux CentOS 7

Y el siguiente contenido:

Guardaremos los cambios en el editor nano pulsando Control + O y cerraremos pulsando Control + X:

Instalar Apache Tomcat 9 en Linux CentOS 7

Teniendo en cuenta que debe existir la carpeta de Java JRE:

/usr/lib/jvm/java-1.8.0-openjdk/jre

Si la tenemos instalada en otra carpeta deberemos cambiar la ruta en el fichero anterior.

Si no podemos o queremos reiniciar el servidor podremos recargar los servicios del sistema con el comando:

systemctl daemon-reload

Instalar Apache Tomcat 9 en Linux CentOS 7

Habilitareremos el servicio (demonio) de tomcat para que se cargue en el inicio con el comando:

systemctl enable tomcat

Instalar Apache Tomcat 9 en Linux CentOS 7

Y lo iniciaremos con el comando:

systemctl start tomcat

Por último, si queremos que haya acceso externo al servidor de aplicaciones web Apache Tomcat deberemos abrir el puerto 8080 (el de defecto de Tomcat) en el cortafuegos de Linux Centos, para ello usaremos los siguientes comandos:

Instalar Apache Tomcat 9 en Linux CentOS 7

firewall-cmd –permanent –add-port=8080/tcp

firewall-cmd –reload

Si todo el proceso ha sido correcto podremos probar el servidor de aplicaciones web Tomcat abriendo un navegador desde cualquier equipo de la red e introduciendo la URL:

http://IP_Servidor_Tomcat:8080

Cambiando IP_Servidor_Tomcat por la IP o el nombre DNS del equipo con Linux CentOS y Apache Tomcat.

Si todo es correcto mostrará la página de bienvenida de Apache Tomcat:

Instalar Apache Tomcat 9 en Linux CentOS 7

En la URL http://IP_Servidor_Tomcat:8080/examples/servlets/ podremos comprobar que los ejemplos JSP del servidor Tomcat funcionan correctamente:

Instalar Apache Tomcat 9 en Linux CentOS 7

 

Configuración básica de Apache Tomcat 9

Es muy recomendable realizar una configuración básica en Apache Tomcat antes de que sea un servidor de producción. Una de las cosas más importantes es establecer un usuario y contraseña con permisos para acceso a la administración de Tomcat, para ello editaremos el fichero

Configuración básica de Apache Tomcat 9

Añadiremos, antes de la línea </tomcat-users> lo siguiente:

Con las líneas anteriores habremos creado dos usuarios, uno para acceso a la consola de administración web de las aplicaciones Tomcat, llamado “ges_app” y con contraseña “0000” y otro administrador con acceso la alplicación host-manager, llamado “admin_tomcat“, con la contraseña “aaaa”:

Configuración básica de Apache Tomcat 9

Guardaremos los cambios con Control + O y cerraremos con Control + X. Los cambios se aplicarán directamente, no es necesario reiniciar el servicio de Tomcat.

Además de crear los usuarios debemos establecer los permisos de acceso a las aplicaciones de gestión de Tomcat. Para establecer los permisos de acceso a la aplicación Gestor de Aplicaciones Web de Tomcat editaremos el fichero /opt/tomcat/webapps/manager/META-INF/context.xml:

nano /opt/tomcat/webapps/manager/META-INF/context.xml

Modificaremos la línea:

<Valve className=”org.apache.catalina.valves.RemoteAddrValve”
allow=”127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1″ />

Que es la que establece los permisos de acceso a la aplicación “manager”, y por defecto solo permite el acceso desde el propio equipo local. Si queremos que se pueda acceder desde cualquier equipo de la red cambiaremos allow=”127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1″ por allow=”.*”:

Configuración básica de Apache Tomcat 9Quedando:

<Context antiResourceLocking=”false” privileged=”true” >
<Valve className=”org.apache.catalina.valves.RemoteAddrValve”
allow=”.*” />
<Manager sessionAttributeValueClassNameFilter=”java\.lang\.(?:Boolean|Integer|Long|Number|String)|org\.apache\.catalina\.filters\.CsrfPreventionFilter\$LruCache(?$
</Context>

Procederemos de la misma forma para la aplicación:

nano /opt/tomcat/webapps/host-manager/META-INF/context.xml

Editando la misma línea y modificando allow=”.*”.

Una vez realizados estos cambios reiniciaremos el servicio de Apache Tomcat para que se apliquen:

systemctl restart tomcat

A partir de ahora podremos acceder a las aplicaciónes Manager App y Host Manager con estos dos usuarios:

Configuración básica de Apache Tomcat 9

Nos solicitará usuario y contraseña para acceder (debe tener el rol manager-gui). En el caso de Manager App podremos acceder con el usuario “ges_app“, al que le hemos dado permisos para ello:

Configuración básica de Apache Tomcat 9

Nos mostrará la aplicación Gestor de Aplicaciones Web de Tomcat, desde la que podremos ver el estado de despliegue de las aplicaciones que tenemos instaladas, pararlas, recargarlas, replegarlas y también podremos desplegar nuevas aplicaciones:

Configuración básica de Apache Tomcat 9

Para el caso de Manager host (Gestor de Máquina Virtual de Tomcat) también nos solicitará usuario y contraseña (debe tener los rolesadmin-script  y admin-gui), en nuestro caso usaremos “admin_tomcat“:

Configuración básica de Apache Tomcat 9

También podremos comprobar el estado del servidor Tomcat (Server Status):

Configuración básica de Apache Tomcat 9

Desplegar aplicación JSP (fichero WAR) en servidor Apache Tomcat 9

Para desplegar una apliación JSP (fichero WAR), una vez que tengamos compilado el fichero .war de nuestra aplicación accederemos a Manage App y pulsaremos en “Seleccionar archivo” en “Archivo WAR a desplegar”:

Desplegar aplicación JSP (fichero WAR) en servidor Apache Tomcat 9

Pulsaremos en “Desplegar”. Si todo es correcto nos aparecerá la nueva aplicación en la lista de aplicaciones:

Desplegar aplicación JSP (fichero WAR) en servidor Apache Tomcat 9

Y la tendremos disponible accediendo desde el navegador a la URL asignada:

http://IP_Servidor_Tomcat:8080/HolaMundo

Desplegar aplicación JSP (fichero WAR) en servidor Apache Tomcat 9

Cómo comprobar estado del servicio de Tomcat y errores típicos

Si al intentar iniciar el servicio de Tomcat con systemctl start tomcat nos devuelve algún error podremos comprobar el detalle del mismo ejecutando:

journalctl -xe

(también se puede obtener información, aunque menos detallada, con systemctl status tomcat).

Un ejemplo de salida de este comando:

— Unit tomcat.service has begun starting up.
oct 24 15:11:31 SRVLINUX systemd[1956]: Failed at step EXEC spawning /opt/tomcat/bin/startup.sh: Permission denied
— Subject: Process /opt/tomcat/bin/startup.sh could not be executed
— Defined-By: systemd
— Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel

— The process /opt/tomcat/bin/startup.sh could not be executed and failed.

— The error number returned by this process is 13.
oct 24 15:11:31 SRVLINUX systemd[1]: tomcat.service: control process exited, code=exited status=203
oct 24 15:11:31 SRVLINUX systemd[1]: Failed to start Apache Tomcat 9.
— Subject: Unit tomcat.service has failed
— Defined-By: systemd
— Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel

— Unit tomcat.service has failed.

— The result is failed.
oct 24 15:11:31 SRVLINUX systemd[1]: Unit tomcat.service entered failed state.
oct 24 15:11:31 SRVLINUX systemd[1]: tomcat.service failed.

Este error suele ser debido a que no hemos establecido los permisos de ejecución al los ficheros .sh de script de la carpeta /bin de Tomcat. Indicamos cómo se establecen estos permisos en el proceso de instalación de Tomcat.

Otro error típico es al intentar acceder a las aplicaciones de administración web de Tomcat:

403 Access Denied

You are not authorized to view this page.

By default the Host Manager is only accessible from a browser running on the same machine as Tomcat. If you wish to modify this restriction, you’ll need to edit the Host Manager’s context.xml file.

If you have already configured the Host Manager application to allow access and you have used your browsers back button, used a saved book-mark or similar then you may have triggered the cross-site request forgery (CSRF) protection that has been enabled for the HTML interface of the Host Manager application. You will need to reset this protection by returning to the main Host Manager page. Once you return to this page, you will be able to continue using the Host Manager application’s HTML interface normally. If you continue to see this access denied message, check that you have the necessary permissions to access this application.

If you have not changed any configuration files, please examine the file conf/tomcat-users.xml in your installation. That file must contain the credentials to let you use this webapp.

For example, to add the admin-gui role to a user named tomcat with a password of s3cret, add the following to the config file listed above.

<role rolename=”admin-gui”/>
<user username=”tomcat” password=”s3cret” roles=”admin-gui”/>

Note that for Tomcat 7 onwards, the roles required to use the host manager application were changed from the single admin role to the following two roles. You will need to assign the role(s) required for the functionality you wish to access.

admin-gui – allows access to the HTML GUI
admin-script – allows access to the text interface

The HTML interface is protected against CSRF but the text interface is not. To maintain the CSRF protection:

Users with the admin-gui role should not be granted the admin-script role.
If the text interface is accessed through a browser (e.g. for testing since this interface is intended for tools not humans) then the browser must be closed afterwards to terminate the session.

En el error, claramente, nos indica que tenemos que configurar el fichero conf/tomcat-users.xml para añadir algún usuario con permisos y también el fichero context.xml de cada aplicación para permitir el acceso desde equipos de la red diferentes al local de Tomcat.

Anexo

  • Contenido completo original (por defecto) del fichero /opt/tomcat/webapps/manager/META-INF/context.xml de Apache Tomcat 9:

  • Contenido completo original (por defecto) del fichero /opt/tomcat/conf/tomcat-users.xml de Apache Tomcat 9:

  • Contenido completo original (por defecto) del fichero /opt/tomcat/webapps/host-manager/META-INF/context.xml de Apache Tomcat 9:

 

 

alonsojpd

alonsojpd

Presidente y fundador de Proyecto A y AjpdSoft

También te podría gustar...

Deja un comentario