Ya sabemos qué es Node.js y por qué encaja con una plataforma como Escena Viva. Toca instalarlo. Podría parecer un trámite —descargar un instalador y siguiente, siguiente, siguiente— pero la forma en que instales Node.js condiciona el resto de tu vida como desarrollador: si mañana un cliente exige la versión 22 y otro la 24, si tu equipo debe reproducir exactamente tu entorno, o si te encuentras con el clásico error de permisos al instalar una herramienta global.
En esta lección instalaremos Node.js de la forma correcta (con un gestor de versiones), verificaremos que todo funciona, configuraremos el editor y crearemos la estructura inicial de la carpeta escena-viva/, que nos acompañará hasta el final del curso.
Contenido
- Las tres formas de instalar Node.js
- Instalación con nvm en Linux y macOS
- Instalación en Windows: nvm-windows y fnm
- Verificación: qué se instala junto a Node
- Elegir versión para un proyecto real: LTS vs Current
- El fichero
.nvmrcdel proyecto - Configuración del editor y de la terminal
- Creación de la carpeta del proyecto Escena Viva
- Permisos: por qué nunca debes usar
sudo npm install -g
- Las tres formas de instalar Node.js
| Método | Cómo funciona | Ventajas | Inconvenientes | ¿Recomendado? |
|---|---|---|---|---|
| Instalador oficial (nodejs.org) | Descargas un .msi, .pkg o binario y lo instalas en el sistema |
Muy sencillo; sirve para probar en 2 minutos | Una sola versión a la vez; instala en directorios del sistema (origen de problemas de permisos); actualizar es reinstalar | Solo para una prueba rápida |
Gestor de paquetes del sistema (apt, dnf, brew, winget, choco) |
Node se instala como cualquier otro programa del sistema | Integrado con las actualizaciones del sistema | Las distribuciones suelen ir por detrás en versiones; a veces empaquetan npm por separado; cambiar de versión es doloroso | Aceptable en servidores gestionados, no en tu equipo de desarrollo |
| Gestor de versiones (nvm, fnm, Volta, nvm-windows) | Instala varias versiones de Node en tu carpeta personal y conmuta entre ellas | Varias versiones conviviendo; cambio instantáneo; sin sudo; versión por proyecto vía .nvmrc |
Un paso extra de instalación inicial | Sí. Es la opción de esta lección. |
La razón de fondo para preferir un gestor de versiones es sencilla: los proyectos reales tienen ciclos de vida distintos. La API antigua de Escena Viva puede estar en Node 22 mientras el nuevo panel de organizadores se desarrolla en Node 24. Sin un gestor de versiones, eso te obliga a desinstalar y reinstalar constantemente.
Comparativa de los gestores más habituales:
| Gestor | Plataformas | Lenguaje | Velocidad | Nota |
|---|---|---|---|---|
| nvm | Linux, macOS, WSL | script de shell | Media | El más extendido; el estándar de facto |
| nvm-windows | Windows | Go | Media | Proyecto distinto de nvm, comandos parecidos pero no idénticos |
| fnm | Linux, macOS, Windows | Rust | Muy alta | Compatible con .nvmrc; excelente alternativa moderna |
| Volta | Linux, macOS, Windows | Rust | Alta | Fija la versión en package.json y la aplica automáticamente |
En este curso usaremos nvm como referencia (y fnm o nvm-windows en Windows), porque .nvmrc es un fichero que entienden todos ellos.
- Instalación con nvm en Linux y macOS
Paso 1: instalar nvm
# Descarga e instala nvm en tu carpeta personal (~/.nvm)
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bashEl script añade unas líneas a tu fichero de configuración de shell (~/.bashrc, ~/.zshrc o ~/.profile) que cargan nvm al abrir la terminal. Cierra y vuelve a abrir la terminal, o recárgala:
# Recarga la configuración del shell sin cerrar la terminal
source ~/.bashrc # si usas bash
source ~/.zshrc # si usas zshComprueba que nvm responde:
Si imprime vacío, el script no se ha cargado. Revisa que las líneas de nvm estén en el fichero de configuración que tu terminal lee realmente (en macOS con zsh es
~/.zshrc).
Paso 2: instalar la última versión LTS
nvm descarga el binario, lo coloca en ~/.nvm/versions/node/ y lo activa en la sesión actual.
Salida de ejemplo:
-> v24.5.0 default -> lts/* (-> v24.5.0) node -> stable (-> v24.5.0) lts/* -> lts/krypton (-> v24.5.0)
Paso 3: fijar la versión por defecto
Sin este paso, cada terminal nueva abrirá sin ninguna versión activa.
Paso 4: conmutar entre versiones
nvm install 22 # Instalar también la línea 22 (LTS en mantenimiento)
nvm use 22 # Activarla en esta terminal
node -v # v22.x.y
nvm use --lts # Volver a la LTS activa
node -v # v24.x.yResumen de comandos de nvm:
| Comando | Qué hace |
|---|---|
nvm install --lts |
Instala la última versión LTS |
nvm install 24.5.0 |
Instala una versión exacta |
nvm use 24 |
Activa la 24 más reciente instalada, solo en esta terminal |
nvm use |
Lee .nvmrc del directorio actual y activa esa versión |
nvm ls |
Lista las versiones instaladas |
nvm ls-remote --lts |
Lista las LTS disponibles para descargar |
nvm alias default 'lts/*' |
Define la versión por defecto de las terminales nuevas |
nvm uninstall 20 |
Elimina una versión que ya no necesitas |
nvm current |
Muestra la versión activa |
- Instalación en Windows: nvm-windows y fnm
En Windows, el nvm de Linux no funciona (es un script de shell). Tienes dos buenas opciones.
Opción A: nvm-windows
Descarga nvm-setup.exe desde el proyecto coreybutler/nvm-windows y ejecútalo. Después, en PowerShell como administrador la primera vez (nvm-windows crea un enlace simbólico en C:\Program Files\nodejs):
Diferencias respecto a nvm de Linux que conviene conocer:
- No admite
nvm alias default; la versión activa es global, no por terminal. nvm useno lee.nvmrcautomáticamente.- Requiere permisos de administrador para conmutar.
Opción B: fnm (recomendada si empiezas de cero)
fnm funciona igual en Windows, Linux y macOS, es muy rápido y sí lee .nvmrc.
# Con winget (incluido en Windows moderno)
winget install Schniz.fnm
# Instalar la última LTS y activarla
fnm install --lts
fnm use --lts
fnm default lts-latestPara que fnm cambie de versión automáticamente al entrar en una carpeta con .nvmrc, añade a tu perfil de PowerShell (notepad $PROFILE):
Opción C: WSL
Si desarrollas para servidores Linux, la experiencia más fiel es usar WSL 2 (Windows Subsystem for Linux) e instalar dentro nvm siguiendo el apartado 2. Evita muchos problemas de rutas, permisos y finales de línea.
Aviso: no mezcles instalaciones. Si ya tenías Node instalado con el instalador oficial o con Chocolatey, desinstálalo antes de usar un gestor de versiones. Dos instalaciones compitiendo en el
PATHproducen errores desconcertantes ("tengo la 24 peronode -vdice 18").
- Verificación: qué se instala junto a Node
Abre una terminal nueva y ejecuta:
Si los tres responden, la instalación es correcta. Esto es lo que has obtenido:
| Herramienta | Qué es | Ejemplo de uso |
|---|---|---|
| node | El intérprete: ejecuta ficheros .js y abre el REPL |
node src/catalogo.js |
| npm | Gestor de paquetes: instala dependencias y ejecuta scripts | npm install express |
| npx | Ejecuta un paquete sin instalarlo permanentemente | npx cowsay hola |
| corepack | Gestor de gestores: activa yarn o pnpm en la versión que pida el proyecto |
corepack enable pnpm |
Sobre corepack: viene incluido con Node pero desactivado. Sirve para que, si un proyecto declara que usa [email protected], tú no tengas que instalarlo a mano. Se activa así:
En este curso usaremos npm, que es lo que trae Node por defecto. El detalle de npm y package.json es el objeto del Módulo 5; aquí solo verificamos que existe.
Una comprobación adicional útil: ejecutar código directamente desde la terminal.
- Elegir versión para un proyecto real: LTS vs Current
Recordemos la regla que vimos en la lección anterior y llevémosla a una decisión concreta:
| Situación | Versión recomendada | Razón |
|---|---|---|
| Proyecto nuevo que irá a producción | Última Active LTS | Estabilidad, soporte de librerías y de proveedores de alojamiento |
| Proyecto heredado en producción | La LTS que ya usa, con plan de migración | No mezcles cambio de versión con cambio funcional |
| Probar una novedad del lenguaje | Current en una carpeta aparte | Nunca en el proyecto principal |
| Curso o aprendizaje | Última Active LTS | Es lo que encontrarás en el trabajo |
Para Escena Viva elegimos la línea 24.x (Active LTS). Y, muy importante, lo dejamos escrito en el repositorio para que no dependa de la memoria de nadie.
- El fichero
.nvmrc del proyecto
.nvmrc del proyecto.nvmrc es un fichero de texto plano, en la raíz del proyecto, con una sola línea: la versión de Node que el proyecto necesita. Lo entienden nvm, fnm, Volta y la mayoría de sistemas de integración continua.
Contenido resultante:
También es válido y más flexible escribirlo a mano con la línea mayor, para recibir parches sin tocar el fichero:
o simplemente:
A partir de ahora, cualquier persona que clone el repositorio de Escena Viva solo tiene que hacer:
Truco muy recomendable: configura tu shell para que ejecute
nvm useautomáticamente al entrar en una carpeta con.nvmrc. Confnmbasta la línea--use-on-cdque vimos antes; con nvm, la documentación oficial incluye una funcióncdpara bash y zsh que hace lo mismo.
- Configuración del editor y de la terminal
Visual Studio Code
VS Code es el editor más habitual en el ecosistema Node, y funciona sin configuración. Estas extensiones marcan la diferencia:
| Extensión | Para qué sirve |
|---|---|
| ESLint | Detecta errores y malos hábitos mientras escribes |
| Prettier | Formatea el código automáticamente al guardar |
| npm Intellisense | Autocompleta nombres de módulos en los require/import |
| DotENV | Colorea ficheros .env (los usaremos en el Módulo 11) |
| REST Client o Thunder Client | Prueba tus endpoints HTTP sin salir del editor (Módulos 4 y 6) |
| Error Lens | Muestra el error en la propia línea, no solo en el panel |
| MongoDB for VS Code | Útil a partir del Módulo 7 |
Ajustes recomendados para el proyecto. Crea escena-viva/.vscode/settings.json:
{
"editor.formatOnSave": true,
"editor.defaultFormatter": "esbenp.prettier-vscode",
"files.eol": "\n",
"files.trimTrailingWhitespace": true,
"javascript.preferences.quoteStyle": "single",
"terminal.integrated.defaultProfile.windows": "PowerShell"
}"files.eol": "\n" merece una explicación: fuerza finales de línea de estilo Unix. Si trabajas en Windows y despliegas en Linux (lo normal), esto evita diferencias absurdas en el control de versiones y errores en scripts.
Ejecución integrada
Tienes tres formas de ejecutar un script desde VS Code:
- Terminal integrada (
Ctrl+ÑoCtrl+``): escribenode src/catalogo.js. Es la forma que usaremos en el curso. - Botón "Run": con un fichero
.jsabierto,F5lanza el depurador de Node integrado. launch.json: configuración reutilizable. La veremos con detalle en Depuración de Aplicaciones Node.js.
La terminal
Recomendaciones prácticas:
- Linux/macOS: bash o zsh, indistintamente. Añade el autocambio de versión con
.nvmrc. - Windows: usa Windows Terminal con PowerShell 7, o directamente WSL. Evita
cmd.exe. - Aprende dos atajos que usarás cada día:
Ctrl+Cpara detener un proceso en marcha (un servidor, por ejemplo) y la flecha arriba para repetir el comando anterior.
- Creación de la carpeta del proyecto Escena Viva
Vamos a crear el esqueleto del proyecto. Elige una carpeta de trabajo (por ejemplo ~/proyectos) y ejecuta:
# Crear la estructura inicial de Escena Viva
mkdir -p escena-viva/src
mkdir -p escena-viva/datos
mkdir -p escena-viva/informes
cd escena-vivaEn Windows con PowerShell:
New-Item -ItemType Directory -Path escena-viva\src, escena-viva\datos, escena-viva\informes -Force
Set-Location escena-vivaFijamos la versión de Node del proyecto y arrancamos el control de versiones:
# Versión de Node del proyecto
node -v > .nvmrc
# Repositorio git (opcional pero muy recomendable)
git initCreamos también un .gitignore mínimo. Aunque todavía no instalaremos dependencias, más vale prevenir:
Estructura resultante:
escena-viva/ ├── .gitignore # Qué no se sube al repositorio ├── .nvmrc # Versión de Node del proyecto ├── datos/ # Ficheros de datos (eventos.json, ventas.csv) ├── informes/ # Salidas generadas por el programa └── src/ # Código fuente JavaScript
Comprueba que todo está en su sitio:
Sobre
package.json: cuando ejecutesnpm init -ytendrás un ficheropackage.jsonque describe el proyecto y sus dependencias. Aún no lo necesitamos: los primeros programas del curso funcionan solo con lo que trae Node. Lo estudiaremos a fondo en el Módulo 5.
- Permisos: por qué nunca debes usar
sudo npm install -g
sudo npm install -gEste es el error de configuración más habitual en principiantes, y merece su propio apartado.
El síntoma
Instalas Node con el instalador oficial o con apt. Node queda en /usr/local o /usr, que pertenece a root. Intentas instalar una herramienta global:
npm error code EACCES npm error syscall mkdir npm error path /usr/lib/node_modules/nodemon npm error errno -13 npm error Error: EACCES: permission denied
La reacción instintiva es anteponer sudo. No lo hagas.
Por qué es mala idea
| Problema | Consecuencia |
|---|---|
| Ejecutas scripts de terceros como root | Un paquete malicioso o comprometido tiene control total de tu máquina; muchos paquetes ejecutan scripts postinstall |
| Se crean ficheros propiedad de root en tu caché | Errores EACCES posteriores incluso en instalaciones normales, y una caché ~/.npm corrupta |
| Mezclas ámbitos de sistema y de usuario | Actualizar o desinstalar se vuelve impredecible |
La solución correcta
Usar un gestor de versiones. Con nvm o fnm, Node y los paquetes globales viven en tu carpeta personal (~/.nvm/versions/node/v24.5.0/lib/node_modules), donde ya tienes permisos. El error EACCES simplemente deja de existir:
Si por alguna razón debes conservar una instalación de sistema, la alternativa oficial es cambiar el prefijo global a tu carpeta personal:
# Crear una carpeta propia para los paquetes globales
mkdir -p ~/.npm-global
npm config set prefix ~/.npm-global
# Añadirla al PATH (en ~/.bashrc o ~/.zshrc)
echo 'export PATH=~/.npm-global/bin:$PATH' >> ~/.bashrc
source ~/.bashrcSi ya has hecho el estropicio y tienes ficheros de root en tu caché, se repara así:
Regla de oro: en tu equipo de desarrollo,
npmno debería necesitarsudonunca. Si lo necesita, el problema está en cómo instalaste Node, no en npm.
Errores Comunes y Consejos
Error 1: command not found: nvm tras instalarlo.
El script de nvm se carga desde el fichero de configuración del shell. Si usas zsh pero el instalador escribió en ~/.bashrc, no se cargará. Abre el fichero correcto y comprueba que contienen las líneas export NVM_DIR=... y el source de nvm.sh. Después, abre una terminal nueva.
Error 2: node -v devuelve una versión distinta a la que acabas de activar.
Casi siempre hay dos instalaciones compitiendo. Diagnostícalo con:
Si aparece /usr/bin/node antes que la ruta de ~/.nvm, desinstala la versión del sistema.
Error 3: cada terminal nueva no tiene Node.
Falta nvm alias default 'lts/*'.
Error 4: nvm use dice que no encuentra .nvmrc.
Estás en un directorio que no es la raíz del proyecto. nvm use busca .nvmrc en el directorio actual y sus padres, no en subcarpetas hermanas.
Error 5: instalar Node desde el gestor del sistema en Ubuntu y encontrarse con una versión antiquísima.
Los repositorios de las distribuciones estables suelen ir muy por detrás. Comprueba siempre con node -v qué versión ha entrado realmente.
Consejo 1: fija la versión también en el servidor. El .nvmrc no solo sirve en local; los sistemas de CI y muchas PaaS lo leen (Módulo 11).
Consejo 2: documenta el arranque. Aunque todavía no tengamos README, apunta en algún sitio los tres comandos necesarios para trabajar en el proyecto: nvm use, npm install, npm start. Tu yo futuro te lo agradecerá.
Consejo 3: no acumules versiones. Ejecuta nvm ls de vez en cuando y desinstala las que ya no usa ningún proyecto; cada una ocupa decenas de megabytes.
Ejercicios
Ejercicio 1: instalación verificada
- Instala Node.js con nvm (o fnm/nvm-windows si estás en Windows).
- Instala dos versiones: la última LTS y la línea 22.
- Fija la LTS como versión por defecto.
- Escribe los comandos que usarías para comprobar, desde cero en una terminal nueva, que todo está bien: versión de Node, de npm, de npx, y la lista de versiones instaladas.
Ejercicio 2: el esqueleto de Escena Viva
Crea la carpeta escena-viva/ con:
- Subcarpetas
src/,datos/einformes/. - Un fichero
.nvmrccon la versión LTS que has instalado. - Un
.gitignoreque excluyanode_modules/,.envy los ficheros.log.
Después, escribe la secuencia de comandos que ejecutaría un compañero recién llegado para situarse en el proyecto con la versión de Node correcta, y comprueba que nvm use (o fnm use) responde leyendo el .nvmrc.
Ejercicio 3: diagnóstico de un entorno roto
Una compañera del equipo de Escena Viva te escribe: "He instalado nvm y he hecho nvm install --lts, pero cuando abro una terminal nueva node -v me dice v18.19.0. Además, si intento npm install -g nodemon me da EACCES y solo funciona con sudo."
- ¿Cuál es el diagnóstico más probable?
- ¿Qué comando le pedirías ejecutar para confirmarlo?
- Redacta los pasos de la solución.
Soluciones
Solución 1
# 1 y 2. Instalación de dos versiones
nvm install --lts # Instala la última LTS (24.x)
nvm install 22 # Instala la última 22.x
# 3. Versión por defecto
nvm alias default 'lts/*'
# 4. Verificación en una terminal NUEVA
node -v # v24.x.y -> debe ser la LTS, no la 22
npm -v # 11.x.y
npx -v # 11.x.y
nvm ls # Debe listar v22.x.y y v24.x.y, con default -> lts/*Comprobación adicional de que el cambio funciona:
Solución 2
# Crear estructura
mkdir -p escena-viva/src escena-viva/datos escena-viva/informes
cd escena-viva
# Fijar versión del proyecto
node -v > .nvmrc
cat .nvmrc # v24.5.0
# Ignorados de git
printf 'node_modules/\n.env\n*.log\n' > .gitignore
git initSecuencia para el compañero recién llegado:
git clone <url-del-repositorio> escena-viva
cd escena-viva
nvm install # Instala la versión de .nvmrc si no la tiene
nvm use # La activa en esta terminal
node -v # Debe coincidir con el contenido de .nvmrcNota: nvm use falla si la versión del .nvmrc no está instalada; por eso el nvm install previo (sin argumentos, también lee .nvmrc).
Solución 3
-
Diagnóstico: hay una instalación previa de Node (del instalador oficial o del gestor de paquetes del sistema) en un directorio del sistema, y aparece antes que nvm en el
PATH. Esa instalación es deroot, lo que explica a la vez la versión inesperada (v18) y el errorEACCESal instalar paquetes globales. -
Comando de confirmación:
which -a node
# Salida esperada, con la del sistema primero:
# /usr/bin/node
# /home/usuario/.nvm/versions/node/v24.5.0/bin/nodeTambién ayuda npm config get prefix: si devuelve /usr o /usr/local, confirma el diagnóstico.
- Solución:
# a) Desinstalar la versión del sistema (ejemplo en Debian/Ubuntu)
sudo apt remove --purge nodejs npm
sudo apt autoremove
# b) Reparar la caché de npm si se usó sudo alguna vez
sudo chown -R $(whoami) ~/.npm
# c) Abrir una terminal NUEVA y verificar
which -a node # Solo debe aparecer la ruta bajo ~/.nvm
node -v # La LTS instalada con nvm
npm install -g nodemon # Ahora funciona SIN sudoSi por política de la empresa no puede desinstalar la versión del sistema, la alternativa es asegurarse de que la línea de nvm en ~/.bashrc se ejecuta al final del fichero, para que su ruta quede primera en el PATH.
Conclusión
Ya tienes un entorno de desarrollo profesional. Hemos visto que existen tres formas de instalar Node.js y por qué un gestor de versiones (nvm, fnm o nvm-windows) es la única que soporta bien la realidad de trabajar con varios proyectos: permite instalar varias versiones, conmutar entre ellas al instante y —detalle nada menor— elimina de raíz los problemas de permisos que llevan a la mala práctica de sudo npm install -g.
Has instalado la última Active LTS, has comprobado que node, npm, npx y corepack responden, has configurado el editor con las extensiones que usarás durante el curso y has creado la carpeta escena-viva/ con sus directorios src/, datos/ e informes/, un .gitignore y un .nvmrc que documenta la versión del proyecto para todo el equipo.
La carpeta está creada pero vacía. En la siguiente lección, Tu Primer Programa en Node.js, escribiremos src/catalogo.js: el primer programa real de Escena Viva, que define el catálogo de eventos del Teatro Almendra, la Sala Bóveda y el Auditorio Ribera, lo muestra formateado por consola y aprende a recibir argumentos desde la línea de comandos.
Curso de Node.js: De Principiante a Avanzado
Módulo 1: Introducción a Node.js
- ¿Qué es Node.js?
- Instalación y Configuración del Entorno
- Tu Primer Programa en Node.js
- El REPL de Node.js
- JavaScript Moderno para Node.js
- El Proyecto del Curso: la Plataforma Escena Viva
Módulo 2: Conceptos Básicos
- Arquitectura de Node.js
- El Bucle de Eventos (Event Loop)
- Callbacks y Programación Asíncrona
- Promesas y async/await
- Eventos y EventEmitter
- Módulos CommonJS y require()
- Módulos ES e Interoperabilidad
Módulo 3: Sistema de Archivos y E/S
- Lectura y Escritura de Archivos
- El Módulo fs a Fondo
- Rutas Multiplataforma con el Módulo path
- Trabajando con Streams
- Streams de Transformación y pipeline
- Buffers y Datos Binarios
Módulo 4: HTTP y Servidores Web
- Creando un Servidor HTTP Simple
- Manejo de Solicitudes y Respuestas
- Enrutamiento Manual
- Sirviendo Archivos Estáticos
- Recibiendo Datos: Cuerpos de Petición y JSON
- Consumiendo APIs Externas desde Node.js
Módulo 5: NPM y Gestión de Paquetes
- Introducción a NPM y package.json
- Instalación y Uso de Paquetes
- Versionado Semántico y package-lock
- Scripts de npm y Automatización del Proyecto
- Creación y Publicación de Paquetes
- Seguridad y Mantenimiento de Dependencias
Módulo 6: Framework Express.js
- Introducción a Express.js
- Configuración de una Aplicación Express
- Enrutamiento en Express
- Middleware
- Middleware de Terceros Esenciales
- Validación de Datos de Entrada
- Manejo de Errores
Módulo 7: Bases de Datos y ORMs
- Introducción a las Bases de Datos
- Usando MongoDB con Mongoose
- Operaciones CRUD
- Relaciones, Poblado y Consultas Avanzadas
- Usando Bases de Datos SQL con Sequelize
- Migraciones, Transacciones y Datos de Prueba
Módulo 8: Autenticación y Autorización
- Introducción a la Autenticación
- Registro de Usuarios y Hash de Contraseñas
- Sesiones y Cookies con Passport.js
- Autenticación con JWT
- Control de Acceso Basado en Roles
- Buenas Prácticas de Seguridad en APIs
Módulo 9: Pruebas y Depuración
- Introducción a las Pruebas
- Pruebas Unitarias con Mocha y Chai
- Dobles de Prueba con Sinon
- Pruebas de Integración
- Cobertura y Automatización de las Pruebas
- Depuración de Aplicaciones Node.js
Módulo 10: Temas Avanzados
- El Módulo Cluster
- Hilos de Trabajo (Worker Threads)
- Caché y Colas de Trabajo con Redis
- Optimización del Rendimiento
- Construcción de APIs RESTful
- GraphQL con Node.js
Módulo 11: Despliegue y DevOps
- Configuración y Variables de Entorno
- Registro y Monitorización en Producción
- Usando PM2 para la Gestión de Procesos
- Empaquetado con Docker
- Desplegando en Heroku y Otras PaaS
- Integración y Despliegue Continuos
