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