Cómo instalar Apache Tomcat 10 con Nginx en Rocky Linux

Tomcat es un servidor web de código abierto para aplicaciones basadas en Java. Se utiliza para desplegar aplicaciones Java Servlet y JSP. Los servlets de Java son pequeños programas que definen cómo gestiona un servidor las peticiones y las respuestas. Tomcat actúa como una implementación de código abierto de las tecnologías Java Servlet, JavaServer Pages, Java Expression Language y Java WebSocket.

Existen varias versiones de Tomcat. En nuestro tutorial trataremos la instalación de Tomcat 10. Si quieres instalar Tomcat 9, las instrucciones serán las mismas. Si hay algún cambio, se especificará en el tutorial.

Para nuestro tutorial, instalaremos Tomcat 10 junto con el servidor Nginx para que actúe como proxy inverso y lo proteja mediante SSL. Existe una versión Tomcat 10.1.x que es la última versión alfa de Tomcat, pero no la instalaremos.

Requisitos previos

  • Un servidor que ejecute Rocky Linux 8.5
  • Un usuario no usuario con privilegios de superusuario.
  • Asegúrate de que todo está actualizado.
    $ sudo dnf update
    
  • Paquetes necesarios para la instalación.
    $ sudo dnf install wget tar
    

Paso 1 – Instalar Java

Tomcat 9 y 10 requieren Java 8 y posteriores. Instalaremos OpenJDK 11, la implementación de código abierto de la plataforma Java.

Ejecuta el siguiente comando para instalar OpenJDK.

$ sudo dnf install java-11-openjdk-devel

Verifica la instalación.

$ java -version
openjdk version "11.0.13" 2021-10-19 LTS
OpenJDK Runtime Environment 18.9 (build 11.0.13+8-LTS)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.13+8-LTS, mixed mode, sharing)

Paso 2 – Crear un usuario del sistema

Crearemos un nuevo usuario del sistema para minimizar cualquier riesgo de seguridad al ejecutar Tomcat como usuario root. Para el nuevo usuario, estableceremos /opt/tomcat como directorio de inicio.

Ejecuta el siguiente comando para crear un nuevo usuario de sistema para Tomcat.

$ sudo useradd -m -U -d /opt/tomcat -s /bin/false tomcat

Paso 3 – Descarga Tomcat

La última versión de Tomcat v10 puede descargarse desde su página de descargas. En el momento de escribir este tutorial, v10.0.14 es la última versión disponible. Comprueba la última versión antes de descargar Tomcat.

Utiliza wget para descargar Tomcat.

$ VERSION=10.0.14
$ wget https://dlcdn.apache.org/tomcat/tomcat-10/v${VERSION}/bin/apache-tomcat-${VERSION}.tar.gz

Extrae el archivo al directorio /opt/tomcat.

$ sudo tar -xf apache-tomcat-${VERSION}.tar.gz -C /opt/tomcat/

Crea un enlace simbólico a la última versión de Tomcat que apunte al directorio de instalación de Tomcat.

$ sudo ln -s /opt/tomcat/apache-tomcat-${VERSION} /opt/tomcat/latest

Cambia la propiedad del directorio al usuario creado anteriormente.

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

Paso 4 – Crear un Archivo de Unidad Systemd

El siguiente paso es crear un archivo de servicio para el servidor Tomcat, de forma que pueda iniciarse automáticamente.

Crea y abre el archivo /etc/systemd/system/tomcat.service para editarlo.

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

Pega el siguiente código.

[Unit]
Description=Apache Tomcat 10 Servlet container
Wants=network.target
After=network.target

[Service]
Type=forking

User=tomcat
Group=tomcat

Environment="JAVA_HOME=/usr/lib/jvm/jre"
Environment="JAVA_OPTS=-Djava.security.egd=file:///dev/urandom"

Environment="CATALINA_BASE=/opt/tomcat/latest"
Environment="CATALINA_HOME=/opt/tomcat/latest"
Environment="CATALINA_PID=/opt/tomcat/latest/temp/tomcat.pid"
Environment="CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC"

ExecStart=/opt/tomcat/latest/bin/startup.sh
ExecStop=/opt/tomcat/latest/bin/shutdown.sh
Restart=always

[Install]
WantedBy=multi-user.target

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te pida guardar.

Paso 5 – Iniciar y habilitar el servicio Tomcat

Recarga el demonio de servicio para habilitar el servicio Tomcat.

$ sudo systemctl daemon-reload

Habilita e Inicia el servicio Tomcat.

$ sudo systemctl enable tomcat --now

Comprueba el estado del servicio.

$ sudo systemctl status tomcat
? tomcat.service - Apache Tomcat 10 Servlet container
   Loaded: loaded (/etc/systemd/system/tomcat.service; enabled; vendor preset: disabled)
   Active: active (running) since Fri 2021-12-17 15:54:28 UTC; 24s ago
  Process: 86219 ExecStart=/opt/tomcat/latest/bin/startup.sh (code=exited, status=0/SUCCESS)
 Main PID: 86226 (java)
    Tasks: 19 (limit: 11411)
   Memory: 132.7M
   CGroup: /system.slice/tomcat.service
           ??86226 /usr/lib/jvm/jre/bin/java -Djava.util.logging.config.file=/opt/tomcat/latest/conf/logging.properties>

Dec 17 15:54:27 howtoforge systemd[1]: Starting Apache Tomcat 10 Servlet container...
Dec 17 15:54:28 howtoforge systemd[1]: Started Apache Tomcat 10 Servlet container.

Paso 6 – Configurar el Cortafuegos

Rocky Linux utiliza el cortafuegos Firewalld. Comprueba el estado del cortafuegos.

$ sudo firewall-cmd --state
running

Permite los puertos HTTP y HTTPS.

$ sudo firewall-cmd --permanent --add-service=http
$ sudo firewall-cmd --permanent --add-service=https

Recarga el cortafuegos para activar los cambios.

$ sudo firewall-cmd --reload

Paso 7 – Configurar la Interfaz de Gestión Web Tomcat

La interfaz de gestión web sólo será accesible una vez que hayamos creado una credencial de usuario para ella.

Los usuarios y roles de Tomcat se definen en el archivo /opt/tomcat/latest/conf/tomcat-users.xml. Abre el archivo para editarlo.

$ sudo nano /opt/tomcat/latest/conf/tomcat-users.xml

Añade las siguientes líneas antes de la línea </tomcat-users. Sustituye el nombre de usuario y la contraseña por tus credenciales.

Elige credenciales diferentes para los portales Tomcat Gestor y Administrador.

<tomcat-users>
<!--
    Comments
-->
<role rolename="manager-gui"/>
    <user username="manager" password="managerpassword" roles="manager-gui" />
<role rolename="admin-gui"/>
	<user username="admin" password="adminpassword" roles="admin-gui"/>
</tomcat-users>

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te pida guardar.

Por defecto, la interfaz Tomcat sólo es accesible desde el localhost. Si necesitas acceder a ella desde cualquier lugar, deberás configurarla.

Abre el sitio /opt/tomcat/latest/webapps/manager/META-INF/context.xml para editarlo.

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

Elimina las siguientes líneas o coméntalas como se especifica a continuación encerrándolas en <!-- y -->.

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

Permitir el acceso desde cualquier dirección IP es un riesgo para la seguridad. Puedes restringirlo permitiendo el acceso sólo desde tu dirección IP pública. Si tu dirección IP pública es 22.22.22.22, cambia la línea como se indica a continuación.

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

La lista de direcciones IP permitidas está separada por una barra vertical(|). Puedes añadir direcciones IP individuales o utilizar una expresión regular.

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te pida guardar.

Realiza también los mismos cambios en el archivo /opt/tomcat/latest/webapps/host-manager/META-INF/context.xml.

Una vez terminado, reinicia el servidor Tomcat.

$ sudo systemctl restart tomcat

Paso 8 – Instalar SSL

Para instalar un certificado SSL utilizando Let’s Encrypt, necesitamos instalar la herramienta Certbot.

En primer lugar, necesitas descargar e instalar el repositorio EPEL.

$ sudo dnf install epel-release

Ejecuta los siguientes comandos para instalar Certbot.

$ sudo dnf install certbot

Generar el certificado SSL.

$ sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email protected] -d tomcat.example.com

El comando anterior descargará un certificado en el directorio /etc/letsencrypt/live/tomcat.example.com de tu servidor.

Genera un certificado de grupo Diffie-Hellman.

$ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

Crea un directorio webroot de desafío para la renovación automática de Let’s Encrypt.

$ sudo mkdir -p /var/lib/letsencrypt

Crea un Cron Job para renovar el SSL. Se ejecutará cada día para comprobar el certificado y renovarlo si es necesario. Para ello, primero, crea el archivo /etc/cron.daily/certbot-renew y ábrelo para editarlo.

$ sudo nano /etc/cron.daily/certbot-renew

Pega el siguiente código.

#!/bin/sh
certbot renew --cert-name tomcat.example.com --webroot -w /var/lib/letsencrypt/ --post-hook "systemctl reload nginx"

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando te lo pida.

Cambia los permisos del archivo de tareas para que sea ejecutable.

$ sudo chmod +x /etc/cron.daily/certbot-renew

Paso 9 – Instalar Nginx

Rocky Linux 8.5 incluye la última versión estable de Nginx. Instálalo utilizando el siguiente comando.

$ sudo dnf module install nginx:1.20

Verifica la instalación.

$ nginx -v
nginx version: nginx/1.20.1

Habilita e inicia el servicio Nginx.

$ sudo systemctl enable nginx --now

Crea y abre el archivo /etc/nginx/conf.d/tomcat.conf para editarlo.

$ sudo nano /etc/nginx/conf.d/tomcat.conf

Pega en él el siguiente código.

server {
    listen       443 ssl http2;
    listen       [::]:443 ssl http2;
    server_name  tomcat.example.com;

    access_log  /var/log/nginx/tomcat.access.log;
    error_log   /var/log/nginx/tomcat.error.log;
    
    # SSL
    ssl_certificate      /etc/letsencrypt/live/tomcat.example.com/fullchain.pem;
    ssl_certificate_key  /etc/letsencrypt/live/tomcat.example.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/tomcat.example.com/chain.pem;
    ssl_session_timeout  5m;
    ssl_session_cache shared:MozSSL:10m;
    ssl_session_tickets off;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
    ssl_ecdh_curve X25519:prime256v1:secp384r1:secp521r1;
    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_dhparam /etc/ssl/certs/dhparam.pem;
    resolver 8.8.8.8;

    location / {
      proxy_pass http://127.0.0.1:8080;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-Host $host;
      proxy_set_header X-Forwarded-Server $host;
      proxy_set_header Host $host;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  }
}
# enforce HTTPS
server {
    listen       80;
    listen       [::]:80;
    server_name  tomcat.example.com;
    return 301   https://$host$request_uri;
}

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te pida una vez hayas terminado.

Abre el archivo /etc/nginx/nginx.conf para editarlo.

$ sudo nano /etc/nginx/nginx.conf

Añade la siguiente línea antes de la línea include /etc/nginx/conf.d/*.conf;.

server_names_hash_bucket_size  64;

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te solicite.

Verifica la sintaxis del archivo de configuración de Nginx.

$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Reinicia el servicio Nginx para habilitar la nueva configuración.

$ sudo systemctl restart nginx

Paso 10 – Ejecuta TomCat

Ejecuta https://tomcat.example.com en tu navegador, y se abrirá la siguiente pantalla.

Inicio de la Gestión Web de Tomcat

Ahora puedes acceder a las páginas Estado del Servidor, Aplicación Gestor y Gestor de Anfitriones utilizando las credenciales de acceso que configuramos en el paso 7.

Conclusión

Con esto concluye nuestro tutorial sobre la instalación y configuración del Servidor Tomcat en un servidor basado en Rocky Linux 8.5 y su servicio a través del proxy inverso Nginx, y utilizando SSL para protegerlo. Si tienes alguna pregunta, publícala en los comentarios más abajo.

También te podría gustar...