Page cover

MERN Stack

La pila MERN es un stack de servidor web muy común en desaarrollo web moderno, consiste en MongoDB + EXpress.js + React.js + Node.js vamos a ver como hacer un despliegue de servidor con este stack.

Guía: https://www.mongodb.com/resources/languages/mern-stack-tutorialarrow-up-right

¿Qué es la pila MERN?

La pila MERNarrow-up-right es un marco de desarrollo web que consta de MongoDB, Express, React.js y Node.js. Es una de varias variantes de la pila MEANarrow-up-right.

Cuando usas la pila MERN, trabajas con React para implementar la capa de presentación, Expressarrow-up-right y Node.js para formar la capa intermedia o de aplicación, y MongoDB para crear la capa de base de datos.

En este tutorial de la pila MERN, utilizaremos estas cuatro tecnologías para desarrollar una aplicación básica capaz de registrar la información de los empleados y mostrarla usando el frontend React.

¿Qué es realmente cada componente?

MongoDB: Base de datos NoSQL, scucha en el puerto 27017 por defecto.

Express: Es un framework minimalista de Node.js que gestiona las peticiones HTTP. Piénsalo como el "Apache/Nginx" pero a nivel de aplicación JavaScript. Express crea un servidor HTTP que escucha en un puerto (ej: 3000, 5000).

React (con Vite): Es el frontend. Vite es una herramienta de build que:

  • En desarrollo: Levanta un servidor de desarrollo (puerto 5173 por defecto)

  • En producción: Genera archivos estáticos HTML/CSS/JS que necesitas servir

Node.js: El runtime de JavaScript en el servidor. Es como tener PHP instalado, pero para JavaScript.

Arquitectura de despliegue típica

Cloudflare no esta optimizado para servir archivos estáticos del frontend por lo que la opción más viable en estos casos es usar: Nginx + Cloudflare Tunnel más recomendado para producción:

  • Nginx sirve el frontend (archivos estáticos)

  • Nginx hace proxy al backend (Express API)

  • Cloudflare Tunnel apunta a Nginx

Ventajas de esta configuración:

  • Frontend y Backend en el mismo dominio (sin problemas CORS)

  • Nginx optimizado para servir archivos estáticos

  • Node.js solo maneja la lógica de API

  • MongoDB protegida (solo acceso local)

  • PM2 mantiene Node.js vivo y con autoarranque

  • Cloudflare proporciona SSL y seguridad adicional

Diagrama de flujo de datos

Para esta implementación usaremos un proyecto guiado de listado y uso de tareas que seguirá este diagrama de flujo:

Vamos a ver como implementarlo esto paso a paso:


Guia de despliegue

Para el entorno usaremos una máquina virtual ubuntu desktop 22.04 con visualcode instalado.

1. Instalación de Componentes Base

Actualizar el sistema

Instalar Node.js (v20 LTS recomendado)

Instalar MongoDB

Instalar Nginx

Instalar PM2

Este paquete se instala globalmente y nos va a servir para mantener Node.js ejecutándose:

2. Estructura de Directorios Recomendada

Crear estructura:

3. Configuración de MongoDB

Para mongoDB puedes hacerlo por terminal o usar aplicaciones gráficas como compass, crearemos un usuario admin y otro para la aplicación.

circle-info

Puedes ver los usuarios con:

Podemos además, habilitar autenticación (opcional pero recomendado)

Para el testeo puedes probar con:


4. Despliegue de aplicación

Para el despliegue de la aplicación vamos a hacer uso de una app de ejemplo que he creado, tienes la explicación de la app en el siguiente enlace, además esta subida a Github para su despliegue óptimo:

Backend

Vamos ahora sí, con la instalación de dependencias:

Vamos a copiar el contenido de las variables de entorno:

Ahora iniciamos el proyecto con PM2

Aquí te dirá algo como:

Simplemente ejecuta ese comando. Ahora, para verificar el estado puedes:

Y puedes probar con:

Frontend

Ahora vamos a construir el frontend:

Elegimos el entorno de desarrollo para las variables:

  • Ahora descomenta el que quieras usar, te recomiendo tirar directamente al de producción.

Construimos ahora sí la app:

Y vamos a dar los permisos necesarios:

chevron-rightApp frontend testinghashtag

Si quieres probar el frontend por separado puedes probar en entorno de test:

.env:

Ejecutar:

Acceso: http://localhost:5173


5. Configuración de Nginx

Creamos la configuración del sitio con un virtualhost:

Cuyo contenido sea:

Y activamos el sitio pasandolo a sites-enabled con un enlace simbólico:

Para verificar, tan sencillo como:

Aqui me he quedado!!!!!


EXTRAS OPCIONALES

1- Configuración de Cloudflare Tunnel

Este paso es opcional si lo que se quiere es funcionar en testing, si se quiere usar un dominio entonces optaremos con esto aconectarlo directamente a nginx:

Ahora quédate con el UUID que te ha dado (el que estan en el .json creado) y crea un archivo nuevo:

Contenido de config.yml:

Ejecutar túnel:

Comprobamos:


2- Flujo de Actualización

Como la aplicación no tiene por que ser estática, aquí va un flujo de actualización para seguir los estándares de CI/CD:

1. Actualizar Backend

2. Actualizar Frontend


RESUMEN: Comandos Útiles para Gestión

circle-info

Tienes algunos Logs útiles que te pueden servir para debugging:

Última actualización