Blog de Set Perú

Cómo Crear Apps Node.js Bajo Demanda para Usuarios con Dominio Personalizado

2 de Jun del 2025
Aplicaciones SaaS websaasnodejsmulti-tenant
3 Minutos
490 Palabras

Un multi-tenant app provisioning system (un sistema para que usuarios creen instancias o apps de tu app, con dominio propio).

Hay varias formas de hacerlo, dependiendo de tu presupuesto, la escala que esperas, y la flexibilidad. Te explico el concepto general y luego te doy opciones prácticas.


🎯 Concepto general

Cuando un usuario pide “su propia app”, tú necesitas:

✅ Provisionar (crear/configurar) una nueva “instancia” de tu app. ✅ Configurarla (DB, archivos, variables, etc.) para ese usuario. ✅ Permitirle enlazar su propio dominio.

“Instancia” no significa necesariamente levantar un nuevo servidor. Puede ser:

  • Un proceso Node.js dedicado (más caro).
  • Un contenedor (Docker) por cliente (flexible).
  • Una ruta o subdominio en tu app compartida (más barato).

🗺️ Opciones de implementación

1️⃣ Enrutamiento multi-tenant (más simple)

✅ Una sola app Node corre. ✅ Tu base de datos tiene “clientes”. ✅ El dominio o subdominio del cliente apunta a tu servidor, que sirve contenido dinámico según req.hostname.

📌 Ejemplo:

  • Tu servidor escucha *.tuplataforma.com
  • El cliente configura suempresa.com como CNAME a suempresa.tuplataforma.com
  • Tu app detecta el hostname y carga la configuración de ese cliente.

✅ Ventajas:

  • No levantas nuevas apps.
  • Sencillo de escalar.
  • Ideal para SaaS multi-tenant.

✅ Cómo hacerlo en Express:

1
app.use((req, res, next) => {
2
const hostname = req.hostname;
3
// buscar en DB config de ese cliente
4
// cargar variables, estilos, etc.
5
next();
6
});

2️⃣ Contenedores Docker por cliente

✅ Cada cliente obtiene SU propia app Node. ✅ Tu servidor de control “crea” un contenedor nuevo cuando se solicita. ✅ Puedes exponerlo con su propio dominio.

📌 Flujo típico:

  1. Cliente se registra y pide su app.

  2. Tu sistema:

    • Crea una carpeta con el código, configuración, .env, etc.
    • Ejecuta docker run con un puerto libre.
    • Guarda en DB el puerto o URL asignada.
  3. Configuras Nginx o Traefik para enrutar tráfico al contenedor correcto.

✅ Ventajas:

  • Total aislamiento.
  • Puede actualizarse o reiniciarse por separado.
  • Muy popular (Heroku, Railway hacen algo parecido internamente).

✅ Desventajas:

  • Más caro en recursos.
  • Necesitas orquestación (o al menos scripts para crear/monitorear contenedores).

3️⃣ Auto-deploy en servidor/cluster

✅ Tu app de control usa algo como:

  • Docker Compose
  • Kubernetes (avanzado)
  • PM2 programáticamente ✅ Cuando alguien solicita, tu sistema:
  • Clona un repo o template.
  • Genera variables.
  • Despliega.

📌 Ejemplo muy simple con PM2:

Terminal window
1
pm2 start app.js --name cliente123 --env PORT=5003

🎯 Sobre los dominios personalizados

Para que el cliente use su dominio:

✅ Pide que apunten su dominio con:

  • A record a tu IP
  • o CNAME a tu subdominio

✅ En tu servidor proxy (Nginx, Traefik) añades la configuración para ese dominio:

1
server {
2
server_name su-dominio.com;
3
proxy_pass http://localhost:5003;
4
}

✅ O si usas Traefik (recomendado para Docker), se configura dinámicamente.


⚡️ Resumen práctico

✅ MÁS SIMPLE (menos recursos):

  • Multi-tenant en una sola app
  • Enrutas según hostname
  • Una DB con datos de todos los clientes.

✅ MÁS AISLADO (más caro pero profesional):

  • Contenedor Docker por cliente
  • Proxy dinámico (Nginx o Traefik)
  • Base de datos separada (opcional).

✅ MÁS ESCALABLE (si tienes muchos clientes):

  • Kubernetes
  • Helm charts o templates para crear instancias
  • Certbot o Let’s Encrypt automático para HTTPS en cada dominio.

🛠️ ¿Qué usaría yo para empezar?

Para un MVP o versión sencilla:

✅ Express app multi-tenant. ✅ Base de datos con tabla de clientes. ✅ Subdominios CNAME -> un solo servidor. ✅ Enrutamiento dinámico según hostname.

Cuando escale:

✅ Docker por cliente. ✅ Traefik para routing dinámico. ✅ Script en Node para crear contenedores on-demand.

Título del artículo:Cómo Crear Apps Node.js Bajo Demanda para Usuarios con Dominio Personalizado
Autor del artículo:Set-Peru
Fecha de publicación:2 de Jun del 2025
Copyright 2025
Mapa del sitio