Cómo instalar Tomcat 9 en CentOS 8

En este artículo explicamos cómo instalar Tomcat 9 en CentOS 8 / CentOS Stream 8 paso a paso, de modo que al final del tutorial tendrás funcionando este servidor de aplicaciones Java en tu servidor o VPS CentOS.

Antes de instalar Tomcat 9 en CentOS 8

Si quieres seguir los pasos de esta guía de instalación de Tomcat 9 en CentOS 8 / CentOS Stream 8 debes partir de los siguientes requisitos básicos:

  • Una máquina CentOS 8 / CentOS Stream 8 actualizada.
  • Entorno de Java JRE o JDK.
  • Acceso a consola con root o un usuario con privilegios de sudo.
  • Conexión a Internet.

Si todavía no tienes el entorno necesario, puede interesarte consultar previamente la guía de instalación de Java en CentOS 8.

Además, necesitaremos algunas utilidades del sistema, que podemos obtener desde los repositorios de CentOS 8, por lo que actualizaremos la información de estos repositorios:

~$ sudo yum update

E instalaremos los paquetes necesarios:

~$ sudo yum install -y tar wget

Cómo descargar Tomcat 9 para CentOS 8

Ya que no existen paquetes en los repositorios de la distribución, debemos descargar Tomcat 9 para CentOS 8 desde la propia página web del proyecto. En la sección de descargas de Tomcat 9 encontraremos los paquetes correspondientes a los binarios de la última versión estable en distintos formatos y para distintos sistemas:

como descargar tomcat 9 para centos 8 / centos stream 8

Para este tutorial descargaremos el paquete en formato .tar.gz, de la sección «Core» copiando el enlace y realizando la descarga desde consola mediante el comando wget:

~$ wget 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 8

Como puedes imaginar, instalar Tomcat 9 en CentOS 8 no consiste en descomprimir un simple paquete, ya que habrá que realizar algunas tareas adicionales más. Vamos a describir estas tareas en los siguientes pasos.

Usuario tomcat

Puesto que se trata de un servicio, Tomcat 9 necesita correr bajo un nuevo usuario de CentOS 8 que crearemos especialmente para la ocasión:

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

Archivos de Tomcat 9

Descomprimimos el paquete que acabamos de descargar en el directorio que establezcamos para la instalación, por ejemplo en /opt/tomcat/:

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

Dentro de /opt/tomcat/ se crea un nuevo subdirectorio en cuyo nombre aparece la versión de Tomcat 9 que estamos instalando en CentOS 8, por lo que es interesante crear un enlace simbólico sin números de versión:

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

Y concederemos la propiedad de este directorio y su contenido al nuevo usuario tomcat:

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

Cómo crear el servicio Tomcat 9 en CentOS 8

Una vez acomodada la aplicación en su directorio de instalación, tenemos que crear el servicio de Tomcat 9 en CentOS 8 para poder administrarlo igual que el resto de servicios del sistema. Para ello creamos su archivo de configuración correspondiente:

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

Con el siguiente contenido:

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

[Service]
Type=forking
User=tomcat
Group=tomcat
Environment="JAVA_HOME=/etc/alternatives/jre"
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

Guardamos los cambios y cerramos el archivo. Si es la primera versión de este archivo no será necesario, pero si tienes que hacer algún cambio, corrección, etc. es importante refrescar los servicios del sistema para que systemd aplique los cambios de este servicio tomcat.service:

~$ sudo systemctl daemon-reload

Ahora ya podemos iniciar Tomcat 9, mediante systemctl:

~$ sudo systemctl start tomcat

Podemos comprobar el estado el servicio en cualquier momento con el comando systemctl status tomcat:

como instalar tomcat 9 en centos 8 / centos stream 8

En el caso de que necesites tener el servicio Tomcat 9 siempre disponible, es interesante habilitarlo para que inicie automáticamente junto a CentOS 8, cosa que haremos también con systemctl:

~$ sudo systemctl enable tomcat

Cómo configurar el firewall de CentOS 8 para Tomcat 9

Ya que el firewall de CentOS 8 está activado por defecto, si queremos usar el servicio Tomcat 9 en red debemos añadir necesariamente una excepción. Tomcat 9 escucha peticiones HTTP estándar en el puerto 8080 TCP, así que podemos añadir la siguiente regla:

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

Si tienes planeado usar conexiones seguras HTTPS, el puerto por defecto de Tomcat 9 suele ser el 8443 TCP, así que deberías añadir la regla adecuada:

~$ sudo firewall-cmd --permanent --add-port=8443/tcp

Obviamente si modificas la configuración de Tomcat 9 para trabajar con otros puertos distintos, deberás indicarlo en las reglas del firewall.

Es necesario recargar la configuración del firewall para aplicar los cambios:

~$ sudo firewall-cmd --reload

Cómo acceder a Tomcat 9

Para acceder al servicio Tomcat 9 funcionando en CentOS 8 desde un navegador, usaremos como URL la dirección IP o dominio del servidor añadiendo el puerto 8080.

Por ejemplo, en este tutorial trabajamos sobre un servidor cuyo dominio es centos8.local.lan, así que podemos usar http://centos8.local.lan:8080/ como URL:

instalar tomcat 9 en centos 8 / centos stream 8

Cómo configurar Tomcat 9 en CentOS 8

Vamos a configurar algunos ajustes de Tomcat 9 para poder trabajar con las aplicaciones incluidas y poder instalar otras nuevas.

Cómo cambiar el puerto de conexión de Tomcat 9

El puerto en el que Tomcat 9 espera recibir conexiones es por defecto el 8080 TCP, un puerto que es bastante usado por diversas aplicaciones, como por ejemplo servidores proxy. Podría darse el caso de que quieras cambiar el puerto de conexión de Tomcat 9 en CentOS 8 porque otra aplicación lo está usando o por cualquier otro motivo. Para hacer esto, editaremos el archivo server.xml de Tomcat 9:

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

Y buscaremos el siguiente fragmento:

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

Cambiaremos el valor 8080 por el que nos interese, por ejemplo 9090:

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

Una vez guardados los cambios habrá que reiniciar el servicio tomcat. Si es necesario, recuerda reconfigurar el firewall con el nuevo puerto.

Configurar acceso seguro SSL/HTTPS para Tomcat 9 en CentOS 8

Si quieres que las conexiones de Tomcat 9 en CentOS 8 sean seguras y estén cifradas mediante SSL, algo que es importante especialmente en conexiones a través de Internet, es necesario realizar algunos ajustes.

Para cifrar las conexiones de servidores Tomcat 9 que sirvan contenido desde Internet se necesitan certificados SSL firmados por autoridades certificadoras que podemos obtener mediante servicios profesionales como Namecheap:

SSL Certificate for just $8.88 with Namecheap

Crearemos un almacén de claves para guardar la clave de cifrado de la conexión:

~$ sudo mkdir /etc/keys

Creamos la clave de cifrado con el comando keytool, indicando un alias para poder referirnos a ella y la ruta del almacén donde queremos guardarla:

$ sudo keytool -genkey -alias tomcat9 -keyalg RSA -keystore /etc/keys/tomcat9.jks

Este comando es interactivo y nos permitirá crear una clave para el certificado e introducir información pública identificativa de nuestro servicio Tomcat 9:

Introduzca la contraseña del almacén de claves:
Volver a escribir la contraseña nueva:
¿Cuáles son su nombre y su apellido?
  [Unknown]: centos8.local.lan
¿Cuál es el nombre de su unidad de organización?
  [Unknown]:
¿Cuál es el nombre de su organización?
  [Unknown]:
¿Cuál es el nombre de su ciudad o localidad?
  [Unknown]:
¿Cuál es el nombre de su estado o provincia?
  [Unknown]:
¿Cuál es el código de país de dos letras de la unidad?
  [Unknown]:  ES
¿Es correcto CN=Unknown, OU=Unknown, O=centos8.local.lan, L=Unknown, ST=Unknown, C=ES?
  [no]:  si

Es muy importante que a la primera pregunta sobre estos datos públicos, normalmente etiquetada como «¿Cuáles son su nombre y su apellido?» respondamos con el dominio para el que estamos creando el certificado (el dominio con el que accederán al sitio Tomcat 9 los visitantes y usuarios). En el ejemplo de este tutorial la respuesta sería centos8.local.lan.

La clave de cifrado se guardará en la ruta indicada en el argumento -keystore del comando keytool.

Para solicitar el certificado firmado a Namecheap o el servicio profesional de que se trate, usaremos de nuevo keytool para generar un archivo de solicitud de firma de certificado, o archivo CSR, a partir de la clave de cifrado que acabamos de crear:

~$ keytool -certreq -keystore /etc/keys/tomcat9.jks -alias tomcat9 -file centos8.local.lan.csr

Observa que como parámetros indicamos el almacén de claves, el alias de la clave y el nombre el archivo CSR que queremos generar.

Se pedirá la clave de acceso al almacén de claves y se creará el archivo .csr en la ruta indicada (en este ejemplo, en el directorio de trabajo).

Puedes consultar el contenido del archivo .csr con cat, ya que se trata de un archivo de texto plano:

~$ cat centos8.local.lan.csr
-----BEGIN NEW CERTIFICATE REQUEST-----
MIIC6zCCAdMCAQAwdjEQMA4GA1UEBhMHVW5rbm93bjEQMA4GA1UECBMHVW5rbm93
...
VGHQ0esY2bITbUrOPpzMJ+68Nj4RzxIMB3ikUuaW9w==
-----END NEW CERTIFICATE REQUEST-----

De hecho, normalmente los servicios de certificación lo que necesitan es el contenido de dicho archivo (incluyendo las líneas BEGIN y END) que debe ser pegado en una caja de texto del formulario de solicitud.

Servicios locales o en pruebas

Si estás trabajando en un servicio en pruebas o un servicio local seguramente no necesitarás un certificado firmado, así que puedes ahorrarte el paso (y el dinero). Podrás usar el certificado autofirmado que se genera en la creación de la clave.

Configuración

Con la clave de cifrado y el certificado instalados, editamos el archivo de configuración del servidor Tomcat 9, server.xml:

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

Dentro del bloque Service denominado «Catalina«, y justo a continuación del bloque Connector principal, añadimos un nuevo bloque Connector:

...
  <Service name="Catalina">
...
    <Connector port="8443" maxThreads="150" scheme="https" secure="true"
               SSLEnabled="true" keystoreFile="/etc/keys/tomcat9.jks"
               keystorePass="XXXXXXXX"
               clientAuth="false" keyAlias="tomcat9" sslProtocol="TLS" />
...

Guardamos los cambios y reiniciamos el servicio:

~$ sudo systemctl restart tomcat

Ahora para acceder a Tomcat 9 con conexiones seguras usaremos el protocolo HTTPS, en lugar de HTTP, y especificaremos el puerto seguro (8443 por defecto) en lugar del puerto estándar (8080 por defecto).

Por ejemplo, la máquina CentOS 8 de este ejemplo es accesible en el subdominio centos8.local.lan, por lo que emplearemos https://centos8.local.lan:8443 como URL.

Tras los correspondientes avisos del navegador en caso de usar certificados autofirmados podremos acceder de forma segura a Tomcat 9 en CentOS 8:

configurar ssl en tomcat 9 para centos 8 / centos 8 stream

Permitir el acceso a las aplicaciones administrativs de Tomcat 9

Aunque no hay mayor problema para acceder a la página principal del servicio, si intentamos acceder desde la red a distintas aplicaciones como las indicadas en los botones «Server Status«, «Manager App» o «Host Manager» encontraremos que no es posible:

instalacion de tomcat 9 en centos 8 / centos stream 8

Esto se debe a que Tomcat 9 usa una configuración de acceso individualizada por aplicación y concretamente para acceder a cualquiera de estas aplicaciones debemos configurar su propio acceso en su correspondiente archivo context.xml. Por ejemplo, para la aplicación Manager lo haríamos así:

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

Buscaremos la directiva Valve dentro del bloque Context:

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

Y la encerramos en un bloque de comentarios XML, para que no tenga efecto:

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

Guardamos los cambios y cerramos el archivo.

Deberíamos hacer otro tanto para la aplicació Host-Manager:

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

Ahora al cargar de nuevo «Server Status» (aplicación manager), veremos que funciona, pero nos pide iniciar sesión:

como configurar tomcat 9 en centos 8 / centos stream 8

Vamos a ver qué podemos hacer para acceder a la aplicación.

Crear usuarios de Tomcat 9 en CentOS 8

Necesitamos crear usuarios de Tomcat 9 para que puedan acceder a las aplicaciones que lo requieren. La configuración de usuarios de Tomcat 9 en CentOS 8 se hace en el archivo tomcat-users.xml:

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

El funcionamiento de los usuarios en Tomcat 9 es sencillo. Las aplicaciones requieren que los usuarios tengan ciertos roles para poder acceder, así que tendremos que definir los usuarios indicando qué roles pueden desempeñar (en este caso los roles necesarios para acceder a las aplicaciones administrativas).

En el archivo tomcat-users.xml especificaremos esta definición dentro del bloque tomcat-users:

...
        <user username="instalador" password="XXXXXXXX" roles="admin-gui,manager-gui"/>
</tomcat-users>

Hemos creado un usuario con contraseña y roles admin-gui y manager-gui, que son los que necesita un usuario para poder acceder a las aplicaciones Manager y Host-Manager.

Si el usuario no funciona al primer intento, recarga la aplicación o reinicia Tomcat 9 para que tenga en cuenta los nuevos roles y usuarios.

Al introducir las credenciales necesarias, ya podemos acceder a la aplicación «Server Status«:

tomcat 9 en centos 8 / centos stream 8

Igualmente, es posible acceder a la aplicación «Manager App«:

tomcat 9 para centos 8 / centos stream 8

Y también a «Host Manager«, el gestor de máquinas virtuales de Tomcat 9 (habrá que identificarse de nuevo, al ser una aplicación distinta):

tomcat 9 en centos 8 / centos stream 8

Cómo desplegar aplicaciones Java en Tomcat 9

Si ya tienes aplicaciones Java en formato .war listas para desplegar, accede a la aplicación «Manager App«, o gestor de aplicaciones web de Tomcat 9, y desplázate a la sección «Desplegar«, en la que podrás seleccionar el archivo .war usando el botón «Seleccionar archivo«:

tomcat 9 para centos 8 / centos stream 8

Al pulsar el botón «Desplegar» se cargará la página y si todo ha ido bien en la sección «Mensaje» obtendremos un escueto «OK«. Además, en la sección «Aplicaciones» veremos la nueva aplicación junto con algunos detalles y los controles para administrarla:

Siguiendo el enlace con el nombre de la nueva aplicación, esta se abrirá y podremos comprobar que funciona:

Cómo cambiar el límite de tamaño de archivo en Tomcat 9

Si vas a desplegar aplicaciones a partir de archivos WAR de gran tamaño puede que el límite por defecto de 50 MB se quede corto. Para cambiar el límite de tamaño de archivo en Tomcat 9 tendremos que editar el archivo de configuración web.xml de la aplicación manager:

~$ sudo nano /opt/tomcat/apache-tomcat/webapps/manager/WEB-INF/web.xml

Buscaremos el bloque multipart-config:

...
    <multipart-config>
      <!-- 50MB max -->
      <max-file-size>52428800</max-file-size>
      <max-request-size>52428800</max-request-size>
      <file-size-threshold>0</file-size-threshold>
    </multipart-config>
...

Podemos ver que por defecto se establece un tamaño máximo de 50 MB (expresado en bytes), así que calcularemos el nuevo tamaño en bytes y lo cambiaremos. Por ejemplo, para 150 MB:

...
    <multipart-config>
      <!-- 150MB max -->
      <max-file-size>157286400</max-file-size>
      <max-request-size>157286400</max-request-size>
      <file-size-threshold>0</file-size-threshold>
    </multipart-config>
...

Una vez guardados los cambios, el nuevo límite máximo para archivos WAR estará disponible automáticamente, sin necesidad de reiniciar Tomcat 9.

Conclusión

Así de fácil es instalar Tomcat 9 en CentOS 8 / CentOS Stream 8, en unos instantes tendrás instalado y funcionando este servicio, listo para ofrecer servlets de Java, tanto de terceros como de desarrollo propio.

Si tienes dudas, preguntas, comentarios, etc. puedes dejar un comentario.

¡Apoya este sitio!

¿Ya estás listo para desplegar Java servlets gracias a esta guía de instalación de Tomcat 9 en CentOS 8? Si es así y te apetece agradecérmelo, puedes hacerlo dejando una propina de 1 $ desde PayPal:

O, si te sientes especialmente agradecido, puedes invitarme a un cappuccino:

¡Gracias!

Valora esta entrada

5/5 - (9 votos)

13 comentarios en «Cómo instalar Tomcat 9 en CentOS 8»

    • Buenos días,

      Muchas gracias por el aporte, pero ¿cómo sería para un Red Hat 8.2 con Apache Tomcat 9.0.52 hacer un upgrade a la versión 9.0.62?

      Saludos.

      Responder
      • Hola, Loren. A nivel instalación el proceso es idéntico tanto en CentOS 8 como en el sistema que indicas. En cuanto a la actualización lo que yo haría sería:

        • Detener el servicio
        • Instalar en un subdirectorio nuevo (/opt/tomcat/apache-tomcat-9.0.62 en tu caso)
        • Actualizar el enlace simbólico /opt/tomcat/apache-tomcat
        • Copiar configuraciones y aplicaciones de la versión anterior en los nuevos subdirectorios correspondientes
        • Cruzar los dedos y arrancar de nuevo el servicio

        En principio debería funcionar sin mayor problema.

        Responder
    • Gracias a ti, Rodolfo. Hacemos todo lo posible por explicarlo bien pero, sobre todo, para que nuestros tutoriales funcionen en los sistemas de nuestros lectores.

      Responder

Deja un comentario