Skip to content

VPS - CI/CD

El flujo de CI/CD de Checkout v2 está diseñado para automatizar la integración y entrega continua del proyecto. Mediante la combinación de herramientas como GitHub Actions, Docker y Prisma, se asegura que las actualizaciones de código se desplieguen de manera eficiente y sin interrupciones en producción. El proceso comienza con la clonación del repositorio, seguida por la validación y aplicación de migraciones de base de datos. Posteriormente, se implementan los contenedores y se limpia el entorno, manteniendo la infraestructura actualizada y optimizada. Este enfoque permite una integración fluida entre el desarrollo, las pruebas y el despliegue, minimizando el riesgo de errores y garantizando una entrega continua de valor.

Para que los scripts funcionen correctamente, se recomienda generar las variables de entorno dentro de la VPS o modificar el template del docker-compose.

Flujo de CI/CD

Flujo CI CD Checkout v2

Herramientas

Docker Hub

Utilizamos Docker Hub para el almacenamiento de imágenes de Docker en repositorios privados, utilizando así un registro de actualización para mantener las imágenes de una manera más eficiente.

Scripts y archivos

Ambos script bash requieren necesariamente de instalar npm (version 10) y git (version lts )

Se desarrollaron varios archivos que permiten una mejor gestión de desarrollo e integración continua, manejándolo mediante varios scripts y archivos:

ScriptDescripción
update_and_restart.shActualiza los contenedores en caliente
migrate_db.shRealiza la migración de base de datos según el esquema de Prisma
checkoutv2-compose.ymlDocker-compose conteniendo todas las propiedades necesarias para levantar el proyecto

update_and_restart.sh

Este script realiza un despliegue automático con Docker de la siguiente manera:

  1. Verifica si el archivo docker-compose.yml existe.
  2. Descarga las últimas versiones de las imágenes de los contenedores.
  3. Reinicia los contenedores aplicando la actualización sin detener la aplicación.
  4. Elimina imágenes antiguas que no están en uso.
  5. Muestra los contenedores en ejecución.
  6. (Opcional) Muestra los logs en tiempo real de los contenedores. El objetivo es actualizar y gestionar los contenedores de forma rápida y eficiente.

El link del recurso se puede encontrar Dentro del repositoriode Github

migrate_db.sh

Este script realiza lo siguiente:

  1. Clona un repositorio de GitHub que contiene un archivo schema.prisma de Prisma.
  2. Verifica si el archivo schema.prisma existe en el repositorio clonado.
  3. Copia el archivo schema.prisma al directorio actual.
  4. Ejecuta una migración de base de datos usando Prisma (prisma db push), aplicando el esquema del archivo copiado.
  5. Muestra un mensaje de éxito si la migración es exitosa o un error si algo falla.
  6. Elimina el directorio temporal con el repositorio clonado al finalizar el script.

El objetivo es clonar un repositorio, aplicar cambios de migración a la base de datos y limpiar el entorno después.

El link del recurso se puede encontrar Dentro del repositoriode Github

checkoutv2-compose.yml

Este archivo de configuración de Docker Compose define varios servicios necesarios para una aplicación, cada uno con su respectiva configuración:

  1. redis:

    • Usa la imagen oficial de Redis.
    • Se reinicia automáticamente y expone el puerto 6379.
  2. mongodb:

    • Usa una imagen de MongoDB configurada con autenticación.
    • Expondrá el puerto 27017
    • Utiliza un volumen persistente mongodb_data para almacenar los datos.
    • Se configura con variables de entorno para la inicialización de la base de datos (usuario, contraseña y nombre de la base de datos).
  3. frontend:

    • Utiliza la imagen de Docker para el frontend del checkout.
    • Se reinicia automáticamente y expone el puerto 4000.
  4. middleend:

    • Usa una imagen personalizada para el middleend.
    • Depende de los servicios redis y mongodb para funcionar.
    • Se reinicia automáticamente y expone el puerto 3015.
    • Contiene varias variables de entorno para configuraciones de AWS y de la base de datos.
  5. Volumen:

    • Se define un volumen persistente mongodb_data para MongoDB.
  6. Red:

    • Utiliza la red por defecto con el driver bridge.

En resumen, el archivo configura un entorno Docker para una aplicación que incluye Redis, MongoDB, un frontend y un middleend, todos comunicándose entre sí mediante variables de entorno y configuraciones de red.

Se utiliza una imágen de mongo de la comunidad, preparado con un replica set de una sola instancia ya preparado para utilizar mongoDB con PrismaORM, en una situación escalable, se deberá de modificar esta imágen por una multi_instancia con al menos 3 replicas para mejorar la velocidad de lectura a alrededor de 35 lecturas por segundo

El link del recurso se puede encontrar Dentro del repo de Github