Cómo instalar Tomcat 10 en CentOS 8 / CentOS Stream 8

En esta ocasión vamos a ver cómo instalar Tomcat 10 en CentOS 8 / CentOS Stream 8 paso a paso, de tal manera que puedas desplegar aplicaciones Java o servlets basados en Yakarta EE 9, tanto de terceros como tus propios desarrollos, sobre tu servidor o VPS CentOS.

Antes de instalar Tomcat 10 en CentOS 8

Si quieres seguir los pasos de esta guía de instalación de Tomcat 10 en CentOS 8 / CentOS Stream 8 será necesario partir del siguiente escenario:

  • Un sistema CentOS 8 / CentOS Stream 8 actualizado.
  • El entorno de ejecución de Java, o JRE.
  • Acceso a línea de comandos con un usuario con permisos de sudo.
  • Conexión a Internet.

En caso de no disponer aún del entorno necesario puede ser útil consultar previamente nuestra guía de instalación de Java OpenJDK en CentOS 8.

También necesitaremos algunas herramientas que podremos obtener desde los repositorios del sistema, por lo que los actualizamos:

~$ sudo yum update

E instalamos dichas herramientas:

~$ sudo yum install -y tar wget

Cómo descargar Tomcat 10 para CentOS 8

Vamos a descargar Tomcat 10 para CentOS 8 desde la página de descargas del sitio oficial, donde encontraremos la última versión estable:

como descargar tomcat 10 para centos 8 / centos stream 8

Tenemos varias opciones de descarga, siendo la que nos interesa en este caso el paquete .tar.gz de la sección «Core«.

Podemos realizar la descarga desde el navegador, pero si trabajamos remotamente desde consola podemos descargar el paquete utilizando alguna herramienta como wget:

~$ wget https://downloads.apache.org/tomcat/tomcat-10/v10.1.1/bin/apache-tomcat-10.1.1.tar.gz

Cómo instalar Tomcat 10 en CentOS 8

A continuación describimos los pasos para instalar Tomcat 10 en CentOS 8 / CentOS Stream 8, deteniéndonos en los detalles necesarios para que todo funcione a la primera.

Instalación de la aplicación

Creamos el usuario de CentOS 8 con el que correrá el servicio:

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

El directorio de usuario será la ruta donde instalemos Tomcat 10, es decir, donde descomprimiremos el paquete que acabamos de descargar:

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

Se crea un nuevo subdirectorio en cuyo nombre aparece el nombre de versión, por lo que puede ser buena idea crear un enlace simbólico sin números, para facilitar la instalación, configuración y mantenimiento:

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

Como Tomcat 10 necesita escribir en su directorio de instalación, concedemos la propiedad del mismo y de su contenido al usuario de CentOS 8 con el que correrá el servicio:

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

Configuración del servicio Tomcat 10

Para que Tomcat 10 pueda trabajar como un servicio más de CentOS 8 debemos crear un archivo de configuración de Systemd:

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

El contenido será similar al siguiente:

[Unit]
Description=Tomcat 10.1 servlet container for CentOS 8
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

Observa que indicamos que el servicio debe correr con el usuario y grupo de CentOS 8 que creamos anteriormente.

Una vez guardado este archivo, inciamos el servicio por primera vez:

~$ sudo systemctl start tomcat10

Y si necesitamos que Tomcat 10 inicie con cada arranque de CentOS 8, habilitaremos el servicio:

~$ sudo systemctl enable tomcat10

Podemos comprobar fácilmente el estado del servicio también con el comando systemctl:

~$ systemctl status tomcat10

como instalar tomcat 10 en centos 8 / centos stream 8

Configuración del firewall

Si el firewall de CentOS 8 está activado, para poder acceder a Tomcat 10 desde red habrá que añadir la regla correspondiente, que incluirá el puerto 8080 para las conexiones estándar y el 8443 si deseamos conexiones seguras:

~$ sudo firewall-cmd --permanent --add-port={8080/tcp,8443/tcp}

Aplicamos los nuevos ajustes recargando la configuración del firewall:

~$ sudo firewall-cmd --reload

Acceder a Tomcat 10 en CentOS 8

Para acceder a Tomcat 10 en CentOS 8 desde un navegador indicaremos la dirección del servidor (IP, dominio, nombre DNS, localhost si conectamos localmente, etc.) indicando el puerto 8080 (inicialmente no están disponibles las conexiones seguras en el puerto 8443).

Por ejemplo, la máquina CentOS 8 sobre la que hemos desarrollado este tutorial es accesible en el subdominio centos8.local.lan, así que usaremos http://centos8.local.lan:8080 como URL.

instalar tomcat 10 en centos 8 / centos stream 8

El servicio funciona correctamente, pero aún debemos realizar algunos ajustes para poder utilizarlo a fondo.

Cómo configurar Tomcat 10 en CentOS 8

Seguridad SSL

Si deseas ofrecer conexiones seguras SSL a través del protocolo HTTPS para tus usuarios será necesario crear un archivo de clave para cifrar dichas conexiones.

Creamos un directorio donde guardaremos el almacén de claves:

~$ sudo mkdir /etc/keys

Y creamos la clave privada indicando su alias y el almacén de claves (ubicado en la ruta creada en el paso anterior):

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

Este comando es interactivo y solicitará la creación de una contraseña para acceder al almacén.

Además, solicitará información pública para incorporar al certificado, siendo la primera pregunta la más importante, puesto que debemos indicar el nombre DNS o dominio que se utilizará para acceder al servidor Tomcat 10:

...
¿Cuáles son su nombre y su apellido?
  [Unknown]:  centos8.local.lan
...

Si se trata de un servidor en Internet necesitaremos además un certificado firmado por autoridades certificadoras, como los que ofrecen servicios profesionales como Namecheap.

SSL Certificate for just $8.88 with Namecheap

Normalmente para solicitar un certificado necesitaremos un archivo de solicitud de certificado o CSR que obtendremos desde la clave privada que hemos creado:

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

Se nos pedirá la contraseña del almacén de claves y se creará el archivo .csr que contiene la información que necesitan los servicios de certificación,como Namecheap, para crear el certificado firmado.

Si se trata de un servicio en pruebas o local puedes continuar sin certificados firmados.

En cualquier caso, para activar las conexiones seguras, tendremos que realizar algunos ajustes en el archivo de configuración server.xml:

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

Dentro del bloque Service añadimos un bloque Connector como el siguiente:

...
  <Service name="Catalina">
...
    <Connector port="8443"
        protocol="org.apache.coyote.http11.Http11NioProtocol"
        maxThreads="150"
        compression="on"
        scheme="https"
        SSLEnabled="true"
        secure="true"
        defaultSSLHostConfigName="centos8.local.lan">

      <UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" />
      <SSLHostConfig hostName="centos8.local.lan">
        <Certificate certificateKeystoreFile="/etc/keys/tomcat10.jks"
                type="RSA"
                certificateKeystorePassword="XXXXXXXX" />
      </SSLHostConfig>
    </Connector>
...

En este nuevo bloque indicamos el tipo de protocolo, almacén de claves y su contraseña, en su caso la ubicación del certificado firmado, etc.

Guardamos los cambios y reiniciamos el servicio:

~$ sudo systemctl restart tomcat10

Ahora podemos acceder de nuevo a Tomcat 10 en nuestro servidor CentOS 8 usando el protocolo seguro SSL, es decir, indicando el protocolo HTTPS y el puerto 8443.

Siguiendo con el ejemplo de este tutorial, ahora sería https://centos8.local.lan:8443 la nueva URL.

Si usamos certificados sin firmar, normalmente el navegador mostrará un aviso, ya que no puede comprobar la identidad y validez del certificado:

como instalar y configurar tomcat 10 en centos 8 / centos stream 8

También se mostrará alguna opción para continuar con la conexión que implique el entendimiento de los riesgos.

Finalmente, se mostrará la versión segura del servicio Tomcat 10 en el servidor CentOS 8:

como configurar tomcat 10 en centos 8 / centos stream 8

Acceso desde red a las aplicaciones administrativas

Desde la página principal del servicio Tomcat 10 se muestran enlaces a distintas aplicaciones preinstaladas. Algunas de ellas están listas para usar, como es el caso de la aplicación de documentación local (aplicación /docs):

documentacion local de tomcat 10 sobre centos 8 / centos stream 8

Pero las aplicaciones administrativas, accesibles en los enlaces «Server Status«, «Manager App» y «Host Manager» sólo son accesibles localmente. En caso de estar configurando Tomcat 10 en una máquina remota CentOS 8 será necesario configurar dicho acceso para estas aplicaciones a través de sus respectivos archivos context.xml.

En el caso de «Server Status» y «Manager App«, que en realidad son partes distintas de la misma aplicación (/manager), editamos su configuración:

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

Buscaremos la directiva Valve:

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

Y la desactivaremos mediante un bloque de comentarios XML:

...
<!--
  <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 la configuración queda aplicada.

Igual haremos con la aplicación «Host Manager«, que tiene su propio archivo context.xml:

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

Usuarios de Tomcat 10

Independientemente de si se trata de acceso local o desde red, las aplicaciones administrativas requieren acceso mediante usuario y contraseña, usuario que debe tener determinados permisos asignados mediante roles. Para crear este usuario editaremos el archivo tomcat-users.xml de Tomcat 10:

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

Dentro del bloque tomcat-users incluiremos la definición del usuario con su nombre, contraseña y roles asociados:

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

El nuevo usuario debe tener los roles admin-gui y manager-gui, que ya incorpora Tomcat 10 por defecto. Nada impide crear dos usuarios distintos, cada uno de ellos con un solo rol administrativo.

Acceso a las aplicaciones administrativas

Hechos los ajustes necesarios, podemos acceder por fin a las aplicaciones administrativas desde la página principal de Tomcat 10, de modo que se nos pedirá el usuario y la contraseña que hemos creado en el paso anterior:

acceder a tomcat 10 en centos 8 / centos stream 8

Una vez realizada la autenticación se mostrará la página de la aplicación, por ejemplo para «Server Status» o «Estado de Servidor«:

Si a continuación accedemos a «Manager App» o «Gestor de Aplicaciones Web de Tomcat» se abrirá directamente, porque el usuario ya está autenticado (es la misma aplicación):

Sin embargo, al acceder a «Host Manager» o «Gestor de Máquina Virtual de Tomcat» habrá que autenticarse de nuevo, aunque el usuario sea el mismo para todas las aplicaciones, porque se trata de una aplicación independiente de la anterior. Hecha la autenticación, se mostrará igualmente su página principal:

Cómo desplegar aplicaciones WAR en Tomcat 10 para CentOS 8

Si quieres desplegar alguna aplicación en formato WAR (archivos .war) sobre el servicio Tomcat 10 de tu máquina CentOS 8 habrá que visitar la sección «Manager App«, el gestor de aplicaciones, y buscar la sección «Desplegar«.

En «Archivo WAR a desplegar» podremos seleccionar el archivo .war en el sistema de archivos local mediante el control mostrado en el navegador:

como desplegar aplicaciones war en tomcat 10 sobre centos 8 / centos stream 8

Con el archivo .war seleccionado bastará utilizar el botón «Desplegar» y se cargará dicho archivo en el servidor.

En unos instantes aparecerá de nuevo la página del gestor de aplicaciones y, si todo ha ido bien, en la sección mensaje se mostrará «OK» y la aplicación aparecerá en la lista de aplicaciones:

como subir archivos war en tomcat 10 sobre centos 8 / centos stream 8

La aplicación dispondrá de sus propios controles para administrarla (parar, recargar, replegar, etc.).

Podemos acceder a la aplicación usando el enlace mostrado en la primera columna de la fila:

aplicaciones web para tomcat 10 en centos 8 / centos 8 stream

¡Así de fácil!

Conclusión

Ahora que sabes cómo instalar y configurar Tomcat 10 en CentOS 8 / CentOS Stream 8 ya puedes desplegar servlets y aplicaciones web realizadas en Java siguiendo el estándar Yakarta EE 9, tanto para proyectos locales como desde Internet usando tu servidor o VPS.

¡Apoya comoinstalar.me!

¿Ya puedes desplegar servlets desde tu propio sistema? Si es así y quieres agradecérnoslo, cualquier mínima contribución al mantenimiento de este sitio y la creación de nuevos tutoriales y guías es bienvenida.

Puedes ayudarnos dejando tan sólo 1 $ de propina desde PayPal:

O, si te sientes especialmente agradecido, puedes invitarnos a un café:

¡Gracias!

¿Dudas, preguntas, sugerencias?

Si te ha surgido alguna duda o pregunta siguiendo este tutorial, o tienes alguna sugerencia, corrección, etc. puedes dejar un comentario. Están moderados (ya sabes, el SPAM y tal) pero los revisamos diariamente.

Valora esta entrada

5/5 - (5 votos)

7 comentarios en «Cómo instalar Tomcat 10 en CentOS 8 / CentOS Stream 8»

Deja un comentario