Koyeb Deployment LeadFlow AI

Migración a Koyeb — Plan Completo

SaaS B2B · Node.js + React Multi-región EU + LATAM Zero-downtime deployments Generado por CULTIVA IA · Jun 2026
Diagnóstico actual (Render)
⏱️
Cold Start
8–12s
Plan gratuito Render · Plan de pago Koyeb: <200ms
🌍
Regiones activas
1
Solo US-East · México +180ms latencia
🔑
Seguridad secretos
Riesgo
DATABASE_URL en env vars del repo
💚
Health Checks
Koyeb
Configurados → zero-downtime
🏗️ Arquitectura objetivo en Koyeb
👨‍💻
GitHub
Push to main
⚙️
Koyeb CI/CD
Build + Deploy
🇩🇪
Frankfurt (fra)
EU · API + Worker
🇺🇸
Washington (was)
US/LATAM · API + Worker
🐘
Neon Postgres
Managed DB
Plan de migración paso a paso
1
Instalar CLI y crear la app
Setup inicial del entorno Koyeb y creación de la aplicación LeadFlow
bash terminal
# 1. Instalar CLI de Koyeb curl -fsSL https://raw.githubusercontent.com/koyeb/koyeb-cli/master/install.sh | sh # 2. Autenticar con API token (obtener en console.koyeb.com) koyeb login # 3. Crear la aplicación principal koyeb app create leadflow # 4. Verificar koyeb app list # leadflow HEALTHY 2 services fra,was
2
Gestionar secretos (sin hardcodear credenciales)
Crear todos los secretos antes de desplegar servicios
bash terminal — secrets
# Crear secretos — NUNCA hardcodear en YAML ni env vars del repo koyeb secret create database-url \ --value "postgres://leadflow:pass@db.koyeb.app:5432/leadflow_prod" koyeb secret create openai-key \ --value "sk-proj-xxxxxxxxxxxxxxxxxxxx" koyeb secret create redis-url \ --value "redis://default:xxxx@redis.koyeb.app:6379" koyeb secret create jwt-secret \ --value "s3cr3t_jwt_k3y_leadflow_prod_2026" # Verificar (los valores no se muestran, solo los nombres) koyeb secret list # database-url secret 2026-06-18 # openai-key secret 2026-06-18 # redis-url secret 2026-06-18 # jwt-secret secret 2026-06-18
3
Desplegar la API principal (multi-región)
Node.js API desde GitHub con autoscaling y health checks

Opción A — CLI (una sola vez)

bash
koyeb service create leadflow/api \ --git github.com/leadflow-ai/api \ --git-branch main \ --git-build-command "npm ci && npm run build" \ --git-run-command "node dist/index.js" \ --port 3000:http \ --region fra,was \ --instance-type small \ --min-scale 1 \ --max-scale 8 \ --env NODE_ENV=production \ --env DATABASE_URL=@database-url \ --env OPENAI_API_KEY=@openai-key \ --env JWT_SECRET=@jwt-secret

Opción B — koyeb.yaml (recomendado para CI/CD)

yamlkoyeb.yaml
name: leadflow type: web git: repository: github.com/leadflow-ai/api branch: main build_command: npm ci && npm run build run_command: node dist/index.js scaling: min: 1 max: 8 targets: - metric: requests value: 80 - metric: cpu value: 70 instance_type: small regions: [fra, was] ports: - port: 3000 protocol: http health_checks: - type: http port: 3000 path: /health interval: 30 timeout: 10 healthy_threshold: 2 unhealthy_threshold: 3 env: - key: NODE_ENV value: production - key: DATABASE_URL secret: database-url - key: OPENAI_API_KEY secret: openai-key
4
Desplegar Worker de procesamiento de leads
Background worker sin puerto público — consume cola de leads
bash terminal — worker service
# Worker: no necesita puerto HTTP, solo procesa la cola en background koyeb service create leadflow/worker \ --git github.com/leadflow-ai/api \ --git-branch main \ --git-run-command "node dist/worker.js" \ --type worker \ --region fra,was \ --instance-type nano \ --min-scale 1 \ --max-scale 4 \ --env DATABASE_URL=@database-url \ --env REDIS_URL=@redis-url \ --env OPENAI_API_KEY=@openai-key # El worker escala automáticamente con la carga de la cola (CPU metric)
5
Base de datos y dominio personalizado
Postgres gestionado (Neon) + dominio api.leadflow.ai
bashdatabase
# Crear base de datos Neon en Frankfurt koyeb database create leadflow-db \ --engine postgres \ --region fra # El connection string se guarda como secreto # automáticamente como @leadflow-db-connection-string # Actualizar servicio para usar la DB gestionada koyeb service update leadflow/api \ --env DATABASE_URL=@leadflow-db-connection-string
bashdominio + monitorización
# Añadir dominio personalizado koyeb domain create api.leadflow.ai \ --app leadflow # Añadir CNAME en tu DNS: # api.leadflow.ai → leadflow.koyeb.app # Ver estado de los servicios koyeb service list # leadflow/api HEALTHY small fra,was 2/2 # leadflow/worker HEALTHY nano fra,was 2/2 # Logs en tiempo real koyeb service logs leadflow/api --tail 100
Buenas prácticas aplicadas
🔒
Secretos cifrados — nunca en el repo
Todos los credenciales (DB, OpenAI, JWT) se gestionan con koyeb secret create y se referencian con @nombre — nunca hardcodeados en YAML.
🏥
Health checks en /health
Sin health check configurado, Koyeb no puede hacer zero-downtime deployments. LeadFlow expone GET /health → 200 OK para que el balanceador sepa cuándo la instancia está lista.
📦
Nano para staging, Small para producción
La rama develop usa instancias nano (~4€/mes). Producción usa small con autoscaling 1→8 para absorber picos de 09:00–11:00 CET.
🌍
Multi-región con routing automático
Frankfurt sirve clientes EU, Washington sirve LATAM/US. La red edge de Koyeb enruta automáticamente por DNS al datacenter más cercano sin configuración adicional.
📈
Autoscaling por requests/s (no solo CPU)
La API escala cuando supera 80 req/s por instancia. El worker escala por CPU al 70%. Esto evita over-provisioning y reduce costes en horas de poco tráfico.
🏷️
Docker tags fijados, no :latest
Si se migra a Docker en el futuro, usar ghcr.io/leadflow-ai/api:v2.1.0 en lugar de :latest para garantizar despliegues reproducibles.
Estimación de costes — LeadFlow AI en Koyeb
Servicio Tipo Instancia Regiones Escala €/mes (est.)
leadflow/api
API REST principal
web small fra + was 1 → 8 ~42€
leadflow/worker
Procesador de leads
worker nano fra + was 1 → 4 ~18€
leadflow-db
PostgreSQL Neon gestionado
database managed fra auto ~19€
leadflow/api-staging
Rama develop · preview
web nano fra 1 → 1 ~6€
Total estimado (vs. 45€/mes en Render con peor rendimiento) ~85€/mes