UT02. Configuración y administración de servidores de aplicaciones

2021-22

DESPLIEGUE DE APLICACIONES WEB

Introducción a las aplicaciones Web y servidores de aplicaciones

Una aplicación web puede considerarse como una extensión de un servidor de aplicaciones o de un servidor web.

Cliente (navegador)

Protocolo (HTTP/HTTPS)

Servidor (Apache)

Introducción a las aplicaciones Web y servidores de aplicaciones

¿Qué es un servidor de aplicaciones?

Es un software que ejecuta aplicaciones en un equipo remoto con el objetivo de dar servicio a otras aplicaciones cliente situadas en el equipo del usuario. Los servidores de aplicaciones, además, proporcionan un conjunto de servicios que facilitan el desarrollo de la lógica de negocio.

Introducción a las aplicaciones Web basadas en Java EE

Arquitectura que permite la implementación de aplicaciones que dan servicio a otras aplicaciones cliente.

Ofrece servicios para separar

  • Lógica de negocio (operaciones internas)
  • Lógica de presentación (interfaz de usuario)

Introducción a las aplicaciones Web basadas en Java EE

Java EE sigue un modelo:

Basado en componentes

Distribuido

Multicapa

Ud´s de Sw que agrupan funciones

Cada componente puede ejecutarse en un sistema diferente. Comunican entre sí.

Cada tipo de componente se aloja en una capa diferente.

Introducción a las aplicaciones Web basadas en Java EE

Servlets y JSP

Servlets: son clases en Java que reciben peticiones y ofrecen respuestas de forma dinámica. (HTTP)

JavaServer Pages: genera contenido web dinámico (parecido a PHP o ASP.NET).

Se compilan transformándose en un Servlet

Una aplicación web está formada por uno o más componentes web (Servlets, JSP, JSF, etc.), y también, por otros recursos estáticos opcionales: HTML, imágenes, CSS, JavaScript, sonidos, etc.

Servlets y JSP

Estructura de una aplicación WEB

Una aplicación web Java EE puede desplegarse en un contenedor web usando el formato expandido o empaquetado como WAR.

Directorio Raíz

ejemplo/

Recursos estáticos

index.jsp
images/logo.jpg
css/main.css
js/index.js

Estructura de una aplicación WEB

Directorios especiales: META-INF y WEB-INF.

No se sirven directamente al cliente como los anteriores. Tienen otro propósito.

Estructura de una aplicación WEB

WEB-INF contiene

Descriptor de Despliegue (web.xml)

Clases (*.class) dentro de /classes. 

Librerias (*.jar) dentro de /lib. 

Otros archivos y recursos internos

Todos los archivos privados, al igual que los ficheros .class de los servlets, deberían almacenarse dentro del directorio WEB-INF.

Estructura de una aplicación WEB

META-INF contiene

Archivos de configuración adicionales (context.xml), confiuración de integración en un ambiente concreto

MANIFEST.MF (info sobre el paquete JAR, usado también en empaquetados WAR). 

Estructura de una aplicación WEB

.
├── index.html
├── index.jsp
├── META-INF
│   └── MANIFEST.MF
└── WEB-INF
    ├── classes
    │   ├── agenda
    │   │   ├── Agenda.class
    │   │   └── Cita.class
    │   └── servlets
    │       └── ExportarLista.class
    └── web.xml

Estructura completa de ejemplo

Empaquetado WAR de aplicaciones web

Permite empaquetar en una sola unidad aplicaciones web

Java EE completas

WAR: Web Application Archive

jar cf ejemplo.war -C ruta_a_version_expandida .

Alternativas a línea de comandos son IDEs como NetBeans, IntelliJ IDEA, etc. También Maven o Ant

Empaquetado WAR de aplicaciones web

usuario@Ubuntu:~$ jar cf ejemplo.war -C /home/usuario/projects/webapps/ejemplo .
usuario@Ubuntu:~$ jar tf ejemplo.war 
META-INF/
META-INF/MANIFEST.MF
index.html
index.jsp
WEB-INF/
WEB-INF/web.xml
WEB-INF/classes/
WEB-INF/classes/servlets/
WEB-INF/classes/servlets/ExportarLista.class
WEB-INF/classes/agenda/
WEB-INF/classes/agenda/Agenda.class
WEB-INF/classes/agenda/Cita.class

El descriptor de despliegue

documento XML que describe las características de despliegue de una aplicación, un módulo o un componente.

No es obligatorio, pero si se incluye debe ir dentro de

WEB-INF y llamarse web.xml

El descriptor de despliegue

El servidor de aplicaciones Tomcat

Apache Tomcat es, a la vez, un servidor HTTP y un contenedor web

  1. Recibe las peticiones http y las redirige al contenedor web.
  2. este ejecutará los componentes web necesarios (servlets o archivos JSP).
  3. Una vez que procesada la petición, el resultado vuelve a ser enviado al cliente web (navegador) por el servidor HTTP.

Versiones de Tomcat

El servidor de aplicaciones Tomcat

!Pues manos a la obra!

Configuración básica de Tomcat

Ubicación: directorio conf/ o raíz install /etc/tomcat9

  • server.xml: Configuración principal (servidor, servicios, conectores, motor, hosts, etc). Anidamiento
  • context.xml: contexto base de todas las aplicaciones web que se ejecutan en Tomcat. No debe modificarse (aunque cada app puede tener uno suyo propio).
  • web.xml: descriptor de despliegue por defecto. Tampoco debe modificarse (cada app puede luego tener el suyo propio).
  • tomcat-users.xml: configuración de los usuarios que podrán usar el gestor de aplicaciones web (Despliegue desde entorno web)

Configuración básica de Tomcat

Más importante: server.xml

Servir una aplicación web con Tomcat

Habitual: Forma dinámica (Server web funcionando)

1. Copiar y configurar manualmente las aplicaciones web (directorio de despliegue indicado en server.xml. Defecto webapps /var/lib/tomcat9)

2. Despliegue Remoto:

a. Usando gestor de aplicaciones web

b. Con Sw específico (Maven o Ant)

Implementar el registro de acceso

<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="catalina_access_log" suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />

1. Ubicación: Engine, Host, Contexto de app web

2. Atributos: className(obligatorio), directory, prefix, suffix, pattern

%h (hostname), %u (remote user), %t(datetime), ...

/var/lib/tomcat9/logs/catalina_access_log.txt

Sesiones persistentes

Sesión: Información que la app web almacena de cada cliente.

  • Carrito compra
  • Datos de form web
  • Roles y permisos de usuario autenticado

Para ello se hace uso de Cookies

1. Ubicación: META-INF/context.xml --> Manager

2. Tipos:

StandardManager (por defecto), PersistentManager (almacena sesiones que aún no han caducado) --> muy útil.

Sesiones persistentes

Ejemplo de código de una Sesión persistente

<?xml version="1.0" encoding="UTF-8"?>
<Context>
	<Manager className="org.apache.catalina.session.PersistentManager" saveOnRestart="true" 
		maxActiveSession="3" minIdleSwap="10" maxIdleSwap="60" >
		<Store className="org.apache.catalina.session.FileStore"/>
	</Manager>
</Context>

Integración de Tomcat con Apache

Comunicar Apps que escuchen en el puerto 80 (Apache) y el puerto 8080 (Tomcat)

1. Configurar Tomcat para que acepte conexiones AJP

2. Reiniciar Tomcat

<Service name="Catalina">
...
    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
...
</Service>

Integración de Tomcat con Apache

Comunicar Apps que escuchen en el puerto 80 (Apache) y el puerto 8080 (Tomcat)

3. Configurar Servidor Web Apache

4. Habilitar módulo proxy_ajp

sudo a2enmod proxy_ajp

5. Reiniciar Apache

Integración de Tomcat con Apache

6. Añadir configuración para redirección de peticiones

<VirtualHost *:80>
     ServerAdmin webmaster@localhost
     DocumentRoot /var/www/html	

     ErrorLog ${APACHE_LOG_DIR}/error.log
     CustomLog ${APACHE_LOG_DIR}/access.log combined

     ProxyPass "/ejemplo" "ajp://localhost:8009/ejemplo"

</VirtualHost>

Integración de Tomcat con Apache

Considerar estas 3 acciones. Son muy importantes

1. No mezclar apps web directamente accesibles desde Tomcat con acceso vía AJP

2. Limitar las IP que acceden a las apps web de Tomcat (que solo acceda el servidor web Apache)

3. Proteger Tomcat con un cortafuegos

Seguridad

Recomendado: META-INF/context.xml

* Remote Address Filter: limita acceso a IP`s

* Remote Host Filter

<Valve className="org.apache.catalina.valves.RemoteAddrValve" deny="127.*">
<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="192\.168.*">
<Valve className="org.apache.catalina.valves.RemoteHostValve" deny="pc_fp.*">

El gestor de aplicaciones web de Tomcat

Instalación: sudo apt-get install tomcat9-admin

 Acceso: 

  • http://localhost:8080/manager
  • http://ip_server_remoto:8080/manager

Configuración del gestor de aplicaciones

Protección mediante usuario y password

 Roles de Usuario: 

  • manager-gui: acceso total
  • manager-script: solo modo texto para despliegue
  • manager-status: solo verán la página de estado de las apss

 Conf. de Usuarios: /etc/tomcat9/tomcat-users.xml

Precauciones adicionales

Limitar el acceso

 Conveniente configurar el fichero de contexto del gestor para limitar las direcciones IP que pueden acceder.

 Ubicación: 

* webapps/manager/META-INF/context.xml (inst. manual)

* /etc/tomcat9/Catalina/localhost (inst. desde repo.)

 <Context path="/localhost" docBase="/etc/tomcat9/Catalina" antiResourceLocking="false" privileged="true"> <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="127\.0\.0\.1|192\.168\.1\.130" /> </Context>

Construcción y despliegue automático con Ant

Herramienta para la realización de tareas mecánicas y repetitivas (fase construcción y compilación)

 Trabajar sin Ant implica una compilación manual de todos los ficheros .java (sin un control de los que han sido modificados y de los que no), incluir los CLASSPATH relativos adecuados, tener los ficheros .class mezclados con el código fuente, etc.; sin embargo con Ant, en el fondo, no estás más que automatizando tareas, para que, al final, con un solo comando puedas compilar desde cero tu proyecto, ejecutar pruebas, generar la documentación, empaquetar el programa, etc.

Instalación de NetBeans y Ant en Ubuntu

Crear un proyecto Java con ANT y Netbeans

Configuración del fichero build.xml de ANT

Buen trabajo!!!

Made with Slides.com