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

Inicio de administración web de Tomcat

Tomcat es un servidor web de c√≥digo abierto para aplicaciones basadas en Java. Se utiliza para implementar aplicaciones Java Servlet y JSP. Los servlets de Java son peque√Īos programas que definen c√≥mo un servidor maneja las solicitudes 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.

Hay varias versiones de Tomcat disponibles. Discutiremos la instalaci√≥n de Tomcat 10 para nuestro tutorial. Si desea 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 un proxy inverso y lo protegeremos mediante SSL. Hay una versi√≥n de Tomcat 10.1.x, que es la √ļltima versi√≥n alfa de Tomcat, pero no la instalaremos.

requisitos previos

  • Un servidor que ejecuta Rocky Linux 8.5
  • Un usuario que no sea Sudo 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 versiones posteriores. Instalaremos OpenJDK 11, la implementación de código abierto de la plataforma Java.

Ejecute el siguiente comando para instalar OpenJDK.

$ sudo dnf install java-11-openjdk-devel

Verifique 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: cree un usuario del sistema

Crearemos un nuevo usuario del sistema para minimizar cualquier riesgo de seguridad ejecutando Tomcat como usuario raíz. Para el nuevo usuario, configuraremos /opt/tomcat como el directorio de inicio.

Ejecute el siguiente comando para crear un nuevo usuario del 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 se puede descargar desde su pagina de descarga. Al momento de escribir este tutorial, v10.0.14 es la √ļltima versi√≥n disponible. Compruebe la √ļltima versi√≥n antes de descargar Tomcat.

Use wget para descargar Tomcat.

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

Extraiga el archivo al directorio /opt/tomcat.

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

Cree 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

Cambie la propiedad del directorio al usuario creado anteriormente.

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

Paso 4: cree un archivo de unidad Systemd

El siguiente paso es crear un archivo de servicio para el servidor Tomcat para que pueda iniciarse autom√°ticamente.

Cree y abra el archivo /etc/systemd/system/tomcat.service para editarlo.

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

Pegue 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

Guarde el archivo presionando Control + X y entrando Y cuando se le solicite guardar.

Paso 5: inicie y habilite el servicio Tomcat

Vuelva a cargar el demonio de servicio para habilitar el servicio Tomcat.

$ sudo systemctl daemon-reload

Habilite e inicie el servicio Tomcat.

$ sudo systemctl enable tomcat --now

Verifique el estado del servicio. Publicidad

$ 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 usa Firewalld Firewall. Compruebe el estado del cortafuegos.

$ sudo firewall-cmd --state
running

Permitir puertos HTTP y HTTPS.

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

Vuelva a cargar el firewall para habilitar los cambios.

$ sudo firewall-cmd --reload

Paso 7: configurar la interfaz de administración web de Tomcat

La interfaz de administración web solo será accesible una vez que creemos una credencial de usuario para ella.

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

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

Agregue las siguientes l√≠neas antes de la l√≠nea </tomcat-users. Reemplace el nombre de usuario y la contrase√Īa con sus credenciales.

Elija diferentes credenciales para los portales Manager y Administrator Tomcat.

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

Guarde el archivo presionando Control + X y entrando Y cuando se le solicite guardar.

De forma predeterminada, solo se puede acceder a la interfaz de Tomcat desde el host local. Si necesita acceder a él desde cualquier lugar, debe configurarlo.

Abra /opt/tomcat/latest/webapps/manager/META-INF/context.xml para editar.

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

Elimine las siguientes líneas o coméntelas como se especifica a continuación encerrándolas entre .

<!--
  <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 de seguridad. Puede restringirlo permitiendo el acceso solo desde su direcci√≥n IP p√ļblica. Si su direcci√≥n IP p√ļblica es 22.22.22.22luego cambie la l√≠nea de la siguiente manera.

 <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 (|). Puede agregar direcciones IP individuales o usar una expresión regular.

Guarde el archivo presionando Control + X y entrando Y cuando se le solicite guardar.

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

Una vez terminado, reinicie el servidor Tomcat.

$ sudo systemctl restart tomcat

Paso 8 – Instalar SSL

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

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

$ sudo dnf install epel-release

Ejecute los siguientes comandos para instalar Certbot.

$ sudo dnf install certbot

Genere 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 su servidor.

Generar un grupo Diffie-Hellman certificado.

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

Cree un directorio webroot de desaf√≠o para la renovaci√≥n autom√°tica de Let’s Encrypt.

$ sudo mkdir -p /var/lib/letsencrypt

Cree un trabajo cron para renovar el SSL. Se ejecutará todos los días para verificar el certificado y renovarlo si es necesario. Para eso, primero, cree el archivo /etc/cron.daily/certbot-renew y ábralo para editarlo.

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

Pegue el siguiente código.

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

Guarde el archivo presionando Control + X y entrando Y Cuando se le solicite.

Cambie los permisos en el archivo de tareas para que sea ejecutable.

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

Paso 9 – Instalar Nginx

Rocky Linux 8.5 viene con la √ļltima versi√≥n estable de Nginx. Inst√°lalo usando el siguiente comando.

$ sudo dnf module install nginx:1.20

Verifique la instalación.

$ nginx -v
nginx version: nginx/1.20.1

Habilite e inicie el servicio Nginx.

$ sudo systemctl enable nginx --now

Cree y abra el archivo /etc/nginx/conf.d/tomcat.conf para editarlo.

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

Pegue el siguiente código en él.

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;
}

Guarde el archivo presionando Control + X y entrando Y cuando se le solicite una vez terminado.

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

$ sudo nano /etc/nginx/nginx.conf

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

server_names_hash_bucket_size  64;

Guarde el archivo presionando Control + X y entrando Y Cuando se le solicite.

Verifique 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

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

$ sudo systemctl restart nginx

Paso 10 – Ejecute TomCat

Inicie https://tomcat.example.com en su navegador y se abrir√° la siguiente pantalla.

Inicio de administración web de Tomcat

Ahora puede acceder a las páginas Estado del servidor, Aplicación de administrador y Administrador de host utilizando las credenciales de inicio de sesión que configuramos en el paso 7.

Conclusión

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 el uso de SSL para protegerlo. Si tiene alguna pregunta, publíquela en los comentarios a continuación.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *