Vamos a ver en este artículo cómo instalar Tomcat 9 en Debian 9 Stretch paso a paso, de modo que puedas montar aplicaciones de servidor en Java, o servlets, en tu servidor o VPS Debian, tanto para tus propios desarrollos como para entorno corporativo.
Tabla de contenidos
Antes de instalar Tomcat 9 en Debian 9 Stretch
Para poder seguir esta guía de instalación de Tomcat 9 en Debian 9 Stretch deberías cumplir estos mínimos requisitos:
- Una máquina Debian 9 Stretch actualizada.
- Entorno de Java instalado.
- Un usuario con permisos de sudo o el propio root.
- Conexión a Internet.
Si aún no lo tienes en tu sistema, puedes seguir la guía de instalación de Java OpenJDK en Debian 9 Stretch publicada en este mismo sitio.
Cómo descargar Tomcat 9 para Debian 9 Stretch
Para instalar Tomcat 9 en Debian 9 Stretch debemos acudir a la página oficial del proyecto, ya que los paquetes disponibles en el repositorio de la distribución corresponden a Tomcat 8 (no existen paquetes para la versión 9 en el momento de actualizar esta guía).
Accederemos a la sección de descargas de la versión 9 de Tomcat y en la sección «Core» encontraremos paquetes disponibles tanto en formato .zip como en formato .tar.gz, siendo este último el que nos interesa:
Puedes descargar el archivo .tar.gz directamente desde el navegador, pero en esta ocasión copiaremos el enlace y lo descargaremos en consola mediante el comando wget:
~$ wget https://downloads.apache.org/tomcat/tomcat-9/v9.0.89/bin/apache-tomcat-9.0.89.tar.gz
Cómo instalar Tomcat 9 en Debian 9 Stretch
Instalar Tomcat 9 en Debian 9 Stretch no es tan sencillo como descomprimir un simple paquete, ya que necesitamos realizar algunas tareas adicionales en nuestro sistema Debian 9, tanto previa como posteriormente.
En primer lugar crearemos un usuario para la ejecución del servicio Tomcat 9, puesto que ejecutarlo como root no es buena idea. Para ello crearemos un usuario de Debian 9 llamado tomcat:
~$ sudo useradd -U -m -d /opt/tomcat -k /dev/null -s /bin/false tomcat
Este usuario no puede iniciar sesión, su directorio personal será el directorio donde instalemos Tomcat 9, y se creará un grupo con su mismo nombre al que pertenecerá.
Ahora ya podemos descomprimir el paquete que acabamos de descargar y lo haremos directamente en /opt/tomcat/:
~$ sudo tar xf apache-tomcat-9.0.89.tar.gz -C /opt/tomcat/
Tras esto se crea una carpeta apache-tomcat-9.0.XX/ en /opt/tomcat/ que podemos renombrar o, mejor aún, enlazar simbólicamente como apache-tomcat/:
~$ sudo ln -s /opt/tomcat/apache-tomcat-9.0.89 /opt/tomcat/apache-tomcat
Cambiaremos el propietario de los archivos de Tomcat 9 al usuario que acabamos de crear:
~$ sudo chown -R tomcat:tomcat /opt/tomcat/
Y por fin daremos de alta el servicio tomcat.service, para lo que crearemos su configuración en /etc/systemd/system/:
~$ sudo nano /etc/systemd/system/tomcat.service
El contenido de este nuevo archivo será el siguiente:
[Unit] Description=Tomcat 9.0 servlet container para Debian 9 Stretch After=network.target [Service] Type=forking User=tomcat Group=tomcat Environment="JAVA_OPTS=-Djava.security.egd=file:///dev/urandom" Environment="CATALINA_BASE=/opt/tomcat/apache-tomcat" Environment="CATALINA_HOME=/opt/tomcat/apache-tomcat" Environment="CATALINA_PID=/opt/tomcat/apache-tomcat/temp/tomcat.pid" Environment="CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC" ExecStart=/opt/tomcat/apache-tomcat/bin/startup.sh ExecStop=/opt/tomcat/apache-tomcat/bin/shutdown.sh [Install] WantedBy=multi-user.target
Puedes comprobar que usamos el usuario y grupo tomcat para ejecutar el servicio, y que usamos las rutas de los archivos de Tomcat 9 a través del enlace simbólico que creamos. De esa forma será más fácil actualizar a futuras versiones.
Este nuevo servicio estará disponible en Debian 9 de forma inmediata, pero si tenemos que corregir o modificar su contenido habrá que recargar la configuración de systemd:
~$ sudo systemctl daemon-reload
Llega el momento de arrancar nuestro servicio tomcat.service o tomcat, como prefieras:
~$ sudo systemctl start tomcat
Para comprobar que el servicio ha iniciado correctamente y está listo para trabajar puedes usar el comando systemctl status tomcat
:
Si también quieres que el servicio Tomcat 9 inicie automáticamente con Debian 9, tendrás que habilitarlo:
~$ sudo systemctl enable tomcat
Configurar el firewall para Tomcat 9 en Debian 9
Si quieres poder conectar a Tomcat 9 desde otros dispositivos de la red tendrás que añadir una excepción en el firewall UFW de Debian 9 (si lo tienes activado):
~$ sudo ufw allow 8080/tcp
En caso de que quieras ofrecer el servicio mediante conexiones seguras, habrá que permitir también el puerto 8443 TCP:
~$ sudo ufw allow 8443/tcp
Conectar a Tomcat 9
Para conectar a Tomcat 9 desde el navegador habrá que añadir el puerto 8080 a la dirección IP o dominio del servidor Debian 9, usando el protocolo HTTP, ya que por defecto el servicio no está disponible vía HTTPS.
En este ejemplo el sistema Debian 9 es accesible mediante el subdominio debian9.local.lan, por lo que usaríamos la URL http://debian9.local.lan:8080/ en el navegador:
Podremos ver la página principal de la interfaz de Tomcat 9, con tres botones destacados: «Server Status«, «Manager App» y «Host Manager«. Lamentablemente aún no podemos acceder a ninguna de estas secciones.
Cómo configurar Tomcat 9 en Debian 9 Stretch
Aún nos quedan algunos ajustes para terminar de configurar Tomcat 9 en Debian 9, que iremos detallando a continuación.
Conexiones seguras SSL
Para poder servir conexiones seguras a Tomcat 9 será necesario disponer de claves y certificados que, en el caso de un servidor Debian 9 en Internet, deberían estar firmados por autoridades certificadoras, como los que puedes obtener a través de servicios profesionales como Namecheap:
Creamos un directorio para guardar el almacén de claves:
~$ sudo mkdir /etc/keys
Y mediante la herramienta keytool crearemos la clave de cifrado indicando un alias para dicha clave, el algoritmo de cifrado y la ruta del almacén de claves que utilizaremos:
~$ sudo keytool -genkey -alias tomcat9 -keyalg RSA -storetype pkcs12 -keystore /etc/keys/tomcat9.jks
Este comando es interactivo y, además de pedirnos crear una contraseña para el nuevo almacén de claves, solicitará cierta información pública para incorporarla al certificado. Es importante que en la primera pregunta indiquemos el dominio con el que se accederá al servicio (en el ejemplo de este tutorial, debian9.local.lan):
... ¿Cuáles son su nombre y su apellido? [Unknown]: debian9.local.lan ...
Con la clave de cifrado instalada, a partir de la misma generaremos un archivo CSR (solicitud de firma de certificado), también con keytool:
~$ keytool -certreq -keystore /etc/keys/tomcat9.jks -alias tomcat9 -file debian9.local.lan.csr
En la ruta indicada en el parámetro -alias (en este caso, el directorio de trabajo) se crea el archivo .csr especificado, cuyo contenido podemos ver con el comando cat:
~$ cat debian9.local.lan.csr -----BEGIN NEW CERTIFICATE REQUEST----- MIIC5jCCAc4CAQAwcTELMAkGA1UEBhMCRVMxEDAOBgNVBAgTB1Vua25vd24xEDAO ... 0aLzNwxwcNdZx3+tWUzhmSQ0MAMdn+0mGiM= -----END NEW CERTIFICATE REQUEST-----
El contenido del archivo (incluyendo las líneas BEGIN y END), y no el archivo en sí, es lo que se suele introducir en el formulario de solicitud de certificado firmado de los servicios de certificación.
SSL en servidores locales o en pruebas
En caso de un servidor en pruebas, una red local o si simplemente estás experimentando con tu servidor, no es necesario solicitar un certificado firmado, puedes utilizar el certificado autofirmado incluido en la clave de cifrado.
Configuración de la conexión
Con la clave y el certificado SSL para Tomcat 9 ya instalados, editaremos la configuración del servicio en el fichero server.xml:
~$ sudo nano /opt/tomcat/apache-tomcat/conf/server.xml
Dentro del bloque Service denominado «Catalina» añadiremos una nueva directiva Connector para el protocolo HTTPS y el puerto 8443:
... <Service name="Catalina"> ... <Connector port="8443" maxThreads="150" scheme="https" secure="true" SSLEnabled="true" keystoreFile="/etc/keys/tomcat9.jks" keystorePass="XXXXXXXX" clientAuth="false" keyAlias="tomcat9" sslProtocol="TLS" /> ...
En esta directiva especificamos el almacén de claves, el alias de la clave y la contraseña del almacén.
Guardados los cambios, reiniciamos el servicio:
~$ sudo systemctl restart tomcat
Y ya podemos conectar usando HTTPS, especificando el puerto 8443 en lugar del 8080.
Siguiendo con el ejemplo de este tutorial, ahora usaríamos https://debian9.local.lan:8443 como URL.
En el caso de certificados autofirmados el navegador emitirá algún tipo de aviso relacionado con la imposibilidad de comprobar la autenticidad de los mismos (esto no ocurre con certificados firmados por autoridades certificadoras):
Normalmente se ofrecen opciones para continuar con la conexión y así poder acceder a la página principal en su versión segura:
Permitir el acceso desde la red a las aplicaciones administrativas
Si tratamos de acceder desde otra máquina de la red a las distintas secciones que nos ofrece la página de inicio del servicio Tomcat 9, por ejemplo «Server Status«, nos encontraremos con un error 403:
Esto ocurre porque la configuración por defecto de estas aplicaciones de Tomcat 9 (manager y host-manager) sólo permite el acceso local. Debemos editar la configuración de cada una de ellas para permitir el acceso externo.
Por ejemplo, editaremos el archivo de configuración context.xml de la aplicación manager:
~$ sudo nano /opt/tomcat/apache-tomcat/webapps/manager/META-INF/context.xml
Dentro del bloque Context la siguiente directiva Valve es la que sólo permite el acceso local:
... <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" /> ...
Para desactivarla la encerraremos entre comentarios:
... <!-- <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" /> --> ...
Guardamos los cambios y cerramos el archivo.
Y otro tanto haremos con el archivo context.xml de la aplicación host-manager:
~$ sudo nano /opt/tomcat/apache-tomcat/webapps/host-manager/META-INF/context.xml
Estos cambios se aplican directamente, sin necesidad de reiniciar el servicio.
Usuarios de Tomcat 9
Ahora, al volver a acceder a estas aplicaciones administrativas, se nos solicita identificarnos mediante usuario y contraseña:
Para poder acceder debemos crear usuarios con permisos en Tomcat 9, editando para ello el archivo tomcat-users.xml:
~$ sudo nano /opt/tomcat/apache-tomcat/conf/tomcat-users.xml
Este archivo consta de un bloque tomcat-users vacío, aunque sí figuran comentarios explicativos. El sistema de permisos de Tomcat 9 se basa en roles, de modo que cada aplicación suele exigir un determinado rol para sus usuarios. Por tanto tenemos que definir un usuario que tenga asociados los roles necesarios.
La aplicación manager necesita el rol manager-gui, mientras que la aplicación host-manager necesita el rol admin-gui, roles que el sistema ya tiene definidos por defecto.
Podríamos crear un usuario para cada rol, pero es posible crear usuarios con varios roles, así que crearemos un administrador con ambos roles:
... <user username="chacho" password="XXXXXXXX" roles="admin-gui,manager-gui"/> ...
Como consejo, cualquier nombre de usuario es mejor que admin.
Tras guardar los cambios y cerrar el archivo ya podemos identificarnos y acceder a las aplicaciones de la página incial de Tomcat 9 en nuestro sistema Debian 9.
Podremos acceder al estado del servidor (manager/status):
Podremos también acceder al gestor de aplicaciones (manager/html), que en realidad es parte de la misma aplicación que la anterior:
Y también podremos acceder al gestor de máquinas virtuales de Tomcat 9 (host-manager/html):
Cambiar el puerto de acceso a Tomcat 9
El puerto de acceso estándar a Tomcat 9 por defecto es el 8080/TCP, que es un número de puerto bastante usado por muchos tipos de aplicaciones, como podrían ser algunos servidores proxy, entre otras, lo que puede llevar a que se dé el caso de instalar Tomcat 9 en un sistema que tiene ya ocupado dicho puerto. Para cambiar el puerto de acceso a Tomcat 9 en Debian 9 Stretch debemos editar el archivo de configuración server.xml:
~$ sudo nano /opt/tomcat/apache-tomcat/conf/server.xml
Tenemos que buscar este fragmento de configuración:
... <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> ...
Bastará con sustituir el valor 8080 por cualquier otro que consideres oportuno, por ejemplo 8090:
... <Connector port="8090" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> ...
El proceso es similar si el puerto que quieres cambiar es el de acceso seguro, el 8443/TCP.
Una vez guardados los cambios es necesario reiniciar Tomcat 9 para que tomen efecto.
Recuerda realizar el cambio de configuración en el firewall (si es necesario) y a la hora de introducir las nuevas URL de Tomcat 9 en Debian 9.
Desplegar una aplicación desde un archivo WAR
Para desplegar una nueva aplicación web desde un archivo WAR, con extensión .war, usaremos el gestor de aplicaciones o «Manager App» y en la sección «Desplegar» usaremos el botón «Seleccionar aplicación» para buscar el archivo WAR en el sistema de archivos y seleccionarlo. Hecho esto pulsaremos el botón «Desplegar«.
El gestor de aplicaciones cargará e instalará la aplicación desde el archivo y recargará la página, donde en la caja de mensajes debe aparecer un simple «OK» y en la lista de aplicaciones debe aparecer una entrada con el enlace a la nueva aplicación:
Podemos abrir la nueva aplicación desde el enlace de la lista y debería cargar sin problemas:
Para desinstalar esta aplicación u otra cualquiera usaremos su botón «Replegar» correspondiente en la lista de aplicaciones del gestor.
Aumentar el tamaño máximo de archivo WAR para Tomcat 9
Por defecto el gestor de aplicaciones de Tomcat 9 tiene un límite de 50 MB a la hora de subir archivos WAR, que en algunos casos podría quedarse corto, por lo que vamos a ver cómo cambiar el tamaño máximo de archivo WAR para Tomcat 9.
Al tratarse de una configuración de la aplicación manager, o «Gestor de Aplicaciones«, editaremos su archivo web.xml:
~$ sudo nano /opt/tomcat/apache-tomcat/webapps/manager/WEB-INF/web.xml
Buscaremos el bloque multipart-config:
... <multipart-config> <!-- 50MB max --> <max-file-size>52428800</max-file-size> <max-request-size>52428800</max-request-size> <file-size-threshold>0</file-size-threshold> </multipart-config> ...
Veremos el tamaño actual expresado en bytes, así que debemos calcular el nuevo tamaño también en bytes y realizar el cambio. Por ejemplo, si queremos cambiar el tamaño máximo de archivo WAR a 150 MB debemos indicar el valor 157286400:
... <multipart-config> <!-- 150MB max --> <max-file-size>157286400</max-file-size> <max-request-size>157286400</max-request-size> <file-size-threshold>0</file-size-threshold> </multipart-config> ...
Una vez guardado el archivo, el nuevo ajuste se aplica de inmediato.
Conclusión
Como ves, instalar y configurar Tomcat 9 en Debian 9 Stretch no es tan difícil como se podría pensar por el hecho de no existir paquetes en el repositorio. Basta seguir unos pocos pasos de forma ordenada y podrás desplegar aplicaciones en desarrollo o profesionales en tu servidor o VPS Debian.
Si tienes alguna duda, pregunta, sugerencia, etc. puedes dejar un comentario.
Y si esta guía de instalación y configuración de Tomcat 9 en Debian 9 Stretch te ha servido para tus objetivos y quieres agradecérmelo, puedes hacerlo dejando 1 $ de propina desde PayPal:
¡Gracias!
Actualizado a la versión 9.0.89.
Actualizado a la versión 9.0.88.
Actualizado a la versión 9.0.68.
Actualizado a la versión 9.0.64.
Actualizado a la versión 9.0.62.
Actualizado a la versión 9.0.58.
Actualizado a la versión 9.0.56.
Actualizado a la versión 9.0.54.