Cómo instalar Tomcat 9 en CentOS 7

En esta entrada explicamos cómo instalar Tomcat 9 en CentOS 7 paso a paso, de modo que puedas montar tu propio servidor de aplicaciones Java, como Java Servlet, JavaServer Pages, Java Expression Language y Java WebSocket technologies desde tu máquina o VPS CentOS.

Antes de instalar Tomcat 9 en CentOS 7

Si tienes intención de seguir esta guía de instalación de Tomcat 9 en CentOS 7 debes cumplir unos mínimos requisitos:

  • Un sistema CentOS 7 actualizado.
  • Entorno de Java como OpenJDK.
  • Acceso a línea de comandos como root o un usuario con permisos de sudo.
  • Conexión a Internet.

En caso de no disponer del entorno adecuado, pásate por la guía de instalación de Java en CentOS 7.

También necesitaremos algunos comandos y herramientas que obtendremos desde el repositorio de CentOS 7, por lo que actualizaremos las listas de paquetes:

~$ sudo yum update

E instalamos dichas herramientas:

~$ sudo yum install -y wget

Cómo descargar Tomcat 9 para CentOS 7

Debido a que la versión de Tomcat presente en los repositorios de la distribución es demasiado obsoleta (7.0.76), optaremos por descargar Tomcat 9 para CentOS 7 en su versión más reciente, disponible desde la sección de descargas de la versión 9, que en el momento de actualizar esta guía es la 9.0.64.

Encontraremos diversos enlaces, de los cuales el que buscamos es el núcleo o core de Tomcat 9, disponible en varios formatos:

como descargar tomcat 9 para centos 7

El paquete Core está disponible en formatos .zip y .tar.gz. Este último será el que descarguemos.

Si estás navegando sobre la máquina de instalación puedes descargar el paquete que te interese en la ubicación que quieras. En mi caso copiaré el enlace para descargarlo desde consola mediante el comando wget:

~$ wget -q https://downloads.apache.org/tomcat/tomcat-9/v9.0.68/bin/apache-tomcat-9.0.68.tar.gz

Cómo instalar Tomcat 9 en CentOS 7

Para instalar Tomcat 9 en CentOS 7 no basta con instalar un simple paquete, hay que hacer algunas tareas previas y posteriores. Vamos a verlas paso a paso.

Preparativos

Ejecutar Tomcat 9 como root es un riesgo de seguridad, por lo que lo mejor es crear un usuario del sistema específico para esta aplicación:

~$ sudo useradd -m -U -d /opt/tomcat -k /dev/null -s /bin/false tomcat

Extraemos el contenido del paquete directamente en el directorio /opt/tomcat/, que acabamos de crear para el usuario tomcat:

~$ sudo tar xf apache-tomcat-9.0.68.tar.gz -C /opt/tomcat/

Se creará la carpeta /opt/tomcat/apache-tomcat-9.0.68/. Si vas a instalar sucesivas revisiones de Tomcat 9 sin eliminar las anteriores puede que te interese crear un enlace simbólico apache-tomcat a la versión que quieras tener activa:

~$ sudo ln -s /opt/tomcat/apache-tomcat-9.0.68 /opt/tomcat/apache-tomcat

Ahora vamos a cambiar el propietario del directorio de Tomcat 9 y su contenido al usuario tomcat que creamos antes:

~$ sudo chown tomcat: /opt/tomcat/ -R

Creación del servicio tomcat.service

Vamos a crear el servicio tomcat.service añadiendo el archivo correspondiente en /etc/systemd/system/ con un editor de texto:

~$ sudo nano /etc/systemd/system/tomcat.service

Con este contenido:

[Unit]
Description=Tomcat 9.0 servlet container para CentOS 7
After=network.target

[Service]
Type=forking

User=tomcat
Group=tomcat

Environment="JAVA_OPTS=-Djava.security.egd=file:///dev/urandom"
Environment="CATALINA_BASE=/opt/tomcat/apache-tomcat"
Environment="CATALINA_HOME=/opt/tomcat/apache-tomcat"
Environment="CATALINA_PID=/opt/tomcat/apache-tomcat/temp/tomcat.pid"
Environment="CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC"

ExecStart=/opt/tomcat/apache-tomcat/bin/startup.sh
ExecStop=/opt/tomcat/apache-tomcat/bin/shutdown.sh

[Install]
WantedBy=multi-user.target

Es importante asegurarnos de que las rutas indicadas en este archivo correspondan con las rutas existentes en el sistema.

Cada vez que modifiquemos este archivo tenemos que advertir a systemd recargando la nueva configuración:

~$ sudo systemctl daemon-reload

Finalmente es el momento de iniciar el nuevo servicio tomcat:

~$ sudo systemctl start tomcat

Podemos comprobar que todo funciona como queremos con el comando systemctl status tomcat:

como instalar tomcat 9 en centos 7

Si necesitas que el nuevo servicio Tomcat 9 esté siempre disponible y arranque cada vez que inicie CentOS 7, actívalo con la opción enable de systemctl:

~$ sudo systemctl enable tomcat

Cómo configurar el firewall para Tomcat 9 en CentOS 7

Para acceder a la interfaz de Tomcat 9 fuera de la máquina local, habrá que configurar el firewall para permitir el acceso al puerto 8080/TCP:

~$ sudo firewall-cmd --permanent --zone=public --add-port=8080/tcp

Para aplicar esta regla de inmediato hay que recargar la configuración del firewall:

~$ sudo firewall-cmd --reload

Y por fin podemos comprobar el funcionamiento de Tomcat 9 en CentOS 7 mediante un navegador. A la dirección del servidor hay que añadir el puerto 8080 para acceder.

En este ejemplo el servidor es accesible en el dominio centos7.local.lan, por lo que usaríamos http://centos7.local.lan:8080/ como URL:

instalar tomcat 9 en centos 7

Permitir acceso desde red a la administración de Tomcat 9

Por defecto sólo se puede acceder a la interfaz de administración de Tomcat 9 desde la máquina que ejecuta el servicio. Si, por ejemplo, intentamos acceder a la sección «Server Status» un mensaje nos lo confirmará:

instalacion de tomcat 9 en centos 7

Es posible cambiar el acceso para poder acceder desde la red configurando los archivos context.xml de las rutas /opt/tomcat/apache-tomcat/webapps/manager/META-INF/ y /opt/tomcat/apache-tomcat/webapps/host-manager/META-INF/

Editamos:

~$ sudo nano /opt/tomcat/apache-tomcat/webapps/manager/META-INF/context.xml

Buscaremos el bloque Context:

...
<Context antiResourceLocking="false" privileged="true" >
  <Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
  <Manager sessionAttributeValueClassNameFilter="java\.lang\.(?:Boolean|Integer$
</Context>

Comentaremos la sección Valve que permite el acceso únicamente la máquina local:

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

Haremos idéntico cambio en el archivo context.xml del directorio /opt/tomcat/apache-tomcat/webapps/host-manager/META-INF/:

~$ sudo nano /opt/tomcat/apache-tomcat/webapps/host-manager/META-INF/context.xml

Si intentamos acceder de nuevo comprobaremos que en esta ocasión se nos piden credenciales de usuario:

como instalar y configurar tomcat 9 en centos 7

Pero aún no tenemos usuarios con los que acceder.

Crear usuarios de Tomcat 9

Aunque hemos accedido a la interfaz web de Tomcat 9, no podremos hacer gran cosa, ya que no hay usuarios en el sistema.

Para dar de alta usuarios de Tomcat 9 debemos hacerlo manualmente editando el archivo tomcat-users.xml ubicado en el subidrectorio conf/ de la instalación.

Editaremos el archivo:

~$ sudo nano /opt/tomcat/apache-tomcat/conf/tomcat-users.xml

El contenido de este archivo por defecto es un bloque tomcat-users que sólo contiene comentarios.

Incluiremos dentro de este bloque la definición de un usuario que tenga los roles necesarios para acceder a las distintas aplicaciones administrativas:

...
<tomcat-users xmlns="http://tomcat.apache.org/xml"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://tomcat.apache.org/xml tomcat-users.xsd"
              version="1.0">
...
        <user username="instalador" password="XXXXXXXX" roles="admin-gui,manager-gui"/>
</tomcat-users>

Una vez añadido el usuario administrador ya podemos utilizarlo para acceder a las zonas de la interfaz de Tomcat 9 que requieren autenticación de usuario.

Antes intentamos entrar en la sección «Server Status» sin éxito; sin embargo, si ahora introducimos el usuario y la contraseña de nuestro administrador accederemos a la página correspondiente:

como instalar apache tomcat 9 en centos 7

Instalar aplicaciones web desde archivos WAR

Si has creado o descargado una aplicación para tu servidor Tomcat 9 en CentOS 7 y está en formato .war, la puedes instalar desde el «Gestor de Aplicaciones Web«, que puedes abrir desde el enlace «Manager App» de la página de inicio de Tomcat 9. Para ello debes desplazarte a la sección «Desplegar» del gestor y seleccionar el archivo .war con el botón «Seleccionar archivo«:

instalar apache tomcat 9 en centos 7

Al pulsar el botón «Desplegar» el gestor de aplicaciones cargará y desplegará la aplicación, recargando la página del gestor. Si el proceso se realiza correctamente, la caja de mensajes mostrará un escueto «OK» y podremos ver la nueva aplicación disponible y desplegada en la lista de aplicaciones:

tomcat 9 para centos 7

Para comprobar el funcionamiento de la nueva aplicación que acabamos de desplegar desde el archivo WAR, bastará con pulsar sobre su enlace en la lista de aplicaciones del gestor:

como instalar y configurar tomcat 9 en centos 7

Para desinstalar una aplicación bastará con pulsar su correspondiente botón «Replegar» en el listado de aplicaciones del gestor. Tanto el archivo .war como el directorio de la aplicación desaparecerán de la carpeta webapps/ de Tomcat 9.

Cómo cambiar el puerto de conexión de Tomcat 9 en CentOS 7

El puerto en el que espera conexiones Tomcat 9 es el 8080 TCP, que tiene la particularidad de ser un puerto muy usado por diversos tipos de aplicaciones como, por ejemplo, servidores proxy y similares. En el caso de que otra aplicación esté usando ya este puerto sería interesante cambiar el puerto de conexión de Tomcat 9 en CentOS 7, para lo que editaremos el archivo server.xml:

~$ sudo nano /opt/tomcat/apache-tomcat/conf/server.xml

Buscamos la siguiente sección:

...
    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
...

Basta con cambiar el valor 8080 por cualquier otro que nos interese, por ejemplo 8585:

...
    <Connector port="8585" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
...

Una vez guardados los cambios, reiniciamos el servicio Tomcat 9:

~$ sudo systemctl restart tomcat

Si es necesario, tendrás que actualizar la configuración del firewall y, obviamente, utilizar el nuevo puerto en las conexiones a Tomcat 9 desde el navegador:

instalacion de tomcat en centos7

Conclusión

Ahora ya sabes cómo instalar Tomcat 9 en CentOS 7 y por qué es más interesante instalar la versión disponible en la web oficial que los paquetes disponibles en los repositorios de la distribución. El proceso es más laborioso, pero el resultado merece la pena y podrás desplegar aplicaciones Java con las últimas características que permite Apache Tomcat 9.

¡Apoya este sitio!

Si tenías problemas con la instalación de Tomcat 9 en CentOS 7 y gracias a esta guía los has superado, quizás quieras agradecérnoslo. Cualquier mínima aportación contribuye mucho al mantenimiento de este sitio y la creación de más y mejore guías y tutoriales.

Puedes ayudarnos dejando una propina a partir de 1 $ con PayPal:

O, si te sientes especialemente agradecido, puedes invitarnos a un cappuccino:

¡Gracias!

Valora esta entrada

5/5 - (7 votos)

11 comentarios en «Cómo instalar Tomcat 9 en CentOS 7»

  1. Buenas noches, muy buen tutorial, pero tengo una pequeña duda y espero que me pudieras ayudar.
    Quisiera acceder al Tomcat Manager para desplegar mi aplicación en web, desde mi servidor VPS.
    O la posibilidad de contratar una asesoría.

    Responder
    • ¡Hola, Nelson! El proceso de desplegar una aplicación en Tomcat está descrito en el tutorial, por lo que sólo basta con seguir los mismos pasos en tu VPS CentOS.

      Responder

Deja un comentario