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 cambios, se especificarán 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
-
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:crear 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 - Descargar Tomcat
La última versión de Tomcat v10 se puede descargar desde su página 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.
Usa 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 a /opt/tomcat
directorio.
$ 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:crear 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 editar.
$ 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 Ctrl + X e ingresando Y cuando se le solicite guardar.
Paso 5:Iniciar y habilitar 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
Consulta 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 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 cortafuegos para habilitar los cambios.
$ sudo firewall-cmd --reload
Paso 7:configurar la interfaz de administración web de Tomcat
Solo se podrá acceder a la interfaz de administración web una vez que hayamos creado una credencial de usuario para ella.
Los usuarios y roles de Tomcat se definen en /opt/tomcat/latest/conf/tomcat-users.xml
expediente. Abra el archivo para editarlo.
$ sudo nano /opt/tomcat/latest/conf/tomcat-users.xml
Agregue las siguientes líneas antes de </tomcat-users
línea. 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 Ctrl + X e ingresando Y cuando se le solicite guardar.
De forma predeterminada, solo se puede acceder a la interfaz de Tomcat desde el servidor local. Si necesita acceder desde cualquier lugar, debe configurarlo.
Abra el /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 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 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.22 , luego 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 Ctrl + X e ingresando 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 de 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 /etc/letsencrypt/live/tomcat.example.com
directorio en 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 crea 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 Ctrl + X e ingresando 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 editar.
$ 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 Ctrl + X e ingresando Y cuando se le solicite una vez terminado.
Abra el archivo /etc/nginx/nginx.conf
para editar.
$ 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 Ctrl + X e ingresando 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 - Ejecutar TomCat
Inicie https://tomcat.example.com
en su navegador, y se abrirá la siguiente pantalla.
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.