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.
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.