Despliegue y Automatización de Aplicaciones: Docker, DevOps y AWS

Enviado por Chuletator online y clasificado en Informática y Telecomunicaciones

Escrito el en español con un tamaño de 7,16 KB

Archivos YAML

Los archivos YAML son archivos de configuración basados en texto, con una sintaxis de indentación que organiza la información en pares clave-valor.

Se utilizan para definir configuraciones en herramientas de orquestación como Docker Compose, Kubernetes y otros sistemas de automatización.

La legibilidad y estructura jerárquica hacen que sean ideales para describir la infraestructura y dependencias de una aplicación.

Docker Compose: Gestión de Servicios

Iniciar servicios: docker-compose up -d

Detener servicios: docker-compose stop / docker-compose down (detiene y elimina los contenedores)

Borrar servicios: Eliminar contenedores individualmente con docker rm

Dockerfile: Creación de Imágenes Personalizadas

Un Dockerfile es un archivo de instrucciones para construir una imagen Docker personalizada.

Instrucciones comunes:

  • FROM: Define la imagen base.
  • RUN: Ejecuta comandos durante la construcción de la imagen.
  • COPY o ADD: Copia archivos o directorios al contenedor.
  • EXPOSE: Expone un puerto.
  • CMD o ENTRYPOINT: Define el comando a ejecutar al iniciar el contenedor.

Se construye la imagen con: docker build -t mi_imagen .

Se ejecuta y prueba con: docker run -d -p <puerto_host>:<puerto_contenedor> mi_imagen

Despliegue de Aplicación con Nginx y MySQL usando Docker Compose

Se define un archivo docker-compose.yml que incluye al menos dos servicios:

  • Nginx: Actúa como servidor web y/o proxy inverso.
  • MySQL: Proporciona el motor de base de datos.

Pasos:

  1. Crear cada contenedor.
  2. Añadirlo a docker-compose.yml.
  3. Crear y añadir al Dockerfile.
  4. Recrear y lanzar todos los contenedores: docker-compose up -d
  5. Verificar: docker ps -a

LDAP (Lightweight Directory Access Protocol)

LDAP es un protocolo estándar para acceder y administrar servicios de directorio. Se utiliza comúnmente para almacenar información de usuarios, grupos y otros recursos, facilitando la autenticación y autorización.

  • La información se organiza en una estructura jerárquica (similar a un árbol).
  • Cada entrada tiene un Distinguished Name (DN) único.
  • Se utiliza un cliente LDAP que se conecta al servidor mediante el protocolo, generalmente a través del puerto 389 (o 636 para conexiones seguras con LDAPS).
  • Los clientes realizan consultas (búsquedas) y operaciones de modificación sobre la estructura del directorio.

Flujo de Autenticación LDAP en Nginx

Un diagrama conceptual del flujo de autenticación LDAP en Nginx incluiría los siguientes pasos:

  1. Solicitud del Cliente
  2. Interceptación en Nginx
  3. Consulta LDAP
  4. Validación LDAP
  5. Respuesta Nginx
  6. Acceso permitido o denegado

Despliegue en Render

Build: docker build -t nombre_imagen .

Run: docker run

Push: docker push nombre_imagen

Continuous Delivery

Es la práctica de mantener el software en un estado en el que siempre pueda ser desplegado a producción de forma segura y automatizada.

Implica la automatización de pruebas, builds y despliegues, permitiendo lanzamientos frecuentes y fiables.

Última Milla

Se refiere al tramo final del proceso de despliegue, en el que el software es entregado al entorno de producción y, por ende, a los usuarios finales.

Es crucial para garantizar que la versión final funcione correctamente en el ambiente real.

Pipeline

Pasos: Commit y Push / Build / Test / Deploy

Trunk Based Development vs Feature Branches

Trunk Based Development: Se trabaja directamente en la rama principal (trunk) con integraciones frecuentes, lo que minimiza divergencias y conflictos.

Feature Branches: Se crean ramas específicas para cada funcionalidad. Una vez completadas y probadas, se integran (merge) al trunk principal.

Herramientas de Integración Continua

Ejemplos: Jenkins, GitHub Actions. Estas herramientas automatizan la ejecución de pipelines, integrando, testeando y desplegando el código.

Principios y Prácticas de Integración Continua

  • Automatización
  • Integración frecuente
  • Feedback rápido

Entornos de Despliegue

Desarrollo / Staging / Producción

Canary Release

Es una estrategia de despliegue en la que una nueva versión de la aplicación se lanza inicialmente a un pequeño porcentaje de usuarios. Esto permite validar el comportamiento y detectar posibles problemas antes de un despliegue completo.

DevOps

Es una cultura y conjunto de prácticas que integran el desarrollo (Dev) y las operaciones (Ops) de TI. Busca mejorar la colaboración, acelerar el ciclo de desarrollo y garantizar la calidad y continuidad en el despliegue del software.

Principios y Buenas Prácticas de DevOps

  • Colaboración y Comunicación
  • Automatización
  • Monitoreo y Feedback
  • Mejora continua

GitHub Actions

Es la herramienta integrada en GitHub para automatizar workflows de desarrollo.

Permite definir pipelines en archivos YAML que se activan en respuesta a eventos (commits, pull requests, etc.), ejecutando tareas como tests, builds y despliegues.

Primer Workflow en GitHub Actions

  1. Crear .github/workflows
  2. Añadir un archivo YAML
  3. Hacer commit y push del archivo al repositorio.
  4. Revisar la ejecución del workflow en la pestaña “Actions” de GitHub

Servicios de Cómputo en AWS

Amazon EC2 (Elastic Compute Cloud)

Servicio de infraestructura como servicio (IaaS) que permite crear y gestionar instancias virtuales (máquinas virtuales). Brinda control total sobre el sistema operativo y la configuración del servidor.

AWS Lambda

Servicio de computación serverless que ejecuta funciones de código en respuesta a eventos, sin necesidad de aprovisionar ni gestionar servidores. Se paga por el tiempo de ejecución y es ideal para tareas de corta duración y escalables.

AWS Elastic Beanstalk

Plataforma como servicio (PaaS) que facilita el despliegue y gestión de aplicaciones web. Automatiza la configuración de la infraestructura (EC2, balanceo de carga, escalado) y permite centrarse en el desarrollo de la aplicación.

Categorización de Servicios de Cómputo en AWS

  • IaaS: Ej. EC2
  • PaaS: Ej. Elastic Beanstalk
  • Serverless: Ej. Lambda

Conclusiones Importantes

  • Flexibilidad y Escalabilidad
  • Elección según necesidades
  • Automatización y Gestión Simplificada

Entradas relacionadas: