En el siguiente artículo vamos a ver cómo podemos instalar Tomcat 9 en Ubuntu 18.04. Sobre la instalación de este contenedor con soporte para servlets y JSPs entre otros, ya nos habló un compañero hace unos años en un artículo.
Apache Tomcat es una implementación de código abierto de las tecnologías Java Servlet, JavaServer Pages, Java Expression Language y Java WebSocket. Ofrece una solución completa para quienes necesitan ejecutar ese tipo de contenidos, entre los que se encuentran las grandes organizaciones y corporaciones hasta las PyMES, porque si algo caracteriza a esta herramienta es su gran escalabilidad.
Antes de meternos en profundidad con la instalación de Tomcat 9, necesitamos instalar OpenJDK.
Contenido del artículo
Instalar OpenJDK
La instalación del paquete OpenJDK en Ubuntu 18.04 es bastante sencilla:
sudo apt install default-jdk
Si prefieres instalar Oracle Java en lugar de OpenJDK, consulta las instrucciones que publicó un compañero tiempo atrás.
Crear usuario para Tomcat
Ahora vamos a crear un nuevo usuario y grupo de sistema con el directorio de inicio en /opt/tomcat, que ejecutará el servicio de Tomcat:
sudo useradd -m -U -d /opt/tomcat -s /bin/false tomcat
Descargar Tomcat 9
Utilizaremos wget y unzip para descargar y extraer el archivo de Tomcat 9. Los podemos instalar escribiendo:
sudo apt install unzip wget
Vamos a descargar la última versión de Tomcat 9.0.x desde su página de descargas. En el momento de escribir estas líneas, la última versión es la 9.0.10.
Cuando tengamos claro cual es el archivo a descargar, nos vamos a mover al directorio /tmp y descargar el archivo zip con wget.
cd /tmp wget http://apache.rediris.es/tomcat/tomcat-9/v9.0.10/bin/apache-tomcat-9.0.10.zip
Una vez que se complete la descarga, extraeremos el archivo zip y lo vamos a mover al directorio /opt/tomcat:
unzip apache-tomcat-*.zip sudo mv apache-tomcat-*/ /opt/tomcat/
Para tener más control sobre las versiones y actualizaciones, crearemos un enlace simbólico que apuntará al directorio de instalación:
sudo ln -s /opt/tomcat/apache-tomcat-* /opt/tomcat/latest
Más adelante, si deseas actualizar tu instalación de Tomcat, puedes desempaquetar la versión más reciente y cambiar el enlace simbólico para que apunte a la última versión.
El usuario de tomcat que configuramos anteriormente necesita tener acceso al directorio de Tomcat 9. Tendremos que cambiar la propiedad del directorio al usuario y grupo de tomcat:
sudo chown -R tomcat: /opt/tomcat
También haremos que los scripts dentro del directorio bin sean ejecutables:
sudo chmod +x /opt/tomcat/latest/bin/*.sh
Crear un archivo de unidad systemd
Para ejecutar Tomcat como un servicio, crearemos un nuevo archivo de unidad llamado tomcat.service. Este hay que guardarlo dentro del directorio /etc/systemd/system/ con el siguiente contenido:
[Unit] Description=Tomcat 9 servlet container After=network.target [Service] Type=forking User=tomcat Group=tomcat Environment="JAVA_HOME=/usr/lib/jvm/default-java" 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 [Install] WantedBy=multi-user.target
Verificar el estado del servicio
Notificaremos a systemd que creamos un nuevo archivo de unidad e iniciaremos el servicio Tomcat ejecutando:
sudo systemctl daemon-reload sudo systemctl start tomcat
Se puede verificar el estado del servicio con el siguiente comando:
sudo systemctl status tomcat
Si no hay errores, puedes habilitar el servicio Tomcat para que se inicie automáticamente en el momento del arranque:
sudo systemctl enable tomcat
Ajustar el Firewall
Si tu equipo o servidor está protegido por un firewall y quieres acceder a la interfaz de Tomcat desde el exterior de tu red local, deberás abrir el puerto 8080. Este paso es peligroso en algunas situaciones.
Para permitir el tráfico en el puerto 8080 escribe el siguiente comando:
sudo ufw allow 8080/tcp
Configurar Tomcat Web Manager Interface
Ahora que tenemos Tomcat 9 instalado en nuestro Ubuntu, el siguiente paso es crear un usuario que tenga acceso a la interfaz de administración web. Los usuarios de Tomcat y sus roles se definen en el archivo tomcat-users.xml.
Si abres el archivo, verás que está lleno de comentarios y ejemplos.
sudo vim /opt/tomcat/latest/conf/tomcat-users.xml
Para agregar un nuevo usuario que pueda acceder a la interfaz web de tomcat (manager-gui y admin-gui) necesitamos definir el usuario al final del archivo tomcat-users.xml como se muestra a continuación. Asegúrate de cambiar el nombre de usuario y la contraseña por algo más seguro:
<role rolename="admin-gui"/> <role rolename="manager-gui"/> <user username="admin" password="admin123" roles="admin-gui,manager-gui"/>
De forma predeterminada, la interfaz de administración web de Tomcat está configurada para permitir el acceso solo desde el host local. Si necesitas acceder a la interfaz web desde una IP remota abre los siguientes archivos y comenta o elimina las líneas marcadas en las capturas:
sudo vim /opt/tomcat/latest/webapps/manager/META-INF/context.xml
sudo vim /opt/tomcat/latest/webapps/host-manager/META-INF/context.xml
Si necesitas acceder a la interfaz web solo desde una IP específica, en lugar de comentar los bloques, agrega tu IP pública a la lista. Las direcciones IP permitidas se añaden separándolas mediante una barra vertical |. Puedes agregar direcciones IP únicas o usar expresiones regulares.
Probar la instalación
Abre tu navegador y escribe: http://tu-dominio-o-ip:8080. Suponiendo que la instalación sea exitosa, aparecerá una pantalla como la siguiente:
El panel del administrador de aplicaciones web de Tomcat está disponible en http://tu-dominio-o-ip: 8080/manager/html. Aquí podrás gestionar tus aplicaciones.
El gestor de máquina virtual de Tomcat está disponible en http://tu-dominio-o-ip: 8080/host-manager/html. Desde aquí puedes gestionar los hosts virtuales de Tomcat.
Puedes visitar la Documentación oficial de Tomcat 9 y obtener más información sobre sus características.
Excelente tutorial!
excelente tutorial claro y conciso
Impecable tutorial. Además de lo explicado, sólo tuve que dar permisos de ejecución al fichero creado tomcat.service y modificar la ruta de «JAVA_HOME» dentro del fichero tomcat.service y funcionó todo.
Hola Es exelente, pero no pude continuar porque no se donde typear la parte
[Unit]
Description=Tomcat 9 servlet container
After=network.target
[Service]
Type=forking
User=tomcat
Group=tomcat
Environment=»JAVA_HOME=/usr/lib/jvm/default-java»
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
[Install]
WantedBy=multi-user.target
hay que hacerlo en la terminal.
Saludos
Hola. El código al que haces referencia debes pegarlo en el archivo /etc/systemd/system/tomcat.service. Utiliza algún editor para crear o editar el archivo. Salu2.
Hola, cuando intento obtener la página que te dice que instalaste tomcat exitosamente me marca diversos errores de red. He intentado con el localhost, borrando y poniendo lo que dice que comentemos para dejar otras ips, pero ni con el localhost me logro conectar, y siendo que sí puse el comando para permitir trafico en el puerto 8080
No me ha servido
Muy bueno, gracias.
Muy bueno. Muchas gracias.
Tutorial PERFECTO!!!
Miles de gracias!!!!!
Excelente tutorial pero tengo un problema al crear al crear el archivo tomcat.service a si lo tengo configurado
[Unit]
Description=Tomcat 9 servlet container
After=network.target
[Service]
Type=forking
User=tomcat
Group=tomcat
Environment=»JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64/jre»
Environment=»JAVA_OPTS=-Djava.security.egd=file:///dev/urandom»
Environment=»CATALINA_BASE=/opt/tomcat/»
Environment=»CATALINA_HOME=/opt/tomcat/»
Environment=»CATALINA_PID=/opt/tomcat/temp/tomcat.pid»
Environment=»CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC»
Environment=»CATALINA_OUT=/opt/tomcat/logs/catalina.out
ExecStart=/opt/tomcat/bin/startup.sh
ExecStop=/opt/tomcat/bin/shutdown.sh
[Install]
WantedBy=multi-user.target
al ejecuar system start tomcat.service me da el siguiente error:
Job for tomcat.service failed because the control process exited with error code.
See «systemctl status tomcat.service» and «journalctl -xe» for details.
al ejecutar el comando systemctl status tomcat.service muestra :
tomcat.service – Tomcat 9 servlet container
Loaded: loaded (/etc/systemd/system/tomcat.service; disabled; vendor preset: enabled)
Active: failed (Result: exit-code) since Thu 2020-07-09 13:14:25 CST; 2min 12s ago
Process: 5851 ExecStart=/opt/tomcat/bin/startup.sh (code=exited, status=2)
jul 09 13:14:25 host-120901 systemd[1]: Starting Tomcat 9 servlet container…
jul 09 13:14:25 host-120901 systemd[1]: tomcat.service: Control process exited, code=exited, status=2/INVALIDARGUMENT
jul 09 13:14:25 host-120901 systemd[1]: tomcat.service: Failed with result ‘exit-code’.
jul 09 13:14:25 host-120901 systemd[1]: Failed to start Tomcat 9 servlet container.
y al ejecutar journalctl -xe
jul 09 13:14:25 host-120901 startup.sh[5869]: touch: no se puede efectuar `touch’ sobre ‘/opt/tomcat//logs/catalina.out’: Permiso denegado
jul 09 13:14:25 host-120901 startup.sh[5851]: /opt/tomcat/bin/catalina.sh: 505: cannot create /opt/tomcat//logs/catalina.out: Permission denied
jul 09 13:15:01 host-120901 CRON[5879]: pam_unix(cron:session): session opened for user root by (uid=0)
jul 09 13:15:01 host-120901 CRON[5880]: (root) CMD (command -v debian-sa1 > /dev/null && debian-sa1 1 1)
jul 09 13:15:01 host-120901 CRON[5879]: pam_unix(cron:session): session closed for user root
jul 09 13:16:32 host-120901 wpa_supplicant[707]: wlp2s0: Reject scan trigger since one is already pending
jul 09 13:17:01 host-120901 CRON[5905]: pam_unix(cron:session): session opened for user root by (uid=0)
jul 09 13:17:01 host-120901 CRON[5906]: (root) CMD ( cd / && run-parts –report /etc/cron.hourly)
jul 09 13:17:01 host120901 CRON[5905]: pam_unix(cron:session): session closed for user root
me puede explicar que tengo al por favor
Mae muchas gracias, el profe pidiendo estas pichas en 2020
Ganz tolles Tutorial. Hab das selbst mit meinem minimal Linux Kenntnissen hin bekommen. Probleme waren ehr «externer» Natur, wie das richtige Eintragen eine Proxys. Hab die Installation mit 10.0.6, ging ohne Probleme.
Nur so, die Sache mit der context.xml steht zweimal drin.
Vielen Dank.