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
- Recibe las peticiones http y las redirige al contenedor web.
- este ejecutará los componentes web necesarios (servlets o archivos JSP).
- 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 "%r" %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!!!

DAW-UT02-Configuración y administración de servidores de aplicaciones
By Manuel Jesús Rodríguez Arabi
DAW-UT02-Configuración y administración de servidores de aplicaciones
- 323