Cómo instalar Tomcat 9 en CentOS 8

¿Qué es Tomcat?

En este artículo, demostraremos cómo instalar Apache Tomcat en CentOS 8. Antes de comenzar, definamos exactamente qué Apache Tomcat es. Apache define a Tomcat como: “Un contenedor de servlet de código abierto, JavaServer Pages, Java Expression Language y tecnología WebSocket que también actúa como un servidor web. Ofrece un entorno de servidor HTTP basado en” Java puro “en el que se puede ejecutar Java”. Tomcat funciona con el lenguaje de programación Java y está asociado con aplicaciones web escritas en Java.

requisitos previos

Nuestra primera tarea es asegurarnos de que nuestro sistema esté actualizado. Como vamos a instalar Tomcat en CentOS 8, ejecutaremos los siguientes comandos.

[root@host ~]# cat /etc/redhat-release 
CentOS Linux release 8.1.1911 (Core) 
[root@host ~]#  yum -y install epel-release
[root@host ~]# yum -y update -y

A continuación, debemos verificar si Java ya está instalado.

[root@host ~]# java -version
-bash: java: command not found
[root@host ~]#

Si no tenemos instalado Java, recibiremos el resultado indicado anteriormente.

Instalar Java

Avanzando, instalemos Java. Apache Tomcat no funcionará correctamente si Java no está presente en el sistema. Además, debemos asegurarnos de que estamos instalando Java OpenJDK 11. Debido a que es de código abierto y una versión a largo plazo, no nos encontraremos con ningún problema de licencia. Para realizar esta tarea, utilizaremos el siguiente comando.


[root@host ~]# dnf install java-11-openjdk-devel
Last metadata expiration check: 0:53:36 ago on Tue 04 Feb 2020 02:50:27 PM EST.
Dependencies resolved.
======================================================================
 Package  Architecture   Version Repository Size
======================================================================
Installing:
 java-11-openjdk-devel x86_64 1:11.0.5.10-2.el8_1 AppStream  3.3 M
...
...
...
javapackages-runtime                 201801                                                                  
Transaction Summary
======================================================================
Install 53 Packages

Total download size: 67 M
Installed size: 255 M
Downloading Packages:
(1/53): abattis-cantarell-fonts-0.0.25-4.el8.noarch.rpm                     2.8 MB/s | 155 kB 00:00    
(2/53): at-spi2-atk-2.26.2-1.el8.x86_64.rpm                           4.7 MB/s | 89 kB 00:00    
(3/53): adwaita-cursor-theme-3.28.0-2.el8.noarch.rpm 
...
...
...
Complete!
[root@host ~]# 

A continuación, verificaremos la versión de Java instalada ejecutando este comando.

[root@host ~]# java -version
openjdk version "11.0.5" 2019-10-15 LTS
OpenJDK Runtime Environment 18.9 (build 11.0.5+10-LTS)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.5+10-LTS, mixed mode, sharing)
[root@host ~]#

Instalación de Tomcat

Nota: Al momento de escribir este artículo, la última versión de Tomcat es la 9.0.30. Si desea descargar la última versión, visiteeste enlace de descarga para Tomcat 9para buscar la versión más reciente.

Primero, necesitamos crear un usuario para Tomcat.

[root@host ~]#useradd -r tomcat
[root@host ~]#

A continuación, crearemos una carpeta y luego usaremos el comando “cd” para cambiar los directorios a esa carpeta donde descargaremos Tomcat.

[root@host ~]# mkdir /usr/local/tomcat9
[root@host ~]# cd /usr/local/tomcat9
[root@host tomcat9]# 

Ahora, descarguemos el archivo Tomcat usando curl. (wget también es una opción si está instalado en su versión de CentOS 8. De lo contrario, es posible que desee instalarlo para usarlo más adelante)

[root@host tomcat9]# curl -o tomcat9.tar.gz https://www-us.apache.org/dist/tomcat/tomcat-9/v9.0.30/bin/apache-tomcat-9.0.30.tar.gz
 % Total  % Received % Xferd Average Speed Time  Time Time Current

Dload Upload Total Spent  Left Speed
100   10.5M  100   10.5M  0  0 3404k   0 0:00:03 0:00:03 --:--:-- 3404k
[root@host tomcat9]#

Nota: Usando el curl El comando con el indicador -o nos permite descargar el archivo tar.gz y guardarlo localmente con el nombre de archivo que elijamos. En este caso, simplemente guardamos el archivo como tomcat9.tar.gz.

A continuación, podemos descomprimir el archivo “tomcat9 tar.gz” en nuestra carpeta de trabajo.

[root@host tomcat]# tar -xvf tomcat9.tar.gz
<filescroll>
[root@host tomcat9]# 
[root@host tomcat9]# ll
total 10912
-rw-r--r-- 1 root root 11026056 Jan 31 18:46 apache-tomcat-9.0.30.tar.gz
drwxr-x--- 2 root root  4096 Jan 31 18:47 bin
-rw-r----- 1 root root  18982 Dec 7 11:46 BUILDING.txt
drwx------ 2 root root  4096 Dec 7 11:46 conf
-rw-r----- 1 root root  5409 Dec 7 11:46 CONTRIBUTING.md
drwxr-x--- 2 root root  4096 Jan 31 18:47 lib
-rw-r----- 1 root root  57092 Dec 7 11:46 LICENSE
drwxr-x--- 2 root root  4096 Dec 7 11:42 logs
-rw-r----- 1 root root  2333 Dec 7 11:46 NOTICE
-rw-r----- 1 root root  3255 Dec 7 11:46 README.md
-rw-r----- 1 root root  6898 Dec 7 11:46 RELEASE-NOTES
-rw-r----- 1 root root  16262 Dec 7 11:46 RUNNING.txt
drwxr-x--- 2 root root  4096 Jan 31 18:47 temp
drwxr-x--- 7 root root  4096 Dec 7 11:43 webapps
drwxr-x--- 2 root root  4096 Dec 7 11:42 work
[root@host tomcat]#

Ahora, necesitamos modificar la propiedad del directorio /usr/local/tomcat9/.

[root@host tomcat9]# chown -R tomcat:tomcat /usr/local/tomcat9
[root@host tomcat9]# ll
total 10912
-rw-r--r-- 1 tomcat tomcat 11026056 Jan 31 18:46 apache-tomcat-9.0.30.tar.gz
drwxr-x--- 2 tomcat tomcat  4096 Jan 31 18:47 bin
-rw-r----- 1 tomcat tomcat  18982 Dec 7 11:46 BUILDING.txt
drwx------ 2 tomcat tomcat  4096 Dec 7 11:46 conf
-rw-r----- 1 tomcat tomcat  5409 Dec 7 11:46 CONTRIBUTING.md
drwxr-x--- 2 tomcat tomcat  4096 Jan 31 18:47 lib
-rw-r----- 1 tomcat tomcat  57092 Dec 7 11:46 LICENSE
drwxr-x--- 2 tomcat tomcat  4096 Dec 7 11:42 logs
-rw-r----- 1 tomcat tomcat  2333 Dec 7 11:46 NOTICE
-rw-r----- 1 tomcat tomcat  3255 Dec 7 11:46 README.md
-rw-r----- 1 tomcat tomcat  6898 Dec 7 11:46 RELEASE-NOTES
-rw-r----- 1 tomcat tomcat  16262 Dec 7 11:46 RUNNING.txt
drwxr-x--- 2 tomcat tomcat  4096 Jan 31 18:47 temp
drwxr-x--- 7 tomcat tomcat  4096 Dec 7 11:43 webapps
drwxr-x--- 2 tomcat tomcat  4096 Dec 7 11:42 work
[root@host tomcat9]#

De forma predeterminada, sus archivos se ubicarán en esta carpeta: /usr/local/tomcat9 y los archivos de configuración se almacenarán en: /usr/local/tomcat9/conf

[root@host tomcat9]# ll
total 144
drwxr-x--- 2 tomcat tomcat 4096 Feb 4 17:26 bin
-rw-r----- 1 tomcat tomcat 18982 Dec 7 11:46 BUILDING.txt
drwx------ 3 tomcat tomcat 4096 Feb 4 15:54 conf
-rw-r----- 1 tomcat tomcat 5409 Dec 7 11:46 CONTRIBUTING.md
drwxr-x--- 2 tomcat tomcat 4096 Feb 4 15:50 lib
-rw-r----- 1 tomcat tomcat 57092 Dec 7 11:46 LICENSE
drwxr-x--- 2 tomcat tomcat 4096 Feb 4 15:54 logs
-rw-r----- 1 tomcat tomcat 2333 Dec 7 11:46 NOTICE
-rw-r----- 1 tomcat tomcat 3255 Dec 7 11:46 README.md
-rw-r----- 1 tomcat tomcat 6898 Dec 7 11:46 RELEASE-NOTES
-rw-r----- 1 tomcat tomcat 16262 Dec 7 11:46 RUNNING.txt
drwxr-x--- 2 tomcat tomcat 4096 Feb 4 17:27 temp
drwxr-x--- 7 tomcat tomcat 4096 Dec 7 11:43 webapps
drwxr-x--- 3 tomcat tomcat 4096 Feb 4 15:54 work

Establecer variable de entorno

Ahora, podemos configurar la variable de entorno CATALINA_HOME usando los siguientes comandos:

[root@host tomcat9]# echo "export CATALINA_HOME="/usr/local/tomcat9"" >> ~/.bashrc
[root@host tomcat9]# source ~/.bashrc

Esta variable se establece para garantizar que se permita el acceso al software a todos los usuarios de su sistema.

Crear y configurar el servicio Systemd

Primero, revisemos nuestra información de Java, ya que la necesitaremos para completar parte de nuestro archivo de unidad.

[root@host tomcat]# java -version
openjdk version "11.0.5" 2019-10-15 LTS
OpenJDK Runtime Environment 18.9 (build 11.0.5+10-LTS)
OpenJDK 64-Bit Server VM 18.9 (build 11.ets0.5+10-LTS, mixed mode, sharing)
[root@host tomcat]# 
[root@host tomcat9]# alternatives --list | grep java

jre_openjdk auto /usr/lib/jvm/java-11-openjdk-11.0.5.10-2.el8_1.x86_64
javac auto /usr/lib/jvm/java-11-openjdk-11.0.5.10-2.el8_1.x86_64/bin/javac

java_sdk_11_openjdk auto /usr/lib/jvm/java-11-openjdk-11.0.5.10-2.el8_1.x86_64

java_sdk_openjdk auto /usr/lib/jvm/java-11-openjdk-11.0.5.10-2.el8_1.x86_64
jre_11 auto /usr/lib/jvm/java-11-openjdk-11.0.5.10-2.el8_1.x86_64

java auto /usr/lib/jvm/java-11-openjdk-11.0.5.10-2.el8_1.x86_64/bin/java

java_sdk_11 auto /usr/lib/jvm/java-11-openjdk-11.0.5.10-2.el8_1.x86_64

[root@host tomcat9]# 

A continuación, para asegurarnos de que tenemos Tomcat configurado como un servicio, crearemos un archivo de unidad systemd simple.

Nota: Un archivo de unidad es un registro de texto sin formato que define los recursos del sistema que están disponibles para ser administrados por los demonios systemd.

[root@host tomcat9]# touch /etc/systemd/system/tomcat.service
[root@host tomcat9]# vim /etc/systemd/system/tomcat.service

Ahora, podemos agregar la siguiente información a nuestro nuevo archivo de unidad.

[Unit]
Description=Apache Tomcat Server
After=syslog.target network.target

[Service]
Type=forking
User=tomcat
Group=tomcat

Environment=CATALINA_PID=/usr/local/tomcat9/temp/tomcat.pid
Environment=CATALINA_HOME=/usr/local/tomcat9
Environment=CATALINA_BASE=/usr/local/tomcat9

ExecStart=/usr/local/tomcat9/bin/catalina.sh start
ExecStop=/usr/local/tomcat9/bin/catalina.sh stop

RestartSec=10
Restart=always
[Install]
WantedBy=multi-user.target

Este archivo de unidad puede contener varias directivas además de las enumeradas anteriormente. Después de esto, debemos guardar el archivo (usando :wq) y recargar el servicio para aplicar los cambios.

[root@host tomcat9]# systemctl daemon-reload

Ahora podemos probar el archivo de configuración de Java systemd.

Iniciar, habilitar y verificar el estado de Tomcat

A continuación, iniciemos el servicio Tomcat y luego habilítelo.

[root@host tomcat9]# systemctl start tomcat.service
[root@host tomcat9]# systemctl enable tomcat.service

Ahora, podemos verificar su estado usando el siguiente comando.

[root@host tomcat9]# systemctl status tomcat.service
? tomcat.service - Apache Tomcat Server
   Loaded: loaded (/etc/systemd/system/tomcat.service; enabled; vendor preset: disabled)
   Active: active (running) since Tue 2020-02-04 17:27:23 EST; 23min ago
 Main PID: 59815 (java)
    Tasks: 42 (limit: 10686)
   Memory: 93.1M
   CGroup: /system.slice/tomcat.service
           ??59815 /usr/bin/java -Djava.util.logging.config.file=/usr/local/tomcat9/conf/logging.properties -Djava.util.logging.>

Feb 04 17:27:23 host.lwkbcentos.com systemd[1]: tomcat.service: Service RestartSec=10s expired, scheduling restart.
Feb 04 17:27:23 host.domain.com systemd[1]: tomcat.service: Scheduled restart job, restart counter is at 485.
Feb 04 17:27:23 host.domain.com systemd[1]: Stopped Apache Tomcat Server.
Feb 04 17:27:23 host.domain.com systemd[1]: Starting Apache Tomcat Server...
Feb 04 17:27:23 host.domain.com catalina.sh[59801]: Existing PID file found during start.
Feb 04 17:27:23 host.domain.com catalina.sh[59801]: Removing/clearing stale PID file.
Feb 04 17:27:23 host.domain.com catalina.sh[59801]: Tomcat started.
Feb 04 17:27:23 host.domain.com systemd[1]: Started Apache Tomcat Server.

Finalmente, presione la tecla ‘q’ para salir de la verificación de estado y regresar a la bash inmediato.

Comprobación de la versión

Para recuperar la información del servidor Tomcat, podemos usar el siguiente comando:

[root@host bin]# /usr/local/tomcat9/bin/version.sh
Using CATALINA_BASE: /usr/local/tomcat9
Using CATALINA_HOME: /usr/local/tomcat9
Using CATALINA_TMPDIR: /usr/local/tomcat9/temp
Using JRE_HOME:    /usr
Using CLASSPATH:   /usr/local/tomcat9/bin/bootstrap.jar:/usr/local/tomcat9/bin/tomcat-juli.jar

NOTE: Picked up JDK_JAVA_OPTIONS: --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED

Server version: Apache Tomcat/9.0.30

Server built: Dec 7 2019 16:42:04 UTC

Server number: 9.0.30.0

OS Name:    Linux

OS Version:  4.18.0-147.3.1.el8_1.x86_64

Architecture: amd64

JVM Version:  11.0.5+10-LTS

JVM Vendor:  Oracle Corporation

[root@host bin]# 

Pruebas

A continuación, abramos un navegador para probar la conexión.

Cargarhttps://elsefix.comohhttps://servidor.ip:8080en su navegador, y debería ver una imagen como la siguiente.

¿Errores?

Si por casualidad obtienes un “err_ssl_protocolo_error” cuando visite https://ip.ad.dr.ess:8080/, verifique el error usando curl y una vez verificado, sigue los siguientes pasos.

user@host:~$ curl -Iv https://67.225.186.120:8080
* Trying 67.225.186.120:8080...
* TCP_NODELAY set
* connect to 67.225.186.120 port 8080 failed: Connection refused
* Failed to connect to 67.225.186.120 port 8080: Connection refused
* Closing connection 0
curl: (7) Failed to connect to 67.225.186.120 port 8080: Connection refused

1. Verifique que los puertos Java/Tomcat estén abiertos en el firewall

firewall-cmd --zone=public --permanent --add-port=8080/tcp
firewall-cmd --zone=public --permanent --add-port=8443/tcp

2. Ejecute un comando netstat para verificar si el servidor está escuchando las direcciones IPv4 (y/o la dirección IPv6 si es necesario).

Después de verificar netstat, vimos que Tomcat solo estaba vinculado a los puertos del protocolo IPv6.

[root@host tomcat9]# netstat -nlp | grep java
tcp6 0 0 :::8080  :::* LISTEN 33080/java
tcp6 0 0 127.0.0.1:8005  :::* LISTEN 33080/java
tcp6 0 0 :::8009 :::* LISTEN 33080/java

Nota: Es posible que deba instalar Netstat con el comando “yum install net-tools” para ver este problema, ya que nuestra versión de CentOS 8 no incluía el comando netstat de manera predeterminada.

Para abordar esto, cree un archivo llamado setenv.sh dentro de su directorio bin/ CATALINA_BASE o CATALINA_HOME
(usamos la carpeta /usr/local/tomcat9/bin).

A continuación, cree un nuevo archivo llamado setenv.sh.

cd bin/
touch setenv.sh
vim setenv.sh

Haga clic en insertar y agregue la siguiente línea al archivo.

JAVA_OPTS="$JAVA_OPTS -Djava.net.preferIPv4Stack=true -Djava.net.preferIPv4Addresses=true "

Esta entrada anula la configuración predeterminada utilizada por Tomcat. Una vez que se complete esa tarea, guarde y salga del archivo usando “:wq” y vuelva a cargar los servicios para guardar nuestros cambios.

systemctl daemon-reload

Ahora, revisemos los puertos nuevamente.

[root@host tomcat9]# netstat -nlp | grep java
tcp 0 0 0.0.0.0:8080  0.0.0.0:* LISTEN 59815/java
tcp 0 0 127.0.0.1:8005 0.0.0.0:* LISTEN 59815/java
tcp 0 0 0.0.0.0:8009  0.0.0.0:* LISTEN 59815/java

Verifique que los puertos de firewall correctos estén abiertos.

[root@host ~]# firewall-cmd --zone=public --list-ports | grep 8080
8080/tcp 8443/tcp
[root@host ~]# 

Ajustes de configuración

Aquí hay un par de ajustes de configuración útiles para Tomcat.

Agregar usuarios

A veces, es posible que necesitemos agregar nuevos usuarios o un admin usuario. Podemos lograr esto yendo a la carpeta conf de Tomcat y modificando esta configuración.

[root@host conf]# cd /usr/local/tomcat9/conf 
<!-- user admin can access manager and admin section both -->
<role rolename="admin-gui" />
<user username="admin" password="_SECRET_PASSWORD_" roles="manager-gui,admin-gui" />

Nota: Podemos abrir el archivo a través de vi o vim o utilizando el administrador de archivos y abriendo el archivo con un editor de texto.

Finalmente, use :wq para guardar el archivo.

Cambio de puertos

En ocasiones, es posible que desee ejecutar Tomcat en un puerto alternativo. Para lograr esto, podemos modificar la configuración del puerto del conector en el archivo server.xml.
Estos son los pasos a seguir.

[root@host conf]# cd /usr/local/tomcat9/conf/
[root@host conf]# vim /usr/local/tomcat9/conf/server.xml

En el archivo server.xml o desde dentro de un editor de texto, podemos modificar la línea “Puerto del conector”, cambiándolo del puerto 8080 al 80 o cualquier otro número de puerto que elijamos.

Line
69  <Connector port="8080" protocol="HTTP/1.1"
70        connectionTimeout="20000"
71        redirectPort="8443" />

Conclusión

En general, Tomcat facilita fácilmente el intercambio de datos entre un cliente y el servlet, proporciona una plataforma de programación para aplicaciones web y asume las funciones de identificación y autorización de clientes, creando sesiones para cada uno de ellos de forma segura.

¿Comparando proveedores?

Considere revisar nuestra publicación Liquidweb vs DigitalOcean para obtener más información sólida sobre su proyecto de alojamiento o infraestructura SMB. Vea comparaciones sobre rendimiento, soporte y migraciones sencillas.

¿Tienes más preguntas? Llámanos al 800.580.4985 o abre unacharlaro tiquete con nosotros para hablar con uno de nuestros asesores expertos en Soluciones o Hosting experimentado, para aprender cómo puede aprovechar esta tecnología hoy.

Artículos Relacionados