===== El servidor de aplicaciones. Apache Tomcat =====

<figure>
{{ tomcat.png }}
</figure>

==== Instalación ====

El servidor de aplicaciones [[http://tomcat.apache.org|Apache Tomcat]] no dispone de instalador por lo que la manera habitual de instalarlo es descargar la versión que queramos (actualmente la última versión es la 9) y descomprimirlo en la carpeta que queramos.

<code bash>
santi@zenbook:$ tar xvzf apache-tomcat-9.0.1.tar.gz
x apache-tomcat-9.0.1/conf/
x apache-tomcat-9.0.1/conf/catalina.policy
x apache-tomcat-9.0.1/conf/catalina.properties
x apache-tomcat-9.0.1/conf/context.xml
x apache-tomcat-9.0.1/conf/jaspic-providers.xml
x apache-tomcat-9.0.1/conf/jaspic-providers.xsd
x apache-tomcat-9.0.1/conf/logging.properties
x apache-tomcat-9.0.1/conf/server.xml
x apache-tomcat-9.0.1/conf/tomcat-users.xml
x apache-tomcat-9.0.1/conf/tomcat-users.xsd
x apache-tomcat-9.0.1/conf/web.xml
x apache-tomcat-9.0.1/bin/
. . .
. . .
</code>

==== Arranque y parada ====

Para iniciarlo, dispone de un script ''startup.sh'' que lo lanzará en segundo plano:

<code bash>
santi@zenbook:$ ./startup.sh
Using CATALINA_BASE:   /Users/Santi/apache-tomcat-7.0.67
Using CATALINA_HOME:   /Users/Santi/apache-tomcat-7.0.67
Using CATALINA_TMPDIR: /Users/Santi/apache-tomcat-7.0.67/temp
Using JRE_HOME:        /Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home
Using CLASSPATH:       /Users/Santi/apache-tomcat-7.0.67/bin/bootstrap.jar:/Users/Santi/apache-tomcat-7.0.67/bin/tomcat-juli.jar
Tomcat started.
</code>

Y también de un script ''shutdown.sh'' que lo detiene:

<code bash>
santi@zenbook:$ ./shutdown.sh
Using CATALINA_BASE:   /Users/Santi/apache-tomcat-7.0.67
Using CATALINA_HOME:   /Users/Santi/apache-tomcat-7.0.67
Using CATALINA_TMPDIR: /Users/Santi/apache-tomcat-7.0.67/temp
Using JRE_HOME:        /Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home
Using CLASSPATH:       /Users/Santi/apache-tomcat-7.0.67/bin/bootstrap.jar:/Users/Santi/apache-tomcat-7.0.67/bin/tomcat-juli.jar
</code>

=== Instalación en Debian utilizando apt ===

Si trabajamos con Debian existe la posibilidad de instalar Tomcat utilizando la herramienta //apt//. En el ejemplo siguiente instalamos el servidor de aplicaciones y todas herramientas y documentación (vienen como paquetes a parte en Debian):

<code bash>
santi@zenbook:$ sudo apt-get install tomcat8 tomcat8-*
</code>

En este caso, si queremos iniciar/detener/reiniciar el servidor, puesto que éste se encontrará ahora instalado como un servicio en nuestro sistema Linux tendremos que hacerlo como habitualmente se hace:

<code bash>
santi@zenbook:$ sudo service tomcat8 start
santi@zenbook:$ sudo service tomcat8 restart
santi@zenbook:$ sudo service tomcat8 stop
</code>

También tenemos que tener en cuenta que, en este caso, todos los ficheros de configuración de //Apache Tomcat// se encuentran en ''/etc/tomcat8''.

==== Configuración básica ====

En cualquier caso, al tratarse de un servidor de aplicaciones, lo habitual es que //escuche// en el puerto 8080, aunque hay que tener en cuenta que se puede cambiar en el caso de que en el equipo donde se encuentra instalado no haya un servidor web y además queramos que nuestra aplicación web quede expuesta al exterior. Nos interesará, por tanto, modificar el puerto al 80 para mayor comodidad a la hora de acceder a nuestra aplicación desde el navegador.

Para cambiar el puerto donde //Apache Tomcat// escuchará tenemos que editar el fichero ''conf/server.xml'' y cambiar el número del conector del protocolo HTTP:

<code xml>
. . .
<Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443" />
. . .
</code>

Independientemente del puerto que hayamos configurado, si accedemos a la página principal del servidor de aplicaciones nos encontraremos la portada:

<figure>
{{ tomcat_home.png?450 }}
<caption>Home Apache Tomcat</caption></figure>

Desde donde podemos acceder a diferentes secciones donde podemos monitorizar/configurar algunos aspectos del servidor

<figure>
{{ tomcat_status.png?450 }}
<caption>Estado del servidor</caption></figure>

<figure>
{{ tomcat_apps.png?450 }}
<caption>Listado de aplicaciones web desplegadas</caption></figure>

<figure>
{{ tomcat_vhosts.png?450 }}
<caption>Listado de hosts virtuales configurados</caption></figure>

Pero antes de poder acceder a las diferentes secciones del servidor desde el navegador hay que tener en cuenta que, por seguridad, dicho acceso se encuentra restringido y tendremos que registrar usuarios en ''conf/tomcat-users.xml'' con nombre de usuario, contraseña y los roles con los que accederan.

Podemos crear un usuario para cada rol o bien un usuario que tenga varios de ellos (incluso todos). Cada rol definido por //Tomcat// da acceso a una de las partes del servidor:
  * **manager-status**: Da acceso a la sección donde monitorizar el estado de Tomcat
  * **manager-gui**: Da acceso al listado de aplicaciones y a poder desplegarlas desde la web 
  * **admin-gui**: Da acceso a la parte de administración de hosts virtuales

La forma en como podemos editar el fichero y crear nuevos usuarios puede verse en el siguiente fragmento del fichero configuración extraido de una instalación limpia de //Tomcat// y modificado con un usuario ''tomcat'' y contraseña ''tomcat'' con todos los roles.

<code xml conf/tomcat-users.xml>
<tomcat-users>
<!--
  NOTE:  By default, no user is included in the "manager-gui" role required
  to operate the "/manager/html" web application.  If you wish to use this app,
  you must define such a user - the username and password are arbitrary.
-->
<!--
  NOTE:  The sample user and role entries below are wrapped in a comment
  and thus are ignored when reading this file. Do not forget to remove
  <!.. ..> that surrounds them.
-->

  <role rolename="tomcat"/>
  <user username="tomcat" password="tomcat" roles="manager-status, manager-gui, admin-gui"/>

</tomcat-users>
</code>

----

(c) 2023 Santiago Faci