Saltar al contenido
Curso de Node.js y APIs
Todos los cursos Ir al ejercicio →

Despliegue de tu API

  • ⏱ 45 minutos
  • 📶 Nivel: intermedio
  • 🧩 Incluye ejercicio

💡 🎯 Al terminar esta lección podrás…

  • Explicar qué significa desplegar una aplicación.
  • Preparar package.json con start y engines.
  • Leer el puerto y la configuración desde variables de entorno.
  • Simular una instalación limpia con npm ci.
  • Publicar la API siguiendo los pasos genéricos de una plataforma y diagnosticar fallos típicos.

1.Qué significa desplegar

Hasta ahora tu API vive en localhost: solo tú puedes llamarla, y solo mientras tu computadora está encendida. Desplegar es ponerla en un servidor que esté siempre encendido y tenga una dirección pública (por ejemplo https://mi-api.ejemplo.app) para que cualquiera, o cualquier aplicación, pueda usarla.

Tu códigoen tu computadora
→git push
RepositorioGitHub
→despliegue
Servidor en la nubeURL pública con HTTPS

Existen muchas plataformas que ejecutan aplicaciones de Node leyendo tu repositorio (Render, Railway, Fly.io, entre otras). Cambian la interfaz y los planes gratuitos, pero el proceso es el mismo, y esa es la parte que aprenderás: preparar el proyecto para que funcione en cualquier sitio.

📌 Nota · Planes gratuitos

Los planes gratis suelen «dormir» la aplicación tras un rato sin visitas (la primera petición tarda unos segundos) y pueden cambiar sus condiciones. Revisa siempre qué ofrece la plataforma antes de elegirla.

2.Preparar el proyecto

Haz este repaso antes de subir nada. Cada punto evita un error típico de «en mi computadora funcionaba».

1. Un script start

La plataforma arrancará tu app con npm start. Define ese script sin --watch (que es solo para desarrollo):

package.json
{
  "name": "api-tareas",
  "version": "1.0.0",
  "type": "module",
  "main": "index.js",
  "scripts": {
    "start": "node index.js",
    "dev": "node --watch --env-file=.env index.js"
  },
  "engines": {
    "node": ">=20"
  },
  "dependencies": {
    "express": "^5.1.0",
    "cors": "^2.8.5"
  }
}

El campo engines indica la versión de Node que necesita tu proyecto; muchas plataformas lo leen para elegir la correcta. Las herramientas que solo usas mientras programas van en devDependencies (npm install -D nombre), no en dependencies.

2. El puerto lo decide la plataforma

En producción no puedes elegir el puerto: la plataforma te lo entrega en la variable PORT. Por eso tu código debe leerlo (lección 6) y no escribirlo a mano:

index.js
const PORT = Number(process.env.PORT) || 3000;
app.listen(PORT, () => console.log(`API escuchando en el puerto ${PORT}`));

3. Nada de secretos en el código

Claves, contraseñas y direcciones de otras apps van en variables de entorno. Comprueba que .env y node_modules estén en .gitignore (git status no debe mostrarlos).

4. Una ruta de salud

Muchas plataformas comprueban que tu app responde. Una ruta simple lo facilita, y a ti te sirve para saber si está viva:

index.js
const inicio = Date.now();

app.get("/salud", (req, res) => {
  res.json({ estado: "ok", uptimeSegundos: Math.floor((Date.now() - inicio) / 1000) });
});

5. Prueba el arranque limpio

La plataforma instalará las dependencias desde cero. Simúlalo tú:

Terminal
rm -rf node_modules       # en PowerShell: Remove-Item -Recurse -Force node_modules
npm ci --omit=dev          # instala exactamente lo del package-lock.json, sin devDependencies
NODE_ENV=production npm start

npm ci usa el package-lock.json (¡súbelo a Git!) para instalar versiones idénticas en todas partes y falla si el lock y el package.json no coinciden.

3.Variables de entorno en producción

El archivo .env no viaja a la nube (está en .gitignore). En su lugar, la plataforma tiene un panel donde escribes cada variable con su valor. Debes crear allí las mismas que en tu .env:

VariableValor en producciónPara qué sirve
NODE_ENVproductionActiva optimizaciones y comportamientos de producción (Express oculta detalles de errores)
PORTLo pone la plataformaPuerto en el que escuchar
API_KEYTu clave realSecretos de servicios externos
ORIGENEShttps://mi-sitio.comSitios autorizados por CORS, separados por comas

Una función que lea y valide la configuración al arrancar evita sorpresas: si falta algo, el programa avisa de inmediato en lugar de fallar a mitad de una petición.

▶ Configuración que avisa a tiempo
Consola

4.Publicar paso a paso

El recorrido típico, sea cual sea la plataforma:

  1. Sube tu proyecto a GitHub. Crea un repositorio, git add ., git commit -m "API lista" y git push. Verifica en la web que .env no está.
  2. Crea una cuenta en la plataforma elegida y un nuevo «servicio web» a partir de tu repositorio.
  3. Configura los comandos: instalación npm ci (o npm install) y arranque npm start.
  4. Carga las variables de entorno en el panel (NODE_ENV, claves, orígenes).
  5. Despliega. La plataforma instala, arranca y te da una URL pública con HTTPS.
  6. Prueba la ruta de salud y el resto con curl.
Terminal
curl https://tu-api.ejemplo.app/salud
curl https://tu-api.ejemplo.app/tareas
Salida esperada
{"estado":"ok","uptimeSegundos":42}
[]

⚠️ Importante · Los archivos no siempre persisten

En muchas plataformas el disco es efímero: si guardas datos en un archivo JSON, se borran cada vez que la aplicación se reinicia o se vuelve a desplegar. Sirve para aprender, pero una API real necesita una base de datos o un disco persistente. Es el siguiente paso natural después de este curso.

Cada vez que hagas git push a la rama configurada, la mayoría de plataformas vuelven a desplegar solas. Si algo falla, abre los registros (logs) en el panel: ahí aparecerán tus console.log y los errores.

Cuando algo sale mal

SíntomaCausa probable
Falla al construir: «Cannot find module»Una dependencia está en devDependencies o falta en package.json.
Arranca pero «no responde»Escuchas en un puerto fijo en vez de process.env.PORT.
Funciona pero el navegador muestra error de CORSEl origen de tu página no está en la lista de ORIGENES.
Error por variable undefinedOlvidaste crear esa variable en el panel.
Los datos desaparecenEl disco es efímero; usa una base de datos.
La primera petición tarda muchoEl plan gratuito «despertó» la aplicación.

5.Errores frecuentes

📒 Apuntes para llevar

  • Desplegar = poner tu app en un servidor siempre encendido con una URL pública.
  • Necesitas un script "start": "node index.js" y, conviene, engines.node.
  • El puerto sale de process.env.PORT.
  • Las herramientas de desarrollo van en devDependencies; las que usa la app en producción, en dependencies.
  • El .env no se sube: las variables se escriben en el panel de la plataforma.
  • NODE_ENV=production activa el modo de producción.
  • Una ruta /salud permite comprobar que la app está viva.
  • Flujo: GitHub, servicio web, npm ci, npm start, variables, URL pública; después, git push redespliega.
  • Muchos discos son efímeros: para datos persistentes usa una base de datos.

6.Glosario

TérminoSignificado
DespliegueProceso de poner una aplicación en un servidor accesible públicamente.
ProducciónEntorno real donde la usan los usuarios, frente a desarrollo.
npm ciInstala exactamente lo indicado en package-lock.json; pensado para despliegues.
enginesCampo de package.json que indica versiones compatibles de Node.
Variable de entornoConfiguración que se define fuera del código, en el panel de la plataforma.
Health checkRuta que sirve para comprobar si la aplicación responde.
LogsRegistros de lo que imprime tu aplicación.
Disco efímeroAlmacenamiento que se borra al reiniciar o redesplegar.

🧠 Comprueba lo aprendido

Elige una respuesta en cada pregunta. Verás al instante si acertaste y por qué.

¿Qué debe usar tu código para saber en qué puerto escuchar en producción?

¿Cuál debe ser el script start?

¿Por qué no se sube .env a GitHub?

¿Qué hace npm ci?

Guardas tareas en un archivo JSON y tras redesplegar desaparecen. ¿Por qué?

Tu progreso se guarda en este navegador y se refleja en el índice del curso.

💡 🚀 ¡Ahora te toca!

La práctica fija lo aprendido. Pasa al ejercicio de esta lección.

Ir al ejercicio