Saltar al contenido principal

Desafío: Despliegue de la Aplicación "295topics" con Docker y Docker Compose

Descripción del Desafío:

Este desafío se centra en la configuración y despliegue de la aplicación "295topics", que consta de un frontend en Node.js, un backend en TypeScript, y una base de datos MongoDB, utilizando contenedores Docker y Docker Compose.

El objetivo es garantizar que la aplicación sea escalable, fácil de administrar, y se despliegue de manera eficiente.

Arquitectura:

Aplicarás tus habilidades de DevOps para containerizar y gestionar la aplicación "295topics". Esta aplicación consta de tres componentes principales:

  • Frontend en Node.js y Express: Servirá contenido web en el puerto 3000. Deberás crear un Dockerfile para el frontend, construir la imagen y publicarla en Docker Hub.

  • Backend en TypeScript: Se ejecutará en el puerto 5000 y se conectará a una base de datos MongoDB. Deberás crear un Dockerfile para el backend, construir la imagen y publicarla en Docker Hub.

  • Base de Datos MongoDB: Se desplegará a través de un contenedor de MongoDB. Además, deberás configurar un archivo mongo-init.js para cargar datos iniciales en la base de datos al iniciar el contenedor.

Arquitectura

Requisitos:

Preparación del Entorno

  1. Clona el repositorio del desafío:

    git clone -b ejercicio2-dockeriza https://github.com/roxsross/bootcamp-devops-2023.git
    cd 295topics-fullstack

Frontend en Node.js y Express

  • Configuración: El código fuente del frontend utiliza el puerto 3000 para exponer la aplicación.

  • Dockerfile: Crea un Dockerfile que incluya todas las dependencias necesarias y establezca el comando de inicio.

  • Construcción y Publicación: Construye la imagen del frontend y publícala en Docker Hub.

  • Conexión con el Backend: Asegúrate de que el frontend consume el endpoint del backend a través de la variable API_URI:

    API_URI=http://topics-api:5000/api/topics
  • Pruebas: Verifica el funcionamiento del frontend accediendo a http://localhost:3000. Revisa los logs para solucionar posibles problemas.

Backend en TypeScript

  • Configuración: El código fuente del backend utiliza el puerto 5000 y se conecta a una base de datos MongoDB.

  • Dockerfile: Crea un Dockerfile que incluya todas las dependencias necesarias y establezca el comando de inicio.

  • Variables de Entorno: Asegúrate de configurar las siguientes variables de entorno en el Dockerfile o en el archivo de configuración:

    DATABASE_URL=mongodb://<tu-contenedor-mongo>:27017
    DATABASE_NAME=TopicstoreDb
    HOST=0.0.0.0
    PORT=5000
  • Construcción y Publicación: Construye la imagen del backend y publícala en Docker Hub.

  • Pruebas: Verifica el funcionamiento del backend accediendo a http://localhost:5000/api/topics. Revisa los logs para identificar posibles errores.

Base de Datos MongoDB

  • Configuración Inicial: Utiliza el archivo mongo-init.js para precargar datos en la base de datos MongoDB al iniciar el contenedor.

  • Configuración del Contenedor: Configura un contenedor Docker para MongoDB y utiliza el archivo mongo-init.js para la inicialización.

  • Pruebas: Verifica que los datos se hayan cargado correctamente conectándote al contenedor MongoDB:

    docker exec -it <nombre-contenedor-mongo> mongosh
    > use TopicstoreDb
    > db.Topics.find()

Mongo Express

  • Configuración: Configura un contenedor Docker para Mongo Express y asegúrate de que esté correctamente conectado a la base de datos MongoDB para su gestión.

Docker Compose

  • Configuración de Servicios: Crea un archivo docker-compose.yml que defina los servicios para el frontend, el backend, MongoDB, y Mongo Express.
  • Dependencias de Servicios: Asegúrate de establecer las dependencias adecuadas para que los servicios se inicien en el orden correcto.
  • Pruebas: Verifica el correcto funcionamiento de la aplicación ejecutando docker-compose up y accediendo a los servicios correspondientes.

Desafío Adicional

  • Automatización de Despliegue: Crea un script Bash para automatizar la implementación de la aplicación en un entorno de producción.

Criterios de Evaluación

  • Configuración correcta de los servicios en el archivo docker-compose.yml.
  • Precarga exitosa de datos en MongoDB utilizando mongo-init.js.
  • Exposición correcta de puertos para el frontend y backend.
  • Conexión exitosa entre el frontend y backend a través de Docker Compose.
  • Configuración funcional de Mongo Express para la gestión de la base de datos.
  • Documentación clara y organización del código fuente.
  • Implementación exitosa en un servidor en la nube (si se realiza el desafío adicional).
  • Automatización del despliegue (si se realiza el desafío adicional).

Logros

Este desafío proporciona una experiencia práctica completa en DevOps, abarcando desde la creación de imágenes de contenedores hasta la orquestación de servicios y la gestión de bases de datos, permitiéndote desplegar y gestionar de manera eficiente la aplicación "295topics".