Saltar al contenido principal

7. Servidor de aplicaciones Tomcat

Ya tenemos Apache funcionando como servidor web. Ahora vamos a instalar Apache Tomcat, que utilizaremos como entorno de ejecución para aplicaciones web Java basadas en Jakarta Servlet y Jakarta Pages (JSP).

Tomcat puede recibir peticiones HTTP directamente y, de forma predeterminada, utiliza el puerto 8080.

Idea clave

En este apartado seguiremos este recorrido:

Java → instalar Tomcat → comprobar el servicio → acceder por el puerto 8080 → instalar Manager → configurar un usuario → acceder desde el anfitrión

7.1. Preparar Java​

Tomcat está desarrollado en Java y necesita una máquina virtual Java para ejecutarse.

En Debian 13 podemos utilizar el entorno Java proporcionado por los repositorios oficiales. Para un servidor no necesitamos un entorno gráfico de Java, por lo que podemos instalar el paquete:

sudo apt update
sudo apt install default-jre-headless
en este ejemplo

default-jre-headless instala el entorno de ejecución Java recomendado por Debian sin componentes gráficos innecesarios para un servidor.

En Debian 13, este metapaquete utiliza actualmente OpenJDK 21. Si Debian actualiza su versión Java predeterminada en el futuro, APT se encargará de instalar la versión correspondiente al sistema.

Podemos consultar el paquete oficial de Debian aquí:

Paquete default-jre de Debian estable.

Comprobamos la versión instalada:

java -version
Comprobación de la versión de Java instalada en Debian
Perspectiva actual

En materiales antiguos podemos encontrar instrucciones para instalar manualmente un JDK, configurar JAVA_HOME en /etc/profile y descargar Tomcat como un archivo .tar.gz.

Ese procedimiento sigue siendo válido en determinados escenarios, pero no es necesario para nuestro entorno.

En Debian instalaremos Java y Tomcat mediante APT, lo que facilita la actualización de paquetes, integra Tomcat con systemd y utiliza la estructura de directorios propia de Debian.

7.2. Instalar Tomcat​

Debian 13 incluye Tomcat 10.1.x en sus repositorios oficiales.

Podemos consultar el paquete disponible en:

Paquete tomcat10 de Debian estable.

Actualizamos la información de paquetes:

sudo apt update

Podemos buscar los paquetes relacionados:

apt search tomcat10

Instalamos el servicio:

sudo apt install tomcat10

Al instalarlo mediante APT, Debian crea la estructura necesaria y registra Tomcat como un servicio del sistema.

Comprobamos la versión concreta instalada:

dpkg -s tomcat10 | grep '^Version:'
en este ejemplo

Trabajaremos con la rama Tomcat 10.1, pero el número completo puede cambiar cuando Debian publique actualizaciones de seguridad o mantenimiento.

Por eso es preferible comprobar la versión instalada en nuestro sistema en lugar de fijar un número de revisión en los apuntes.

Tomcat 10 y Jakarta​

Tomcat 10 utiliza las APIs Jakarta (jakarta.*).

Las aplicaciones antiguas desarrolladas para Tomcat 9 o versiones anteriores pueden utilizar paquetes javax.* y necesitar adaptación antes de ejecutarse en Tomcat 10.

En esta unidad no necesitamos programar Servlets. Nos interesa comprender que Tomcat proporciona el contenedor donde se ejecutan las aplicaciones web Java.

7.3. Administrar y comprobar Tomcat​

Al instalar Tomcat desde los repositorios de Debian, el servicio se denomina:

tomcat10

Comprobar el estado​

Ejecutamos:

sudo systemctl status tomcat10

Si Tomcat está funcionando veremos:

Active: active (running)
Estado del servicio Tomcat en Debian

Operaciones básicas​

Utilizamos los mismos comandos de systemd que ya conocemos:

AcciónComando
Consultar el estado.sudo systemctl status tomcat10
Iniciar Tomcat.sudo systemctl start tomcat10
Detener Tomcat.sudo systemctl stop tomcat10
Reiniciar Tomcat.sudo systemctl restart tomcat10
Cambio respecto a instalaciones manuales

En una instalación manual de Tomcat encontramos scripts como catalina.sh o startup.sh.

catalina.sh es uno de los scripts tradicionales de Tomcat para iniciar, detener y administrar la ejecución del contenedor.

En nuestro caso no lo utilizaremos para administrar el servicio, porque la instalación de Debian integra Tomcat con systemd y trabajaremos mediante systemctl.

Comprobar el puerto 8080​

Tomcat utiliza de forma predeterminada el puerto 8080 para recibir peticiones HTTP.

Podemos comprobar que existe un proceso escuchando en ese puerto:

sudo ss -ltnp | grep ':8080'
en este ejemplo

Apache utiliza normalmente el puerto 80 para HTTP.

Tomcat utiliza de forma predeterminada 8080, por lo que ambos servicios pueden estar funcionando simultáneamente en la misma máquina sin utilizar el mismo puerto.

Apache y Tomcat ejecutándose en la misma máquina utilizando los puertos 80 y 8080

7.4. Acceder a Tomcat​

Desde la máquina Debian​

Podemos utilizar Lynx:

lynx http://localhost:8080

Si Tomcat está funcionando veremos la página inicial proporcionada por la instalación de Debian.

Acceso a Tomcat desde Lynx mediante el puerto 8080

Desde la máquina anfitriona​

Consultamos la dirección IP de Debian:

ip -br a

Desde el navegador del anfitrión escribimos:

http://IP_DE_DEBIAN:8080

Por ejemplo:

http://192.168.1.40:8080

Debemos utilizar la dirección IP real de nuestra máquina.

Acceso a Tomcat desde la máquina anfitriona mediante la IP de Debian y el puerto 8080
Relación entre URL y servicio

Si Apache y Tomcat están activos en la misma máquina:

http://IP_DE_DEBIAN

accede normalmente a Apache por el puerto 80.

Mientras que:

http://IP_DE_DEBIAN:8080

accede a Tomcat por el puerto 8080.

Dónde se configura el puerto​

En la instalación de Debian, la configuración principal de Tomcat se encuentra en:

/etc/tomcat10/

El puerto HTTP puede consultarse en:

/etc/tomcat10/server.xml

Por ejemplo:

sudo nano /etc/tomcat10/server.xml

En este archivo encontraremos un elemento Connector asociado al puerto 8080.

No cambies el puerto de momento

En esta unidad utilizaremos el puerto predeterminado 8080.

La finalidad ahora es identificar dónde se configura, no modificarlo.

7.5. Configurar Tomcat Manager​

Tomcat dispone de una aplicación web denominada Manager que permite administrar aplicaciones desplegadas en el servidor.

La instalación básica de tomcat10 en Debian no incluye estas interfaces administrativas. Las añadimos mediante:

sudo apt install tomcat10-admin

Podemos consultar el paquete en:

Paquete tomcat10-admin de Debian estable.

¿Necesitamos tomcat10-user?

No para nuestro caso.

El paquete tomcat10-user se utiliza para crear instancias de Tomcat ejecutadas por usuarios individuales.

Nosotros estamos utilizando la instalación global de Tomcat administrada como servicio mediante systemctl, por lo que instalaremos tomcat10 y tomcat10-admin.

Crear un usuario para Manager​

Por seguridad, Tomcat no crea un usuario administrativo habilitado por defecto.

Editamos:

sudo nano /etc/tomcat10/tomcat-users.xml

Antes de la etiqueta final </tomcat-users> añadimos un rol y un usuario:

<role rolename="manager-gui"/>
<user username="gestor-daw"
password="CAMBIA_ESTA_CONTRASENA"
roles="manager-gui"/>
en este ejemplo

El rol manager-gui permite utilizar la interfaz gráfica de Tomcat Manager desde un navegador.

Debemos sustituir CAMBIA_ESTA_CONTRASENA por una contraseña propia y suficientemente robusta.

No debemos utilizar ejemplos como admin/admin ni publicar la contraseña real en capturas de pantalla o entregas.

Permitir el acceso desde la máquina anfitriona​

Existe una segunda medida de seguridad importante.

La aplicación Manager instalada en Debian solo permite inicialmente conexiones desde la propia máquina (localhost).

Esto significa que, aunque el usuario y la contraseña sean correctos, el navegador de nuestro equipo anfitrión no podrá acceder todavía.

La restricción se encuentra en:

/etc/tomcat10/Catalina/localhost/manager.xml

Abrimos el archivo:

sudo nano /etc/tomcat10/Catalina/localhost/manager.xml

Encontraremos una configuración de RemoteCIDRValve que permite únicamente direcciones locales:

Buscamos si existe una configuración RemoteCIDRValve. Dependiendo de la versión del paquete y de la configuración previa del sistema, puede aparecer ya creada o puede ser necesario añadirla.

Para la práctica añadiremos únicamente la dirección IP de nuestra máquina anfitriona.

Si, por ejemplo, el anfitrión tiene la IP 192.168.1.25, quedaría:

<Context path="/manager"
docBase="/usr/share/tomcat10-admin/manager"
antiResourceLocking="false" privileged="true">
<Valve className="org.apache.catalina.valves.RemoteCIDRValve"
allow="127.0.0.0/8,::1/128,192.168.1.25/32" />
</Context>
en este ejemplo

192.168.1.25/32 representa una única dirección IPv4.

Es preferible autorizar solo nuestro equipo anfitrión en lugar de abrir el acceso a toda la red local.

Debemos sustituir la dirección del ejemplo por la IP real de nuestro anfitrión.

Manager es una interfaz administrativa

No debemos eliminar sin más las restricciones de acceso ni dejar Tomcat Manager expuesto a Internet.

En nuestro laboratorio permitimos el acceso desde un equipo concreto de la red local porque necesitamos administrarlo desde la máquina anfitriona.

En un servidor real, el acceso a las interfaces de administración debe protegerse de forma mucho más estricta.

Reiniciamos Tomcat para aplicar los cambios:

sudo systemctl restart tomcat10

Comprobamos:

sudo systemctl status tomcat10

Acceder a Manager​

Desde el navegador del anfitrión escribimos:

http://IP_DE_DEBIAN:8080/manager/html

Tomcat solicitará las credenciales que hemos configurado.

Interfaz Tomcat Manager accesible desde la máquina anfitriona
Cambio importante respecto a documentación antigua

En algunos manuales aparece:

http://localhost:8080/manager

La interfaz HTML de administración se encuentra actualmente en:

/manager/html

Además, las versiones actuales de Tomcat restringen el acceso remoto a Manager de forma predeterminada.

Por eso no basta con crear un usuario: también debemos mantener y ajustar correctamente la restricción por dirección IP.

7.6. Detener Tomcat y comprobar el resultado​

Detenemos el servicio:

sudo systemctl stop tomcat10

Intentamos de nuevo:

http://IP_DE_DEBIAN:8080

La conexión debería fallar porque ya no existe un servicio Tomcat atendiendo el puerto 8080.

Podemos comprobarlo también con:

sudo ss -ltnp | grep ':8080'

Si Tomcat está detenido, no debería aparecer escuchando en ese puerto.

Volvemos a iniciarlo:

sudo systemctl start tomcat10
Antes de continuar

Comprueba que puedes realizar estas operaciones:

  1. Comprobar la versión de Java.
  2. Instalar Tomcat mediante APT.
  3. Consultar, iniciar, detener y reiniciar tomcat10.
  4. Identificar el puerto 8080.
  5. Acceder a Tomcat desde Debian.
  6. Acceder desde la máquina anfitriona.
  7. Instalar tomcat10-admin.
  8. Crear un usuario con el rol manager-gui.
  9. Permitir el acceso a Manager únicamente desde el anfitrión.
  10. Acceder a /manager/html.

7.7. Para saber más​

Para saber más

Si quieres ampliar los contenidos de este apartado, puedes consultar:

Estos recursos son complementarios y no es necesario estudiarlos en profundidad para seguir la unidad.