Apuntes DAM

Chuleta de Despliegue de Aplicaciones Web

Apache, Nginx, HTTPS, Tomcat, Docker, DNS, FTP, LDAP y CI/CD con los comandos y ficheros de configuración clave.

Ponte a prueba con un simulacro

Apache

<VirtualHost *:80>  ServerName tienda.local  DocumentRoot /var/www/tienda/public  <Directory /var/www/tienda/public>    AllowOverride All    Require all granted  </Directory>  ErrorLog ${APACHE_LOG_DIR}/tienda_error.log</VirtualHost>

a2ensite tienda · a2enmod rewrite ssl · apachectl configtest · systemctl reload apache2.

Tema: Servidores Web: Apache y Nginx

Nginx

server {  listen 80;  server_name tienda.local;  root /var/www/tienda/public;  location / { try_files $uri $uri/ /index.php?$query_string; }  location /api/ { proxy_pass http://127.0.0.1:8080/; }  location ~ \.php$ {    include fastcgi_params;    fastcgi_pass unix:/run/php/php8.3-fpm.sock;    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;  }}

nginx -t para comprobar la sintaxis y systemctl reload nginx para aplicar.

Tema: Servidores Web: Apache y Nginx

HTTPS

certbot --nginx -d tienda.comCertificado gratuito de Let's Encrypt
openssl req -x509 -newkey rsa:2048 -nodes …Autofirmado para pruebas
Redirect permanent / https://…Forzar HTTPS (301)
Strict-Transport-SecurityHSTS: el navegador solo usará HTTPS
Autenticación básicahtpasswd -c /etc/apache2/.htpasswd ana
Tema: Servidores Web: Apache y Nginx

Tomcat

webapps/app.warDespliegue: Tomcat lo descomprime solo
conf/server.xmlConectores (8080, 8443) y hosts
conf/tomcat-users.xmlUsuarios del gestor (rol manager-gui)
WEB-INF/web.xmlDescriptor de la aplicación
logs/catalina.outRegistro principal
java -jar app.jarSpring Boot lleva el servidor dentro
Tema: Servidores de Aplicaciones

Dockerfile

FROM eclipse-temurin:21-jdk AS buildWORKDIR /srcCOPY . .RUN ./mvnw -q package -DskipTests FROM eclipse-temurin:21-jreWORKDIR /appCOPY --from=build /src/target/app.jar app.jarEXPOSE 8080USER 1000CMD ["java", "-jar", "app.jar"]

Multietapa: la imagen final no lleva el compilador. Copia primero lo que menos cambia para aprovechar la caché.

Tema: Contenedores con Docker

Comandos Docker

docker build -t app:1.0 .Construir imagen
docker run -d -p 8080:80 --name web nginxContenedor en segundo plano, puerto anfitrión:contenedor
-v datos:/var/lib/mysql · -e CLAVE=valorVolumen · variable de entorno
docker ps -a · logs -f web · exec -it web shListar · registro · entrar
docker stop web · rm web · rmi imagenParar · borrar contenedor · borrar imagen
docker compose up -d · down · logsVarios servicios desde compose.yaml
Tema: Contenedores con Docker

compose.yaml

services:  web:    build: .    ports: ["8080:8080"]    environment:      DB_URL: jdbc:mysql://db:3306/tienda    depends_on:      db: { condition: service_healthy }  db:    image: mysql:8.4    environment: { MYSQL_DATABASE: tienda, MYSQL_ROOT_PASSWORD: ${DB_PASS} }    volumes: [datos:/var/lib/mysql]    healthcheck: { test: ["CMD", "mysqladmin", "ping"], interval: 5s }volumes:  datos:
Tema: Contenedores con Docker

DNS, FTP y LDAP

A · AAAA · CNAMENombre → IPv4 · IPv6 · alias
MX · TXT · NSCorreo · texto (SPF, verificación) · servidores del dominio
dig tienda.com A +shortConsultar un registro
FTP activo · pasivoEl servidor abre la conexión de datos · la abre el cliente
SFTP · FTPSSobre SSH · FTP con TLS
vsftpd: chroot_local_user=YESEncerrar al usuario en su carpeta
LDAP: dn, ou, cn, dcuid=ana,ou=personas,dc=empresa,dc=com
ldapsearch -x -b dc=empresa,dc=com "(uid=ana)"Buscar en el directorio
Tema: FTP, DNS y Servicios de Directorio

GitHub Actions

name: CIon: [push, pull_request]jobs:  test:    runs-on: ubuntu-latest    steps:      - uses: actions/checkout@v4      - uses: actions/setup-java@v4        with: { distribution: temurin, java-version: 21, cache: maven }      - run: mvn -B verify

Integración continua: compilar y probar en cada cambio. Entrega continua: listo para desplegar. Despliegue continuo: se publica solo.

Tema: Git, Documentación y CI/CD

Arquitecturas

IaaS · PaaS · SaaSMáquinas · plataforma gestionada · aplicación lista
Escalado vertical · horizontalMáquina más grande · más máquinas tras un balanceador
Proxy inversoRecibe las peticiones y las reparte a los servidores internos
Monolito · microserviciosUna aplicación · servicios pequeños independientes
Despliegue azul-verde · canarioCambiar de golpe · a una parte de usuarios primero
Tema: Arquitecturas de Despliegue y la Nube

Chuletas de otras asignaturas