User Tools

Site Tools


apuntes:servidores_aplicaciones

Servidores de aplicaciones

Servidores de aplicaciones más conocidos

Apache Tomcat

Instalación en Windows

Puesto que utilizamos XAMPP en Windows y Apache Tomcat viene como opción, siguiendo las instrucciones de la instalación de XAMPP de la parte de instalación de servidores web podéis ver como hacerlo. Una vez instalado la configuración es común tanto para Windows y Linux por lo que se puede acceder directamente a ese apartado.

Instalación en Linux

El servidor de aplicaciones 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.

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

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

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

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

santi@zenbook:$ ./shutdown.sh
Using CATALINA_BASE:   /Users/Santi/apache-tomcat-8.0.1
Using CATALINA_HOME:   /Users/Santi/apache-tomcat-8.0.1
Using CATALINA_TMPDIR: /Users/Santi/apache-tomcat-8.0.1/temp
Using JRE_HOME:        /Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home
Using CLASSPATH:       /Users/Santi/apache-tomcat-8.0.1/bin/bootstrap.jar:/Users/Santi/apache-tomcat-8.0.1/bin/tomcat-juli.jar
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):

santi@zenbook:$ sudo apt-get install tomcat8 tomcat8-*

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:

santi@zenbook:$ sudo service tomcat8 start
santi@zenbook:$ sudo service tomcat8 restart
santi@zenbook:$ sudo service tomcat8 stop

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

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:

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

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

Figure 1: Home Apache Tomcat

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

Figure 2: Estado del servidor
Figure 3: Listado de aplicaciones web desplegadas
Figure 4: Listado de hosts virtuales configurados

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.

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="manager-status"/>
  <role rolename="manager-gui"/>
  <role rolename="admin-gui"/>
  <user username="usuario" password="contrasena" roles="manager-status, manager-gui, admin-gui"/>
 
</tomcat-users>

Cómo configurar el Proxy AJP para conectar Tomcat con Apache

En el caso de que en el mismo servidor se encuentre ya funcionando un servidor Apache nos puede resultar útil poder configurar en él un host virtual cuyo destino real sea una aplicación web desplegada en el servidor de aplicaciones, simplificando así en gran medida la configuración de ambos servidores y permitiendo que convivan sin mayor problema. Podremos configurar un host virtual en Apache como lo veníamos haciendo hasta ahora ya que, en este caso, se trata simplemente de añadir un par de líneas en dicha configuración:

. . .
ProxyPass / ajp://localhost:8009/
ProxyPassReverse / ajp://localhost:8009/
. . .

En el caso de que queramos que este nuevo host virtual de Apache haga de proxy de una aplicación web concreta, podremos añadir el nombre de dicha aplicación al de la URL en las dos opciones ProxyPass y ProxyPassReverse:

. . .
ProxyPass / ajp://localhost:8009/mi_aplicacion/
ProxyPassReverse / ajp://localhost:8009/mi_aplicacion/
. . .

El siguiente paso será activar el módulo proxy_ajp si no está ya activado y, a continuación, reiniciar el servidor para que los cambios tengan efecto (tanto la configuración como la carga del módulo):

santi@zenbook:$ sudo a2enmod proxy_ajp
. . .
santi@zenbook:$ sudo service apache2 restart
. . .

Si todo está correcto hasta el momento, en la configuración del servidor Tomcat habrá que activar la siguiente línea en el fichero conf/server.xml (o /etc/tomcat8/server.xml si hemos instalado Tomcat con apt), que encontraremos comentada. Eso activa el protocolo AJP en el servidor de aplicaciones en el puerto 8009 en este caso:

conf/server.xml
. . .
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443"/>
. . .

Y a partir de ahora podemos visitar el nuevo host virtual creado en Apache y, de forma transparente, se cargará la aplicación web que se encuentra desplegada en el servidor Tomcat.

Cómo crear un hosting compartido

Seguridad

Configurar Tomcat para utilizar el protocolo HTTPS

Utilizaremos el comando keytool para generar un fichero de claves y un certificado.

santi@zenbook:$ keytool -genkey -alias tomcat -keyalg RSA
Enter keystore password:  
Re-enter new password: 
What is your first and last name?
  [Unknown]:  Santiago
What is the name of your organizational unit?
  [Unknown]:  Despliegue
What is the name of your organization?
  [Unknown]:  Colegio Montessori
What is the name of your City or Locality?
  [Unknown]:  Zaragoza
What is the name of your State or Province?
  [Unknown]:  Zaragoza
What is the two-letter country code for this unit?
  [Unknown]:  ES
Is CN=Santiago, OU=Despliegue, O=Colegio Montessori, L=Zaragoza, ST=Zaragoza, C=ES correct?
  [no]:  yes
 
Enter key password for <tomcat>
	(RETURN if same as keystore password):
santi@zenbook:$ ls /home/santi/.keystore
/home/santi/.keystore

Por defecto el fichero se crea en la carpeta del usuario que ha ejecutado el comando con el nombre .keystore. Podemos copiarlo dentro de la carpeta /etc/tomcat8 que es donde se almacenan los ficheros de configuración de Tomcat.

santi@zenbook:$ sudo cp /home/santi/.keystore /etc/tomcat8

A continuación, en el fichero de configuración principal de Tomcat, server.xml, tendremos que buscar la etiqueta donde se configura el conector para el puerto HTTPS y añadir algunos parámetros para comenzar a usarlo y asignarle el certificado que acabamos de crear.

La configuración por defecto es la que se muestra a continuación:

server.xml
. . .
<Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol"
      maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
      clientAuth="false" sslProtocol="TLS" />
. . .

Y tenemos que modificar los atributos de la etiqueta Connector para que quede como en el siguiente fragmento:

server.xml
. . .
<Connector SSLEnabled="true" acceptCount="100" clientAuth="false"
    disableUploadTimeout="true" enableLookups="false" maxThreads="25"
    port="8443" keystoreFile="/etc/tomcat8/.keystore" keystorePass="password"
    protocol="org.apache.coyote.http11.Http11NioProtocol" scheme="https"
    secure="true" sslProtocol="TLS" />
. . .

Una vez hechos estos cambios, tendremos que reiniciar el servidor de Tomcat y podremos visitar la dirección https://localhost:8443 para comprobar que el certificado funciona. Habrá que tener en cuenta que, puesto que el certificado es autofirmado, aparecerá una advertencia en el navegador avisando de ello.

Figure 5: Conexión HTTPS a Tomcat
Figure 6: Certificado (autofirmado) configurado en Tomcat

Despliegue de aplicaciones

Para desplegar aplicaciones se pueden utilizar diferentes vías:

Despliegue de aplicaciones utilizando el 'manager-gui'

Se pueden desplegar aplicaciones web en Tomcat utilizando el propio servidor y accediendo al manager-gui de forma que podemos cargar el fichero .war en el formulario que se puede ver más abajo y lanzarla para su despliegue inmediato.

Figure 7: Gestor de aplicaciones Tomcat
Figure 8: Despliegue de aplicaciones en Tomcat utilizando el manager-gui

Despliegue de aplicaciones utilizando la opción autoDeploy

Si tenemos la opción autoDeploy activada en Tomcat, éste estará continuamente buscando nuevas aplicaciones web desplegadas en la carpeta webapps. De esta forma podemos copiar directamente el fichero .war de nuestra aplicación a dicha carpeta y será desplegada automáticamente a los pocos segundos.

Es necesario comprobar que Tomcat está configurado para soporte autoDeploy si queremos usar esta característica (por defecto lo está).

server.xml
. . .
<Host name="localhost"  appBase="webapps"
      unpackWARs="true" autoDeploy="true">
. . .

En este caso hay que tener en cuenta que la carpeta donde tenemos que copiar el fichero .war es /var/lib/tomcat8/webapps.

Así, podríamos directamente subir por FTP el fichero .war a dicha carpeta o bien podríamos copiarla utilizando el comando scp (copia remota segura).

santi@zenbook:$ scp mi_app.war santi@server:/var/lib/tomcat8/webapps
mi_app.war                                                    100%  990     2.0MB/s   00:00

Ejercicios

  1. Configura un servidor FTP para utilizarlo como herramienta para el auto despliegue de aplicaciones web en tu servidor Tomcat
  2. Configura un servidor SSH para utilizarlo como herramienta para el auto despliegue de aplicaciones web en tu servidor Tomcat

Pruebas de rendimiento

Utilizar contenedores con Docker


Ejercicios

  1. Empezando desde la OVA de la máquina Debian 9 que tenéis en la sección de Descargas, realiza las siguientes instalaciones/configuraciones sobre la misma:
    • Apache Tomcat 8
    • Configurar acceso web a Tomcat 8 (configurar usuarios)
    • Preparar una aplicación web de ejemplo y despliegala en Tomcat
    • Configurar Apache y Tomcat para usar el proxy_ajp y poder poder acceder a la aplicación web desde un host virtual
    • Deshabilitar el conector para el puerto 8080 de Tomcat
    • Instalar un servidor SSH (openssh) en la máquina Debian 9
    • Instalar un servidor FTP (pure FTP) en la máquina Debian 9

  2. Empezando desde la OVA de la máquina Debian 9 que tenéis en la sección de Descargas, realiza las siguientes instalaciones/configuraciones sobre la misma:
    • Apache
    • Apache Tomcat 8
    • Configurar acceso web a Tomcat 8 (configurar usuarios para poder acceder a la aplicación web para desplegar aplicaciones) (CAPTURA)
    • Preparar una aplicación web de ejemplo y despliegala en Tomcat (CAPTURA)
    • Crea un host virtual en Apache para el dominio tunombreyapellidos.com (CAPTURA)
    • Configurar Apache y Tomcat para usar el proxy_ajp y poder poder acceder a la aplicación web desde el host virtual directamente ( www.tunombreyapellidos.com ) (CAPTURA)
    • Deshabilitar el conector para el puerto 8080 de Tomcat de forma que la aplicación web instalada sólo sea accesible a través del host virtual de Apache (CAPTURA)
    • Instalar un servidor SSH (openssh) en la máquina Debian 9
    • Despliega la aplicación web hecha para Tomcat subiéndola remotamente por SSH al servidor (CAPTURA)
    • Instalar un servidor FTP (pure FTP) en la máquina Debian 9
    • Despliega la aplicación web hecha para Tomcat subiéndola remotamente por FTP al servidor (CAPTURA)
    • Deshabilita el acceso al manager-app de Tomcat (CAPTURA)
    • Realiza una segunda aplicación web, despliegala en Tomcat utilizando el servidor FTP y configura otro host virtual en Apache para acceder a ella (en este caso a través de www.tuapellidosynombre.com ) (CAPTURA)

© 2018 Santiago Faci

apuntes/servidores_aplicaciones.txt · Last modified: 2019/01/04 13:02 (external edit)