ARQUITECTURA DE SISTEMAS

Guía Completa de Incorporación

Una guía completa para nuevos miembros del equipo para entender nuestra infraestructura, stack tecnológico y el camino desde nuestra configuración actual hacia la arquitectura objetivo. Aprende cómo construimos apps escalables, agentes IA y productos web.

v1.2 // Diciembre 2024
Desplaza para explorar

ÍNDICE DE CONTENIDOS

Parte I
Fundamentos - Entendiendo lo Básico
Capítulo 1

El Desafío de una Startup Moderna

¡Bienvenido a 498AS! Antes de sumergirnos en tecnologías específicas, entendamos por qué existe nuestra arquitectura y qué problemas resuelve.

Quiénes Somos

498AS es una startup en rápido crecimiento que construye múltiples productos:

  • Dashboards para Clientes - Herramientas de visualización de datos e informes
  • Agentes IA - Sistemas inteligentes que procesan datos y generan outputs
  • Aplicaciones Web - Sitios corporativos, landing pages y productos SaaS

Nuestros clientes incluyen entidades corporativas como DIBA (Diputació de Barcelona), bancos y otras instituciones que requieren fiabilidad de nivel empresarial.

Los Desafíos Únicos que Enfrentamos

Desafío 1: Las Cargas de Trabajo de IA Son Impredecibles

Cuando un usuario sube un archivo Excel para que nuestra IA lo procese, no podemos predecir:

  • Cuánta memoria necesitará
  • Cuánto tiempo tardará
  • Si el código generado por la IA se comportará correctamente

Un solo trabajo pesado podría bloquear un servidor entero si no está correctamente aislado.

Desafío 2: Equipo Pequeño, Múltiples Productos

Tenemos un equipo de desarrollo pequeño pero gestionamos:

  • Múltiples proyectos de clientes ejecutándose simultáneamente
  • Diferentes requisitos tecnológicos por proyecto
  • Bases de usuarios crecientes que demandan fiabilidad

Necesitamos automatización y herramientas inteligentes, no operaciones manuales.

Desafío 3: El Crecimiento Rápido Requiere Agilidad

Necesitamos:

  • Desplegar cambios rápidamente (múltiples veces al día)
  • Hacer cambios arquitectónicos radicales cuando sea necesario
  • Escalar sin reescribir todo

Nuestra Solución: Una Arquitectura por Capas

Para abordar estos desafíos, hemos diseñado una arquitectura con clara separación de responsabilidades:

Los Cinco Planos

  1. Plano Edge - Seguridad, caché y gestión de tráfico (Cloudflare)
  2. Plano de Control - Despliegue y orquestación (Coolify)
  3. Plano de Aplicación - Nuestras apps, APIs y dashboards
  4. Plano de Datos - Bases de datos y almacenamiento persistente
  5. Plano de Ejecución - Entornos aislados para IA/código peligroso (Daytona)

Esta separación significa que un problema en un plano no se propaga a los demás. Un trabajo de IA desbocado no tirará un dashboard de cliente.

Capítulo 2

Conceptos Básicos de Infraestructura

Antes de explorar nuestras herramientas específicas, establezcamos un vocabulario común. Si ya estás familiarizado con estos conceptos, puedes ojear este capítulo rápidamente.

DNS - La Guía Telefónica de Internet

¿Qué es DNS?

El Sistema de Nombres de Dominio (DNS) traduce nombres de dominio legibles por humanos (como georadar.app) en direcciones IP (como 5.135.151.118) que los ordenadores usan para comunicarse.

Tipos de registros DNS clave que usamos:

Tipo de Registro Propósito Ejemplo
A Apunta dominio a dirección IPv4 api.example.com → 91.99.50.229
CNAME Apunta dominio a otro dominio www → @ (www apunta a raíz)
MX Configuración del servidor de correo Enrutamiento de email
TXT Registros de texto para verificación SPF, DKIM para seguridad de email

Proxy Inverso - El Director de Tráfico

¿Qué es un Proxy Inverso?

Un proxy inverso se sitúa entre los usuarios y tus servidores. Recibe todas las peticiones entrantes y decide qué servicio backend debe manejar cada una.

Beneficios de los proxies inversos:

  • Terminación SSL - Maneja el cifrado HTTPS en un solo lugar
  • Balanceo de Carga - Distribuye el tráfico entre múltiples servidores
  • Enrutamiento - Envía api.example.com al servidor API, app.example.com al servidor de app
  • Seguridad - Oculta la estructura interna del servidor al mundo exterior

Usamos Caddy (via Coolify) como nuestro proxy inverso. Gestiona automáticamente los certificados SSL mediante Let's Encrypt.

Contenedores - Aplicaciones Portátiles

¿Qué es un Contenedor?

Un contenedor es un paquete ligero e independiente que incluye todo lo necesario para ejecutar una aplicación: código, runtime, librerías y configuración. Piensa en él como un "contenedor de transporte" para software.

Beneficios clave:

  • Consistencia - Funciona igual en todas partes (dev, staging, producción)
  • Aislamiento - Cada contenedor está separado de los demás
  • Eficiencia - Más ligero que las máquinas virtuales

Usamos contenedores Docker gestionados por Coolify.

OrbStack - Alternativa Ligera para Desarrollo Local

OrbStack
Runtime Docker/Linux para Desarrollo Local (macOS)

OrbStack es una alternativa ligera a Docker Desktop para macOS. Ofrece mejor rendimiento, arranque más rápido y menor consumo de recursos manteniendo compatibilidad total con Docker CLI y Compose.

Beneficios clave de OrbStack:

  • Arranque rápido - Inicia en segundos vs minutos con Docker Desktop
  • Menor consumo de recursos - Usa significativamente menos RAM y CPU
  • Compatibilidad total - Funciona con Docker CLI, Docker Compose y Kubernetes
  • Integración nativa con macOS - Mejor experiencia de desarrollo

Cuándo Usar Cada Herramienta

  • OrbStack: Desarrollo local en macOS cuando se necesita rendimiento
  • Docker Desktop: Cuando se requieren características específicas de Docker Desktop o en Windows/Linux
  • Docker Engine (servidores): En producción, usamos Docker Engine directamente gestionado por Coolify

CI/CD - Despliegues Automatizados

¿Qué es CI/CD?

Integración Continua/Despliegue Continuo compila, prueba y despliega código automáticamente cuando los desarrolladores suben cambios. No se necesitan actualizaciones manuales del servidor.

Nuestro flujo CI/CD:

El desarrollador sube código a GitHub ↓ GitHub envía webhook a Coolify ↓ Coolify descarga el último código ↓ Coolify construye el contenedor Docker ↓ Coolify despliega la nueva versión ↓ Caddy enruta el tráfico al nuevo contenedor ↓ Los usuarios ven la aplicación actualizada

Colas de Mensajes - Procesamiento en Segundo Plano

¿Qué es una Cola de Mensajes?

Una cola de mensajes es un sistema para manejar tareas de forma asíncrona. En lugar de hacer esperar a los usuarios por operaciones lentas, añadimos tareas a una cola y las procesamos en segundo plano.

Usamos Redis + BullMQ para colas. Casos de uso comunes:

  • Procesar archivos Excel subidos
  • Generar informes
  • Llamar a APIs de IA (que pueden ser lentas)
  • Enviar emails

Bases de Datos Vectoriales - Búsqueda Semántica

¿Qué es una Base de Datos Vectorial?

Una base de datos vectorial almacena datos como vectores numéricos de alta dimensión (embeddings). Esto permite búsqueda semántica - encontrar elementos por significado en lugar de palabras clave exactas.

Ejemplo: Si buscas "problemas con el coche", una base de datos vectorial puede encontrar documentos sobre "averías de vehículos" o "fallos de automóvil" aunque esas palabras exactas no estén en tu consulta.

Usamos Convex para almacenamiento vectorial y búsqueda semántica en nuestros flujos de trabajo de IA.

Capítulo 3

El Modelo Mental de Arquitectura Cloud

Ahora construyamos un modelo mental de cómo encajan todas estas piezas.

El Viaje de una Petición

Cuando un usuario visita una de nuestras aplicaciones, esto es lo que sucede:

1
Resolución DNS

El navegador del usuario pregunta "¿Cuál es la IP de app.georadar.app?" → Cloudflare responde con la IP de nuestro servidor (o la IP del proxy de Cloudflare)

2
Seguridad en el Edge

La petición llega primero a Cloudflare → WAF comprueba ataques, se aplica rate limiting, protección DDoS se activa si es necesario

3
Proxy Inverso

La petición llega a nuestro servidor → Caddy termina SSL, enruta al contenedor correcto según el hostname

4
Aplicación

El contenedor maneja la petición → Puede consultar base de datos, llamar APIs externas, o encolar trabajos en segundo plano

5
Respuesta

La respuesta viaja de vuelta por el mismo camino → Puede cachearse en Cloudflare para futuras peticiones

El Viaje de un Despliegue

Cuando un desarrollador sube código:

┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ Desarrollador│────▶│ GitHub │────▶│ Coolify │ │ (git push) │ │ (org 498AS) │ │ (webhook) │ └──────────────┘ └──────────────┘ └──────────────┘ │ ▼ ┌──────────────┐ │ Construir │ │ Contenedor │ └──────────────┘ │ ▼ ┌──────────────┐ │ Desplegar │ │ y Enrutar │ └──────────────┘

El Viaje de un Trabajo de IA

Cuando un usuario sube un archivo para procesamiento de IA:

┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ Usuario │───▶│ Servidor │───▶│ Cola │───▶│ Worker │ │ Sube │ │ API │ │ Redis │ │ (Orq.) │ └─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘ │ ┌─────────────────────────────────────┘ ▼ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ Daytona │───▶│ Agente │───▶│ Output │ │ Sandbox │ │ Claude │ │ (HTML) │ └─────────────┘ └─────────────┘ └─────────────┘

Por Qué Esta Separación Importa

El procesamiento de IA ocurre en un sandbox aislado de Daytona, no en nuestro servidor principal. Si la IA genera código malo o el archivo Excel es malicioso, no puede afectar a nuestras otras aplicaciones o bases de datos.

Parte II
Nuestro Stack Tecnológico - Los Bloques de Construcción
Capítulo 4

Cloudflare - Capa de Edge y Seguridad

Cloudflare
Red Edge / CDN / Seguridad

Cloudflare se sitúa entre los usuarios y nuestros servidores, proporcionando servicios de DNS, caché y seguridad en más de 330 ubicaciones globales.

Qué Hace Cloudflare Por Nosotros

1. Gestión de DNS (DNS Autoritativo)

Cloudflare es nuestro proveedor de DNS. Cuando alguien visita nuestros dominios, Cloudflare le dice a su navegador dónde encontrarnos.

Nuestra configuración DNS:

  • Dominios registrados en Dinahosting
  • Nameservers apuntando a Cloudflare
  • Registros DNS gestionados en el Dashboard de Cloudflare

2. Proxy Inverso (La Nube Naranja)

Cuando activas el icono de la nube naranja en un registro DNS, el tráfico fluye a través de Cloudflare en lugar de ir directamente a tu servidor.

Sin Proxy (Nube Gris)

Usuario → Tu Servidor (IP expuesta)

Con Proxy (Nube Naranja)

Usuario → Cloudflare → Tu Servidor (IP oculta, protegida)

3. Funcionalidades de Seguridad

Funcionalidad Qué Hace Nuestro Uso
Protección DDoS Absorbe tráfico de ataque antes de que nos llegue Siempre activo
WAF Bloquea ataques web comunes (SQL injection, XSS) Activado en endpoints API
Rate Limiting Limita peticiones por IP para prevenir abuso Endpoints de auth, llamadas API
Gestión de Bots Identifica y desafía tráfico sospechoso Formularios, páginas de login

4. Funcionalidades de Rendimiento

  • Caché CDN - Assets estáticos servidos desde la ubicación Cloudflare más cercana
  • TLS/SSL - Cifrado HTTPS manejado en el edge
  • Compresión - Compresión automática Brotli/Gzip
  • HTTP/2 y HTTP/3 - Protocolos modernos para carga más rápida

5. Servicios Adicionales de Cloudflare

  • Workers/Pages - Funciones serverless en el edge para lógica personalizada
  • R2 Object Storage - Almacenamiento compatible con S3 sin costes de egress
  • Durable Objects - Coordinación serverless con estado
  • API Shield - Validación de esquema y modelo de seguridad positivo para APIs

6. Zero Trust Access

Cloudflare Access nos permite proteger herramientas internas (como nuestro panel Coolify) sin VPN:

  • Requiere autenticación para acceder a paneles de administración
  • Restringe por dominio de email, IP o postura del dispositivo
  • No hay necesidad de exponer interfaces de gestión públicamente

Conclusión Clave

Cloudflare es nuestra primera línea de defensa. Todo el tráfico público debe pasar por Cloudflare (nube naranja activada). Esto nos da seguridad, rendimiento y visibilidad sin gestionarlo nosotros mismos.

Limitaciones de Cloudflare a Considerar

  • Límite de 100MB de subida en planes free/Pro (usar subida directa para archivos grandes)
  • Límites de CPU de Workers - 10-50ms de tiempo CPU por petición
  • Conexiones Websocket requieren configuración apropiada de timeout
Capítulo 5

Coolify - Despliegue y Orquestación

Coolify
PaaS Auto-alojado / Plataforma de Despliegue

Coolify es una alternativa open-source y auto-alojada a Heroku/Vercel. Gestiona nuestros despliegues de aplicaciones, bases de datos y certificados SSL.

¿Por Qué Coolify?

Coolify nos da la experiencia de desarrollador de Heroku con control total sobre nuestra infraestructura:

Heroku/Vercel Coolify
Gestionado por proveedor Auto-alojado en nuestros servidores
Pago por recurso Solo pago por VPS (~6€/mes)
Dependencia del proveedor Contenedores Docker portables
Personalización limitada Control total

Cómo Funciona Coolify

Arquitectura

┌─────────────────────────────────────────────────────────┐ │ PANEL COOLIFY │ │ (Interfaz web de gestión) │ └─────────────────────────────────────────────────────────┘ │ │ Conexión SSH ▼ ┌─────────────────────────────────────────────────────────┐ │ SERVIDOR (VPS) │ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │ │ App 1 │ │ App 2 │ │ Base Datos │ │ │ │ (Contenedor)│ │ (Contenedor)│ │ (Contenedor)│ │ │ └─────────────┘ └─────────────┘ └─────────────┘ │ │ │ │ ┌─────────────────────────────────────────────────┐ │ │ │ Caddy (Proxy Inverso) │ │ │ │ SSL + Enrutamiento + Balanceo │ │ │ └─────────────────────────────────────────────────┘ │ └─────────────────────────────────────────────────────────┘

Componentes Clave

  • Panel de Control - Interfaz web para gestionar todo
  • Docker Engine - Ejecuta todas las aplicaciones como contenedores
  • Caddy/Traefik - Proxy inverso para enrutamiento y SSL
  • Let's Encrypt - Gestión automática de certificados SSL

Limitaciones Actuales de Coolify

A partir de 2024, Coolify está en desarrollo activo pero tiene algunas limitaciones a tener en cuenta:

  • Sin soporte Kubernetes (aún) - Solo Docker Swarm/standalone
  • Sin balanceo de carga automático - Configuración manual o LB externo
  • Sin HA incorporado - Instancia única de Coolify (¡haz backup de tu config!)
  • Despliegue blue-green limitado - Solo rolling updates básicos

Estos son trade-offs aceptables para nuestra escala. Si superamos Coolify, podemos migrar a Kubernetes.

Nota Importante

Idealmente, Coolify debería ejecutarse en un servidor separado de las aplicaciones de producción. De esta forma, si un servidor de producción tiene problemas, aún puedes acceder a Coolify para diagnosticar y redesplegar.

Flujo de Despliegue

1
Conectar Repositorio

Vincular repositorio GitHub al proyecto Coolify

2
Configurar Build

Establecer comandos de build, variables de entorno y dominio

3
Activar Webhook

Coolify crea un webhook en GitHub para despliegues automáticos

4
Push a Main

El push de código dispara build → deploy → en vivo en ~1-2 minutos

Capítulo 6

GitHub - Control de Código y CI/CD

GitHub (Organización 498AS)
Control de Código / Disparador CI/CD

Todo nuestro código vive en la organización GitHub de 498AS. GitHub sirve como nuestra única fuente de verdad y dispara los despliegues.

Estructura de la Organización

github.com/498AS/
├── startdesk-dashboard     # Aplicación dashboard de cliente
├── gorila                  # Sistema KONG para informes DIBA
├── 3cat-dashboard          # Dashboard proyecto 3Cat
├── prompt-kitchen          # Gestión de prompts IA
├── paw-influencers         # Analítica de influencers
└── [otros proyectos...]

Estrategia de Ramas

Regla Simple: main = producción

Cuando el código se fusiona a main, se despliega automáticamente a producción. Esto mantiene las cosas simples y fomenta despliegues pequeños y frecuentes.

Rama Propósito Auto-Deploy
main Código de producción Sí - a producción
feature/* Nuevas funcionalidades en desarrollo No (futuro: entornos PR)
staging Testing pre-producción Futuro: a servidor staging
Capítulo 7

Capa de Datos - PostgreSQL, Redis y Convex

Nuestra capa de datos consiste en tres sistemas complementarios, cada uno optimizado para diferentes casos de uso.

PostgreSQL - La Fuente de Verdad

PostgreSQL
Base de Datos Relacional Principal

PostgreSQL almacena nuestros datos de negocio principales: usuarios, proyectos, configuraciones y registros históricos.

Cuándo Usar PostgreSQL

  • Cuentas de usuario y datos de autenticación
  • Entidades de negocio (proyectos, clientes, informes)
  • Logs de auditoría y registros históricos
  • Cualquier dato que requiera transacciones ACID
  • Consultas complejas con JOINs

Redis - Rápido y Efímero

Redis + BullMQ
Caché / Backend de Colas / Sesiones

Redis proporciona almacenamiento rápido en memoria para caché, gestión de sesiones y como backend para nuestras colas de trabajos.

Cuándo Usar Redis

Caso de Uso Ejemplo
Colas de Trabajos (BullMQ) Procesamiento en segundo plano de trabajos IA, generación de informes
Caché Caché de respuestas API, resultados computados
Sesiones Almacenamiento de sesiones de usuario
Rate Limiting Contadores de peticiones por IP/usuario

Convex - Tiempo Real y Vectores

Convex
Base de Datos Vectorial / Estado en Tiempo Real / Checkpoints

Convex es una base de datos reactiva con búsqueda vectorial integrada. La usamos para flujos de trabajo de IA que necesitan búsqueda semántica y gestión del estado de procesos.

Cuándo Usar Convex

  • Búsqueda Vectorial (RAG) - Búsqueda de similitud semántica para contexto LLM
  • Checkpoints de Proceso - Guardar estado de trabajos IA de larga duración
  • Actualizaciones en Tiempo Real - Actualizaciones de dashboard en vivo
  • Coordinación LLM - Seguimiento de miles de llamadas API a través de un flujo de trabajo

Ejemplo de Búsqueda Vectorial

// Schema con índice vectorial
import { defineSchema, defineTable } from "convex/server";
import { v } from "convex/values";

export default defineSchema({
  documents: defineTable({
    content: v.string(),
    embedding: v.array(v.float64()),  // Embedding vectorial
    metadata: v.object({...})
  }).vectorIndex("by_embedding", {
    vectorField: "embedding",
    dimensions: 1536,  // OpenAI text-embedding-ada-002 / text-embedding-3-small
    // Nota: text-embedding-3-large usa 3072 dimensiones
  })
});

La Estrategia de Capa de Datos

Sistema Tipo de Datos Persistencia
PostgreSQL Datos de negocio, usuarios, registros Permanente (almacenamiento frío)
Redis Colas, caché, sesiones Efímero (puede perderse)
Convex Vectores, estado IA, tiempo real Permanente (almacenamiento caliente)
Capítulo 8

Daytona - Sandboxes de Ejecución IA

Daytona
Entorno Sandbox Aislado para IA/Código No Confiable

Daytona proporciona sandboxes seguros y efímeros para ejecutar código generado por IA y procesar archivos no confiables. Es nuestra red de seguridad para cargas de trabajo impredecibles.

Por Qué Daytona es Importante

El Problema: El Código de IA es Impredecible

Cuando Claude u otro LLM genera y ejecuta código:

  • No podemos predecir el uso de memoria
  • El código puede tener bugs o bucles infinitos
  • Procesar archivos Excel subidos por usuarios es arriesgado
  • Un proceso desbocado podría bloquear nuestro servidor entero

La Solución: Sandboxes Aislados

Daytona crea entornos aislados donde:

  • Cada trabajo se ejecuta en su propio sandbox
  • Los sandboxes tienen sistemas de archivos, memoria y CPU separados
  • Un crash afecta solo a ese trabajo, no a nuestro servidor
  • Los sandboxes se destruyen después del uso (sin contaminación)

Cómo Funciona Daytona

┌─────────────────────────────────────────────────────────┐ │ TU SERVIDOR (OVH) │ │ │ │ ┌─────────────────────────────────────────────┐ │ │ │ WORKER │ │ │ │ (Solo orquestación - ligero) │ │ │ │ │ │ │ │ 1. Recibe trabajo de la cola │ │ │ │ 2. Llama API de Daytona │ │ │ │ 3. Espera el resultado │ │ │ │ 4. Almacena output │ │ │ └─────────────────────────────────────────────┘ │ └─────────────────────────────────────────────────────────┘ │ │ Llamadas API (HTTPS) ▼ ┌─────────────────────────────────────────────────────────┐ │ DAYTONA CLOUD │ │ │ │ ┌───────────┐ ┌───────────┐ ┌───────────┐ │ │ │ Sandbox 1 │ │ Sandbox 2 │ │ Sandbox N │ │ │ │ │ │ │ │ │ │ │ │ - Bun │ │ - Python │ │ - Node │ │ │ │ - Claude │ │ - Pandas │ │ - Custom │ │ │ │ - Files │ │ - Files │ │ - Files │ │ │ └───────────┘ └───────────┘ └───────────┘ │ │ │ │ Cada sandbox está completamente aislado │ │ ~90ms cold start (warm pools disponibles) │ │ Destruido después de completar el trabajo │ └─────────────────────────────────────────────────────────┘

Daytona vs Ejecutar Localmente

Aspecto Ejecutar en Servidor Ejecutar en Daytona
Aislamiento Bajo (mismo kernel) Alto (entorno separado)
Impacto de crash Puede afectar otros servicios Solo afecta ese trabajo
Control de recursos Compartido, impredecible Dedicado por sandbox
Seguridad Débil contra input malicioso Aislamiento fuerte
Mejor para CRUD, dashboards, APIs Trabajos IA, parsing de archivos, código no confiable

La Regla

Cualquier cosa que involucre ejecución de código IA o archivos subidos por usuarios DEBE pasar por Daytona. Esto es innegociable para sistemas de producción.

Niveles de Precios de Daytona

Nivel Mejor Para Características Clave
Free Desarrollo, testing Horas de sandbox limitadas, soporte básico
Pro Cargas de producción Límites mayores, soporte prioritario, warm pools
Enterprise Alto volumen, compliance Límites personalizados, SLA, soporte dedicado
Capítulo 9

Proveedores de Infraestructura - Hetzner, OVH y Dinahosting

Nuestra infraestructura corre sobre proveedores europeos, elegidos por su relación coste-efectividad, cumplimiento GDPR y buen rendimiento.

Hetzner Cloud

Hetzner Cloud
Proveedor VPS Principal (Alemania)

Proveedor cloud alemán con excelente ratio precio-rendimiento. Nuestro servidor principal para aplicaciones web.

Servidor Hetzner Actual

Especificación Valor
Modelo CPX22
vCPU 2 cores (AMD EPYC)
RAM 4 GB
Almacenamiento 80 GB NVMe SSD
Tráfico 20 TB/mes incluido
Ubicación Núremberg, Alemania (nbg1)
Coste ~6€/mes

OVH

OVH SAS
Proveedor VPS Secundario (Francia)

Proveedor cloud francés. Actualmente aloja nuestro plano de control Coolify y varias aplicaciones de producción.

Dinahosting

Dinahosting
Registrador de Dominios (España)

Proveedor español para registro de dominios. Registramos dominios aquí, luego apuntamos el DNS a Cloudflare.

Estrategia de Proveedores

Separamos responsabilidades entre proveedores:

  • Dinahosting: Propiedad del dominio
  • Cloudflare: Gestión de DNS, proporcionar seguridad
  • Hetzner/OVH: Ejecutar los servidores
  • Daytona: Manejar cargas de trabajo peligrosas

Esto nos da flexibilidad para cambiar cualquier componente sin afectar a los demás.

Parte III
Arquitectura Actual - Dónde Estamos
Capítulo 10

Visión General de la Configuración Actual

Veamos exactamente qué tenemos ejecutándose hoy. Este es el estado "AS-IS" desde el que estamos evolucionando.

Diagrama de Infraestructura Actual

USUARIOS │ ▼ ┌─────────────────────────────────────────────────────────────┐ │ CLOUDFLARE │ │ DNS + Proxy + CDN + Seguridad │ │ │ │ *.georadar.app → Servidor OVH (5.135.151.118) │ └─────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────┐ │ SERVIDOR OVH (Francia) │ │ 5.135.151.118 │ │ │ │ ┌─────────────────────────────────────────────────────┐ │ │ │ COOLIFY │ │ │ │ (Plano de Control + Panel) │ │ │ └─────────────────────────────────────────────────────┘ │ │ │ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │ │startdesk│ │dashboard│ │ 3cat │ │ gorila │ │ │ │dashboard│ │ -bs │ │dashboard│ │ (KONG) │ │ │ └─────────┘ └─────────┘ └─────────┘ └─────────┘ │ │ │ │ ┌─────────────────────┐ ┌─────────────────────┐ │ │ │ REDIS │ │ PostgreSQL │ │ │ │ (Colas/Caché) │ │ (3 bases datos) │ │ │ └─────────────────────┘ └─────────────────────┘ │ └─────────────────────────────────────────────────────────────┘ │ │ │ (orquestación) │ (sincronización datos) ▼ ▼ ┌─────────────────────┐ ┌─────────────────────┐ │ DAYTONA CLOUD │ │ CONVEX │ │ (Sandboxes IA) │ │ (Vectores/Estado) │ └─────────────────────┘ └─────────────────────┘

Aplicaciones Actualmente en Ejecución

Aplicación Tipo Estado Propósito
startdesk-dashboard Frontend Ejecutándose Dashboard principal de cliente
dashboard-bs Frontend Ejecutándose Dashboard cliente bancario
3cat-dashboard Frontend Ejecutándose Proyecto 3Cat
gorila (KONG) Backend Ejecutándose Sistema de informes DIBA
prompt-kitchen Servicio Ejecutándose Gestión de prompts
Capítulo 11

Lo Que Funciona Bien

Antes de discutir mejoras, reconozcamos lo que nuestra configuración actual hace bien.

Fortalezas de la Arquitectura Actual

1. La Ejecución de IA Está Correctamente Aislada

Ya estamos usando Daytona para cargas de trabajo de IA. Esta es la decisión arquitectónica más importante que hemos tomado.

2. CI/CD es Rápido y Fiable

Push a main → desplegado en ~2 minutos. Sin SSH manual, sin subidas FTP, sin coordinación necesaria.

3. Stack Tecnológico Moderno

  • Bun - Runtime JavaScript rápido
  • Hono - Framework API ligero y rápido
  • React + Vite - Herramientas frontend modernas
  • TanStack - Excelente fetching de datos
  • Drizzle - Acceso a base de datos con type-safety

4. Procesamiento Basado en Colas

Los trabajos de larga duración pasan por colas BullMQ. Los usuarios no esperan; se les notifica cuando el procesamiento completa.

5. Protección Cloudflare

Tenemos protección DDoS, WAF y caché CDN sin gestionarlo nosotros mismos.

Capítulo 12

Riesgos y Limitaciones Actuales

Ahora evaluemos honestamente los riesgos en nuestra configuración actual.

Riesgo 1: Densidad Por Host

El Problema

Nuestro servidor OVH ejecuta todo: Coolify, Caddy, apps, APIs, Redis, PostgreSQL y workers - todos compitiendo por los mismos recursos.

Riesgo 2: Plano de Control Mezclado con Producción

El Problema

Coolify corre en el mismo servidor que producción. Si el servidor crashea, no podemos desplegar arreglos porque Coolify también está caído.

Riesgo 3: Base de Datos No Aislada

El Problema

Las bases de datos PostgreSQL comparten recursos con las aplicaciones. No hay infraestructura de backup dedicada.

Tabla Resumen de Riesgos

Riesgo Probabilidad Impacto Estado Actual
Contención de recursos Alta Medio Riesgo activo
No se puede desplegar durante caída Media Alto Riesgo activo
Corrupción de base de datos Baja Crítico Necesita verificación de backup
Fallo total del servidor Baja Crítico Punto único de fallo

Contexto Importante

Estos riesgos no significan que nuestro sistema sea malo. Son dolores de crecimiento naturales de una startup exitosa. El hecho de que los hayamos identificado es el primer paso para abordarlos.

Parte IV
Arquitectura Objetivo - Hacia Dónde Vamos
Capítulo 13

Principios de Arquitectura

Antes de profundizar en los detalles, establezcamos los principios que guían nuestra arquitectura objetivo.

Principio 1: Separar Planos

Diferentes responsabilidades pertenecen a diferente infraestructura

  • Plano de Control - Coolify, secretos, observabilidad
  • Plano Edge - Cloudflare (seguridad, caché)
  • Plano de Aplicación - Nuestras apps y APIs
  • Plano de Datos - Bases de datos y almacenamiento
  • Plano de Ejecución - IA/código hostil (Daytona)

Principio 2: Reducir el Radio de Explosión

Un fallo en un componente no debería propagarse

Si un servidor API crashea, no debería tirar otras APIs, afectar la base de datos, romper nuestra capacidad de desplegar, o impactar clientes no relacionados.

Principio 3: Mantener Agilidad

La velocidad de despliegue es una ventaja competitiva

La nueva arquitectura debe seguir permitiendo despliegues rápidos, rollbacks fáciles, cambios radicales cuando sea necesario, e incorporación rápida de nuevos proyectos.

Principio 4: Seguridad por Diseño

La seguridad no es un añadido posterior

  • El código no confiable nunca se ejecuta en servidores de producción
  • Las bases de datos no están expuestas a internet
  • Los paneles de administración requieren autenticación
  • Los secretos se gestionan centralmente

Principio 5: Escalabilidad Coste-Efectiva

Escala lo que necesita escalar, cuando lo necesita

No necesitamos Kubernetes para todo. Empezar pequeño, monitorizar, escalar componentes específicos según necesidad, y usar servicios gestionados para cargas impredecibles.

Capítulo 14

El Estado Objetivo

Diagrama de Arquitectura Objetivo

USUARIOS │ ▼ ┌─────────────────────────────────────────────────────────────────┐ │ CLOUDFLARE │ │ DNS + Proxy + WAF + CDN + Rate Limiting │ └─────────────────────────────────────────────────────────────────┘ │ ┌─────────────────────┼─────────────────────┐ ▼ ▼ ▼ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ TIER WEB │ │ TIER PRODUCTO │ │ TIER DATOS │ │ (Servidor A) │ │ (Servidor B) │ │ (Servidor C) │ │ │ │ │ │ │ │ - Web corpor. │ │ - APIs │ │ - PostgreSQL │ │ - Landings │ │ - Dashboards │ │ - Redis │ │ - Sitios estát. │ │ - Workers │ │ - Backups │ └─────────────────┘ └────────┬────────┘ └─────────────────┘ │ ┌────────┴────────┐ ▼ ▼ ┌─────────────┐ ┌─────────────┐ │ DAYTONA │ │ CONVEX │ │ (Sandboxes) │ │ (Vectores) │ └─────────────┘ └─────────────┘ ┌─────────────────────────────────────────────────────────────────┐ │ PLANO DE CONTROL (Privado) │ │ - Panel Coolify (acceso restringido) │ │ - Gestión de secretos │ │ - Monitorización y alertas │ └─────────────────────────────────────────────────────────────────┘

Roles de Servidores

Servidor Rol Qué Corre Aquí Dimensionamiento
Plano de Control Gestión Solo Coolify CPX11 (~3€/mes)
Tier Web Estático/Marketing Sitios corporativos, landings CPX22 (~6€/mes)
Tier Producto Aplicaciones APIs, dashboards, workers CPX31 (~12€/mes)
Tier Datos Persistencia PostgreSQL, Redis, backups CPX22 + Volume

Qué Cambia

Separación del Plano de Control

Antes: Mezclado

Coolify corre junto a apps de producción. Si el servidor crashea, no se puede desplegar arreglos.

Después: Aislado

Coolify en servidor dedicado. Siempre se puede acceder y desplegar, incluso durante caídas.

Aislamiento de Base de Datos

Antes: Compartido

PostgreSQL compite con apps por recursos. Sin infraestructura de backup dedicada.

Después: Dedicado

La base de datos tiene recursos dedicados. Programación de backup adecuada. Puede escalar independientemente.

Insight Clave

No estamos cambiando nuestro stack tecnológico. Estamos cambiando cómo está distribuido a través de la infraestructura. Esto minimiza el riesgo mientras resuelve nuestros desafíos de escalado.

Capítulo 15

Hoja de Ruta de Migración

Migraremos incrementalmente, no todo de una vez. Cada fase entrega valor y reduce riesgo.

Fase 0: Seguridad Inmediata (1-3 días)

Objetivo: Reducir riesgo sin cambios de infraestructura

  • Activar proxy Cloudflare (nube naranja) en todos los hostnames públicos
  • Restringir acceso al panel Coolify (allowlist IP o Cloudflare Access)
  • Verificar que existen backups de base de datos y pueden restaurarse
  • Documentar accesos actuales al servidor y credenciales

Resultado: Menor superficie de ataque, capacidad de recuperación verificada

Fase 1: Separar Plano de Control (3-7 días)

Objetivo: Sistema de despliegue independiente de producción

  • Aprovisionar nuevo servidor pequeño para Coolify (CPX11)
  • Instalar instancia fresca de Coolify
  • Conectar servidores de producción existentes via SSH
  • Migrar configuraciones de despliegue

Resultado: Se puede desplegar y recuperar incluso durante caídas de producción

Fase 2: Separar Tier de Datos (1-2 semanas)

Objetivo: Bases de datos en infraestructura dedicada

  • Aprovisionar servidor dedicado de base de datos
  • Configurar PostgreSQL con configuración adecuada
  • Establecer backup automatizado a almacenamiento compatible con S3
  • Migrar bases de datos una a una

Resultado: Estabilidad de base de datos, backups adecuados, escalado independiente

Fase 3: Formalizar Ejecución IA (1-2 semanas)

Objetivo: Todas las cargas de trabajo IA a través de Daytona, sin excepciones

  • Auditar todos los workers para código IA/parsing
  • Refactorizar cualquier ejecución directa de IA para usar Daytona
  • Implementar timeout y limpieza adecuados para sandboxes
  • Añadir seguimiento de costes por trabajo

Resultado: Uso de recursos predecible, servidores de producción protegidos

Fase 4: Entornos Modernos (1-2 semanas)

Objetivo: Testing seguro antes de producción

  • Configurar entorno de staging (espejo de producción)
  • Configurar entornos de preview de PR en Coolify
  • Implementar smoke tests básicos

Resultado: Detectar problemas antes de que lleguen a producción

Fase 5: Observabilidad (Continuo)

Objetivo: Saber qué está pasando en el sistema

  • Logging centralizado con IDs de correlación
  • Métricas clave: latencia, profundidad de cola, tasas de error
  • Alertas para condiciones críticas
  • Dashboard de seguimiento de costes LLM

Resultado: Detección proactiva de problemas, control de costes

Principios de Migración

  • Un cambio a la vez - No migrar todo simultáneamente
  • Validar cada fase - Confirmar estabilidad antes de proceder
  • Plan de rollback - Saber cómo deshacer cada cambio
  • Continuidad de negocio - Sin tiempo de inactividad extendido para clientes
Parte V
Guía Práctica - Cómo Trabajamos
Capítulo 16

Operaciones Diarias y Flujos de Trabajo

Desplegando Código

Despliegue Estándar (Automático)

# 1. Haz tus cambios localmente
git add .
git commit -m "feat: add new dashboard widget"

# 2. Push a main (dispara auto-deploy)
git push origin main

# 3. Monitoriza el despliegue en el panel Coolify
# El despliegue típicamente completa en 1-2 minutos

Comprobando Estado de Aplicaciones

Desde Línea de Comandos

# SSH al servidor
ssh user@5.135.151.118

# Listar contenedores en ejecución
docker ps

# Ver logs de contenedor específico
docker logs <container_name> --tail 100

# Seguir logs en tiempo real
docker logs <container_name> -f

Trabajando con Bases de Datos

Conectando a PostgreSQL

# Desde el servidor
docker exec -it <postgres_container> psql -U postgres

# Listar bases de datos
\l

# Conectar a base de datos específica
\c database_name

# Listar tablas
\dt

# Salir
\q

Nota de Seguridad

Nunca commitees secretos a Git. Siempre usa variables de entorno para:

  • API keys (ANTHROPIC_API_KEY, DAYTONA_API_KEY)
  • URLs de base de datos (DATABASE_URL)
  • Tokens secretos

Añadiendo una Nueva Aplicación

1
Crear Repositorio GitHub

En organización 498AS con estructura estándar

2
Añadir Proyecto en Coolify

Crear nuevo proyecto o añadir a uno existente

3
Conectar Repositorio

Vincular repo GitHub, configurar ajustes de build

4
Configurar Dominio

Configurar subdominio (ej: newapp.georadar.app)

5
Añadir Registro DNS

En Cloudflare, apuntar subdominio a IP del servidor

6
Desplegar

Push del código, Coolify se encarga del resto

Capítulo 17

Prácticas de Seguridad

Control de Acceso

Sistema Quién Tiene Acceso Cómo Obtener Acceso
GitHub (498AS) Equipo de desarrollo Solicitar al admin de org
Panel Coolify DevOps / Devs senior Admin crea cuenta
SSH Servidor Solo DevOps Clave SSH añadida por admin
Cloudflare Equipo de infraestructura Invitación de cuenta
BD Producción Solo via aplicación Sin acceso directo

Checklist de Seguridad

Para Cada Aplicación

  • HTTPS activado (Caddy lo gestiona via Let's Encrypt)
  • Proxy Cloudflare activado (nube naranja)
  • Sin secretos en el repositorio de código
  • Variables de entorno para toda la configuración
  • Validación de input en todos los endpoints

Para Procesamiento IA/Archivos

  • Siempre usar sandboxes Daytona
  • Validar tipos de archivo antes de procesar
  • Establecer timeouts en todas las operaciones de sandbox
  • No confiar en nombres de archivo proporcionados por usuarios

Para Infraestructura

  • Solo autenticación por clave SSH (sin contraseñas)
  • Panel Coolify no expuesto sin autenticación
  • Bases de datos no accesibles desde internet
  • Rotación regular de API keys
Capítulo 18

Resolución de Problemas y Referencia Rápida

Problemas Comunes

Falla el Despliegue

Síntoma Causa Probable Solución
Falla el build Dependencias faltantes o error de sintaxis Revisar logs de build, ejecutar build localmente
Contenedor no arranca Vars de entorno faltantes o conflicto de puerto Revisar logs, verificar vars de entorno
Falla el health check App crashea al iniciar Revisar logs de aplicación

Problemas de Aplicación

Síntoma Causa Probable Solución
502 Bad Gateway App crasheó o no responde Reiniciar contenedor, revisar logs
503 Service Unavailable Contenedor no está corriendo Iniciar contenedor en Coolify
Error SSL Certificado no emitido Verificar DNS, esperar certificado
Respuestas lentas Contención de recursos Revisar carga del servidor, optimizar queries

Referencia Rápida

URLs Importantes

Servicio URL
Panel Coolify https://coolify.yourdomain.com
Dashboard Cloudflare https://dash.cloudflare.com
Organización GitHub https://github.com/498AS
Dashboard Convex https://dashboard.convex.dev
API Daytona https://api.daytona.io

Comandos Útiles

# Ver qué está corriendo
docker ps

# Ver logs de contenedor
docker logs <container> --tail 100

# Reiniciar un contenedor
docker restart <container>

# Verificar espacio en disco
df -h

# Verificar uso de memoria
free -h

# Probar resolución DNS
dig +short app.georadar.app

# Probar HTTPS
curl -I https://app.georadar.app

Enlaces de Documentación

Anexo
Resumen de Planos y Alternativa AWS
Anexo A

Los Cinco Planos de la Arquitectura 498AS

La arquitectura de 498AS se organiza en cinco planos con una clara separacion de responsabilidades, disenada para que los fallos en una capa no afecten a las demas.

1. Plano Edge (Seguridad y Trafico)

Primera linea de defensa

Gestiona el trafico antes de que llegue a los servidores.

  • Cloudflare: DNS autoritativo, WAF (firewall), proteccion DDoS, y cache CDN. Incluye Cloudflare Access para seguridad Zero Trust.
  • Cloudflare R2 y Pages: Almacenamiento de objetos y hosting de sitios estaticos sin costes de transferencia.

2. Plano de Control (Despliegue y Orquestacion)

Gestion de infraestructura y ciclo de vida del software

  • Coolify: PaaS auto-alojado que gestiona contenedores Docker y utiliza Caddy como proxy inverso para la gestion automatica de certificados SSL.
  • GitHub: Fuente de verdad unica para el codigo y disparador de los flujos de CI/CD mediante webhooks conectados a Coolify.

3. Plano de Aplicacion (Logica y Producto)

Donde residen las aplicaciones, APIs y dashboards

  • Stack Tecnologico: Bun (runtime), Hono (framework de API), React + Vite (frontend), TanStack (fetching de datos) y Drizzle ORM (acceso a base de datos con seguridad de tipos).
  • Cube.js: Capa semantica analitica para optimizar el rendimiento de los dashboards de clientes.

4. Plano de Datos (Almacenamiento y Persistencia)

Almacenamiento separado segun funcion para evitar contencion

  • PostgreSQL: "Fuente de Verdad" para datos transaccionales, usuarios y registros historicos.
  • Redis + BullMQ: Almacenamiento efimero (cache, sesiones) y backend para colas de mensajes en tareas de segundo plano.
  • Convex: Base de datos reactiva para busqueda vectorial (RAG) y seguimiento de estados de IA en tiempo real.

5. Plano de Ejecucion (Aislamiento de Cargas)

Capa especializada para tareas impredecibles

  • Daytona: Proporciona sandboxes aislados y efimeros para ejecutar codigo generado por IA o procesar archivos subidos por usuarios (como Excels). Garantiza que un fallo en la ejecucion de IA no afecte a las bases de datos o dashboards de otros clientes.

Diagrama de Planos

┌─────────────────────────────────────────────────────────────────┐ │ PLANO EDGE │ │ Cloudflare: DNS + WAF + DDoS + CDN + R2 │ └─────────────────────────────────────────────────────────────────┘ │ ┌─────────────────────────────────────────────────────────────────┐ │ PLANO DE CONTROL │ │ Coolify + GitHub (CI/CD + Webhooks) │ └─────────────────────────────────────────────────────────────────┘ │ ┌─────────────────────────────────────────────────────────────────┐ │ PLANO DE APLICACION │ │ Bun + Hono + React + Vite + TanStack + Cube.js │ └─────────────────────────────────────────────────────────────────┘ │ ┌─────────────────────┴─────────────────────┐ ▼ ▼ ┌─────────────────────┐ ┌─────────────────────┐ │ PLANO DE DATOS │ │ PLANO DE EJECUCION │ │ │ │ │ │ PostgreSQL (OLTP) │ │ Daytona (Sandboxes) │ │ Redis + BullMQ │ │ - Codigo IA │ │ Convex (Vectores) │ │ - Archivos usuarios │ └─────────────────────┘ └─────────────────────┘
Anexo B

Comparativa con AWS

Una pregunta frecuente es si AWS puede sustituir nuestro stack actual. La respuesta corta es: en gran parte si, pero con matices importantes.

Componentes Reemplazables con AWS

Componente 498AS Equivalente AWS Notas
Cloudflare (Edge) CloudFront + WAF + Route 53 + Shield Funcionalidad equivalente, mas integracion con ecosistema AWS
Coolify (Control) ECS/EKS + CodePipeline + CodeBuild Mas complejo de configurar, pero mas escalable
Hetzner/OVH (VPS) EC2 / Fargate / Lambda Coste variable, excelente para elasticidad
PostgreSQL RDS PostgreSQL / Aurora Gestionado, backups automaticos, replicas
Redis ElastiCache Redis Gestionado, clustering disponible

Donde NO Hay Sustitucion Simple

Convex (Base de Datos Vectorial + Estado Reactivo)

Convex combina varias funcionalidades en un solo producto:

  • Base de datos vectorial para busqueda semantica
  • Estado reactivo en tiempo real
  • Funciones backend serverless

En AWS: Requiere combinar varios servicios:

  • OpenSearch o pgvector para vectores
  • AppSync o API Gateway + WebSockets para reactividad
  • Lambda para funciones backend

No existe un "Convex en un solo producto" en AWS.

Daytona (Sandboxes de Ejecucion IA)

Daytona proporciona sandboxes efimeros con cold start de ~90ms, perfectos para ejecucion de codigo IA.

En AWS: Se sustituye por un patron, no por un producto equivalente:

  • AWS Batch + Fargate para ejecucion aislada
  • Step Functions para orquestacion
  • Lambda con contenedores para cargas pequenas

Mas complejo de implementar, pero mayor control y escala.

Trade-offs al "AWS-izar" el Stack

Ventajas de AWS
  • Mayor disponibilidad: Servicios gestionados con SLAs altos
  • Menos sysadmin: No gestionas parches, backups manuales
  • Integracion corporativa: IAM, compliance, auditoria
  • Escalabilidad: Elasticidad automatica
  • Ecosistema: +200 servicios integrados
Desventajas de AWS
  • Complejidad de permisos: IAM/VPC puede ser complejo
  • Costes variables: Especialmente red/egress
  • Vendor lock-in: Servicios propietarios
  • Curva de aprendizaje: Muchos servicios que dominar
  • Costes de servicios gestionados: RDS, ElastiCache mas caros que self-hosted

Tabla de Equivalencias Completa

Plano 498AS Actual Equivalente AWS
Edge Cloudflare CloudFront + WAF + Shield + Route 53
Control Coolify + GitHub ECS/EKS + CodePipeline + CodeBuild
Apps Docker en VPS ECS Fargate / EKS / App Runner
Datos PostgreSQL + Redis RDS/Aurora + ElastiCache
Vectores Convex OpenSearch + pgvector + Kendra
Ejecucion IA Daytona Batch + Fargate + Step Functions
Storage Cloudflare R2 S3
Colas BullMQ (Redis) SQS + Lambda / Step Functions

Recomendacion

Nuestro stack actual esta optimizado para agilidad y coste en una startup. AWS es una opcion valida cuando:

  • Necesitas compliance corporativo estricto (SOC2, HIPAA, etc.)
  • El cliente exige infraestructura en AWS
  • Necesitas escalar agresivamente sin gestionar infraestructura
  • El equipo ya tiene expertise en AWS

Para la mayoria de nuestros casos de uso actuales, el stack Cloudflare + Coolify + Hetzner ofrece mejor relacion coste-control.

Conclusion: Tu Rol en Nuestra Arquitectura

Ahora has aprendido la imagen completa de la arquitectura de sistemas de 498AS:

Conclusiones Clave

1. El Aislamiento lo es Todo

Mantén las cargas de trabajo de IA en Daytona. Mantén la base de datos separada. Mantén el plano de control independiente. El aislamiento previene fallos en cascada.

2. La Automatización Permite Velocidad

Nuestro pipeline CI/CD nos permite desplegar rápido y seguro. Aprovéchalo. Haz push de cambios pequeños frecuentemente en lugar de cambios grandes raramente.

3. La Seguridad es un Proceso

Nunca escribas secretos en el código. Siempre usa Cloudflare. Siempre valida el input. La seguridad no es una característica - es cómo construimos.

4. Siempre Estamos Mejorando

La hoja de ruta de migración muestra que estamos evolucionando activamente. Si ves formas de mejorar, habla. Las buenas ideas vienen de todas partes.

Obteniendo Ayuda

Cuando estés atascado:

  1. Revisa esta guía y la documentación enlazada
  2. Busca en nuestros docs/wiki internos (si está disponible)
  3. Pregunta en el canal de Slack/Discord del equipo
  4. Haz pair programming con un colega que conozca el sistema

Bienvenido a 498AS. Construyamos grandes cosas juntos.

Anexo C

Glosario de Tecnologías

Herramientas y plataformas de nuestra arquitectura, ordenadas según el flujo de desarrollo.

Planificación y Control de Código

Dominio y DNS

Desarrollo Local

Despliegue y Orquestación

Proveedores de Infraestructura

Capa de Datos

Ejecución de IA

Nota: Stack de Desarrollo

Además de la infraestructura, nuestro stack de desarrollo de aplicaciones incluye:

  • React — Librería JavaScript para construir interfaces de usuario con componentes reutilizables
  • Vite — Herramienta de build frontend para desarrollo rápido y bundling optimizado
  • Bun — Runtime JavaScript/TypeScript rápido y gestor de paquetes alternativo a Node.js
  • Hono — Framework web ligero y rápido para construir APIs
  • TanStack Query — Librería para fetching de datos y gestión de estado del servidor en React
  • Drizzle ORM — Capa de acceso a base de datos con type-safety completo para PostgreSQL
Anexo D

Stack de Desarrollo

Herramientas completas para el desarrollo de código en 498AS.

IDE y Herramientas de IA para Programación

HerramientaPropósito
Visual Studio CodeIDE principal
CursorIDE potenciado con IA (fork de VS Code con Claude/GPT)
Claude Code / OpenCodeAsistente de programación IA via terminal
GitHub CopilotAutocompletado de código con IA
CLAUDE.mdArchivo de contexto del proyecto para asistentes IA

Runtime y Herramientas de Build

HerramientaPropósito
BunRuntime JS/TS y gestor de paquetes principal
Node.jsRuntime alternativo
TurborepoOrquestación de builds en monorepos
ViteHerramienta de build y servidor de desarrollo
Next.jsFramework React full-stack (algunos proyectos)

Framework Frontend

HerramientaPropósito
React (18/19)Framework de UI
TanStack RouterEnrutamiento type-safe
TanStack QueryEstado del servidor y fetching de datos
TanStack FormGestión de formularios
TanStack TableTablas de datos
React Hook FormManejo alternativo de formularios
ZustandGestión de estado del cliente

UI y Estilos

HerramientaPropósito
Tailwind CSS (v3/v4)CSS utility-first
Radix UIPrimitivos de UI accesibles
shadcn/uiLibrería de componentes
Framer MotionAnimaciones
Lucide ReactIconos
RechartsGráficos y visualización de datos
React Flow / XYFlowDiagramas basados en nodos

Framework Backend

HerramientaPropósito
HonoFramework web ligero
tRPCAPIs type-safe end-to-end
Drizzle ORMAcceso a base de datos type-safe
BullMQColas de trabajos
Bull BoardUI de monitoreo de colas
PinoLogging estructurado
better-authAutenticación

Integración AI/LLM

HerramientaPropósito
Vercel AI SDK (ai)Interfaz unificada para LLMs
@ai-sdk/anthropicIntegración con Claude
@ai-sdk/openaiIntegración con OpenAI/GPT
@ai-sdk/googleIntegración con Google AI

Type Safety y Validación

HerramientaPropósito
TypeScriptTipado estático
ZodValidación de esquemas en runtime
superjsonSerialización JSON preservando tipos

Utilidades

HerramientaPropósito
ExcelJSParsing/generación de archivos Excel
HandlebarsMotor de plantillas
MarkedConversión de Markdown a HTML
ShikiResaltado de sintaxis de código
day.js / date-fnsManipulación de fechas
nanoidGeneración de IDs

Calidad de Código

HerramientaPropósito
ESLintLinting
PrettierFormateo de código
PlaywrightTesting E2E y automatización de navegador

Prototipado y Automatización

HerramientaPropósito
n8n (cloud)Automatización visual de flujos de trabajo para prototipos rápidos

Paquetes Internos

HerramientaPropósito
@498as/uiLibrería de componentes compartida
Anexo E

Flujo de Trabajo de Desarrollo

Cómo se integran las capas de arquitectura y las herramientas de desarrollo etapa por etapa.

Diagrama del Flujo de Trabajo

1. PLANIFICACIÓN
GitHub/Linear
CLAUDE.md
2. SETUP LOCAL
VS Code/Cursor
Bun + OrbStack
3. DESARROLLO
React+Hono
tRPC+Drizzle
6. DEPLOY
Coolify
Docker+Caddy
5. VERSION CONTROL
Git/GitHub
PR Review
4. CALIDAD
TypeScript
ESLint
7. EDGE
Cloudflare
WAF+CDN
8. PRODUCCIÓN
Hetzner/OVH
PostgreSQL+Redis
9. EJECUCIÓN IA
Daytona
BullMQ+Convex

Etapa 1: Planificación

Etapa 2: Setup del Entorno Local

Etapa 3: Desarrollo

Etapa 4: Verificación de Calidad

Etapa 5: Control de Versiones

Etapa 6: Despliegue Automático

Etapa 7: Edge y Seguridad

Etapa 8: Producción

Etapa 9: Ejecución de IA (cuando aplique)

Anexo F

Copias de Seguridad y Seguridad

Estrategia de Backups

ActivoMétodoFrecuenciaUbicación
Código fuenteGit pushCada commitGitHub (org 498AS)
PostgreSQLpg_dump via CoolifyDiarioServidor de backup
RedisSnapshots RDBDiario (si persistente)Local + backup
ConvexGestionadoAutomáticoConvex cloud
Config CoolifyExportarSemanalAlmacenamiento seguro
Docs de clientesGit + deployPor proyectoGitHub + hosting

Gestión de Contraseñas y Secretos

TipoAlmacenamientoAcceso
Contraseñas y API KeysZoho VaultMiembros del equipo via compartir
Variables de entornoSecretos de CoolifyPor aplicación
Claves SSHLocal + Zoho Vault (docs)Equipo DevOps
Credenciales de BDZoho Vault → CoolifySolo aplicación

Política de Rotación de Credenciales

Onboarding de Equipo (Zoho Vault)

1
Crear Cuenta

Admin crea cuenta de Zoho Vault para nuevo miembro

2
Compartir Accesos

Compartir carpetas de credenciales relevantes según rol

3
Configurar 2FA

Nuevo miembro configura autenticación de dos factores (obligatorio)

4
Revisión Trimestral

Revisar permisos de acceso cada 3 meses

5
Offboarding

Revocar acceso inmediatamente al salir del equipo

Hosting de Documentos de Clientes

Para informes/documentos HTML creados con OpenCode para clientes:

OpciónAutenticaciónComplejidadNotas
Coolify + Cloudflare Access Email/OTP Media ⭐ RECOMENDADO - Control total, integra con infra existente
Cloudflare Pages + Access Email/OTP Baja Bueno para docs estáticos simples
GitHub Pages Ninguna (público) Muy Baja Solo para contenido no sensible
HTTP Basic Auth (Caddy) Contraseña Baja Simple pero menos seguro
Cifrado client-side Contraseña Alta Máxima seguridad, UX compleja

Flujo Recomendado para Documentos de Clientes

  1. Desarrollo: Crear documento HTML con OpenCode/Claude localmente
  2. Versionado: Subir proyecto a GitHub (repo privado en org 498AS)
  3. Despliegue: Desplegar via Coolify como cualquier otra aplicación
  4. Protección: Añadir Cloudflare Access con acceso por email del cliente
  5. Entrega: Compartir URL con cliente (solo accesible con su email)

Checklist de Seguridad

Verificar Regularmente

  • ☐ Todos los secretos en Zoho Vault, nunca en código
  • ☐ Variables de entorno via Coolify, no hardcodeadas
  • ☐ Proxy de Cloudflare habilitado (nube naranja)
  • ☐ Base de datos no expuesta a internet
  • ☐ Solo autenticación por clave SSH
  • ☐ Documentos de clientes detrás de autenticación
  • ☐ Verificación regular de backups
  • ☐ Rotación de credenciales cada 3-6 meses
  • ☐ Revisión de accesos trimestralmente