Conceptos básicos de despliegue en plataforma
10 ejemplos para ejecutar APIs de Node.js 24 en Kubernetes, ECS o Cloud Run utilizando principios de 12 factores - 7 básicos y 3 intermedios.
Busca en todas las páginas de la documentación
10 ejemplos para ejecutar APIs de Node.js 24 en Kubernetes, ECS o Cloud Run utilizando principios de 12 factores - 7 básicos y 3 intermedios.
mkdir platform-api && cd platform-api
npm init -y
npm pkg set type=module
npm install express@5
npm install -D typescript@5.6Para manifiestos y escalado de Kubernetes, consulta Despliegue de Kubernetes y HPA y límites de recursos.
import { z } from "zod";
const envSchema = z.object({
PORT: z.coerce.number().default(3000),
NODE_ENV: z.enum(["development", "production", "test"]),
DATABASE_URL: z.string().url(),
});
export const env = envSchema.parse(process.env);import express from "express";
import { env } from "./env.js";
const app = express();
app.get("/health", (_req, res) => res.json({ status: "ok" }));
app.listen(env.PORT, "0.0.0.0");PORT; por defecto 3000 solo para local0.0.0.0 dentro de los contenedoresapp.use((req, res, next) => {
const start = Date.now();
res.on("finish", () => {
console.log(JSON.stringify({
method: req.method,
path: req.path,
status: res.statusCode,
ms: Date.now() - start,
}));
});
next();
});// Malo: almacén de sesiones en memoria a escala
const sessions = new Map<string, string>();
// Bueno: almacén de sesiones de Redis o DB
import { getSession } from "./session-store.js";# Fase de liberación (Job / initContainer)
npx prisma migrate deploy
# Fase de ejecución (Deployment CMD)
node dist/main.jsapp.get("/health", (_req, res) => res.json({ status: "ok" }));
app.get("/ready", async (_req, res) => {
const ok = await pingDatabase();
res.status(ok ? 200 : 503).json({ status: ok ? "ready" : "not_ready" });
});NODE_ENV=productionenv:
- name: NODE_ENV
value: productionENV del DockerfileapiVersion: apps/v1
kind: Deployment
metadata:
name: api
spec:
replicas: 3
selector:
matchLabels:
app: api
template:
metadata:
labels:
app: api
spec:
containers:
- name: api
image: ghcr.io/acme/api:sha-abc123
ports:
- name: http
containerPort: 3000
envFrom:
- configMapRef:
name: api-config
- secretRef:
name: api-secrets
readinessProbe:
httpGet:
path: /ready
port: http
livenessProbe:
httpGet:
path: /health
port: httpConsulta Despliegue de Kubernetes para el manifiesto completo.
const server = app.listen(env.PORT, "0.0.0.0");
process.on("SIGTERM", () => {
server.close(() => process.exit(0));
});| Factor | Implementación en Node |
|---|---|
| Código base | Un repositorio git por servicio |
| Dependencias | package-lock.json + npm ci en la imagen |
| Configuración | process.env + Zod |
| Servicios de respaldo | Postgres, Redis como recursos adjuntos |
| Construcción, liberación, ejecución | CI construye la imagen, CD despliega la etiqueta, CMD ejecuta node |
| Procesos | Un contenedor = un proceso node |
| Enlace de puerto | Entorno PORT |
| Concurrencia | Escala réplicas vía HPA |
| Desechabilidad | Inicio rápido, drenaje SIGTERM |
| Paridad dev/prod | Misma imagen Docker localmente y en producción |
K8s: control total, multi-nube. ECS: nativo de AWS, menos operaciones que K8s. Cloud Run: el autoescalador HTTP más simple. Consulta ECS Fargate y Cloud Run.
Helm ayuda cuando tienes muchos servicios y entornos. Comienza con YAML plano o Kustomize para una API.
Secretos de K8s, secretos de tareas de ECS u operadores de secretos externos - ConfigMaps y Secretos.
Mínimo 2 para alta disponibilidad. Establece solicitudes/límites a partir de pruebas de carga - HPA y límites de recursos.
No. K8s es el supervisor de procesos. PM2 es para máquinas virtuales - PM2 y systemd.
El despliegue en plataforma ejecuta imágenes construidas según las Mejores prácticas de Docker.
Versiones de la pila: Esta página fue escrita para Node.js 24.18.0 (LTS activa), npm 10+, TypeScript 5.6+, Express 5, Fastify 5 y NestJS 11.
Revisado por Chris St. John·Última actualización: 16 jul 2026