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.
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 NginxNginx
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 NginxHTTPS
| certbot --nginx -d tienda.com | Certificado gratuito de Let's Encrypt |
|---|---|
| openssl req -x509 -newkey rsa:2048 -nodes … | Autofirmado para pruebas |
| Redirect permanent / https://… | Forzar HTTPS (301) |
| Strict-Transport-Security | HSTS: el navegador solo usará HTTPS |
| Autenticación básica | htpasswd -c /etc/apache2/.htpasswd ana |
Tomcat
| webapps/app.war | Despliegue: Tomcat lo descomprime solo |
|---|---|
| conf/server.xml | Conectores (8080, 8443) y hosts |
| conf/tomcat-users.xml | Usuarios del gestor (rol manager-gui) |
| WEB-INF/web.xml | Descriptor de la aplicación |
| logs/catalina.out | Registro principal |
| java -jar app.jar | Spring Boot lleva el servidor dentro |
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 DockerComandos Docker
| docker build -t app:1.0 . | Construir imagen |
|---|---|
| docker run -d -p 8080:80 --name web nginx | Contenedor en segundo plano, puerto anfitrión:contenedor |
| -v datos:/var/lib/mysql · -e CLAVE=valor | Volumen · variable de entorno |
| docker ps -a · logs -f web · exec -it web sh | Listar · registro · entrar |
| docker stop web · rm web · rmi imagen | Parar · borrar contenedor · borrar imagen |
| docker compose up -d · down · logs | Varios servicios desde compose.yaml |
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 · CNAME | Nombre → IPv4 · IPv6 · alias |
|---|---|
| MX · TXT · NS | Correo · texto (SPF, verificación) · servidores del dominio |
| dig tienda.com A +short | Consultar un registro |
| FTP activo · pasivo | El servidor abre la conexión de datos · la abre el cliente |
| SFTP · FTPS | Sobre SSH · FTP con TLS |
| vsftpd: chroot_local_user=YES | Encerrar al usuario en su carpeta |
| LDAP: dn, ou, cn, dc | uid=ana,ou=personas,dc=empresa,dc=com |
| ldapsearch -x -b dc=empresa,dc=com "(uid=ana)" | Buscar en el 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 verifyIntegración continua: compilar y probar en cada cambio. Entrega continua: listo para desplegar. Despliegue continuo: se publica solo.
Tema: Git, Documentación y CI/CDArquitecturas
| IaaS · PaaS · SaaS | Máquinas · plataforma gestionada · aplicación lista |
|---|---|
| Escalado vertical · horizontal | Máquina más grande · más máquinas tras un balanceador |
| Proxy inverso | Recibe las peticiones y las reparte a los servidores internos |
| Monolito · microservicios | Una aplicación · servicios pequeños independientes |
| Despliegue azul-verde · canario | Cambiar de golpe · a una parte de usuarios primero |
apuntesdam.com/subject/despliegue/chuleta
Chuletas de otras asignaturas
Entornos de DesarrolloProgramaciónLenguajes de MarcasBases de DatosSistemas InformáticosAcceso a DatosDesarrollo de InterfacesProgramación Multimedia y Dispositivos MóvilesProgramación de Servicios y ProcesosSistemas de Gestión EmpresarialDesarrollo Web en Entorno ClienteDesarrollo Web en Entorno ServidorDiseño de Interfaces Web