☁️ Arquitectura Cloud
Rial AI corre íntegramente en Google Cloud Platform (región southamerica-east1, Brasil), con Supabase como proveedor de base de datos y autenticación.
Diagrama general
Componentes
Cloud Run — Aplicaciones
| Servicio | Imagen Docker | Recursos | Descripción |
|---|---|---|---|
rial-frontend | rial-frontend:latest en Artifact Registry | 1 CPU, 1 GB RAM | Next.js SSR — interfaz del cliente y admin |
rial-backend | rial-backend:latest en Artifact Registry | 2 CPU, 4 GB RAM | NestJS REST API — lógica de negocio |
Ambos servicios están configurados con auto-scaling (mínimo 0 instancias en staging, mínimo 1 en producción).
Cloud Functions — Workers
| Worker | Queue | Timeout | Descripción |
|---|---|---|---|
images-download | images-download | 9 min | Genera signed URLs de GCS para descarga |
admin-metrics | admin-metrics-fetcher | 9 min | Calcula métricas y escribe en el caché del backend |
faceswap-recognition | faceswap-recognition | 9 min | Procesa reconocimiento facial |
Ver la página de Workers para detalle de cada función.
Cloud Tasks — Colas de mensajes
Cada worker tiene su propia cola independiente. El backend encola una tarea con el jobId y los parámetros en la cola correspondiente; Cloud Tasks dispara la Cloud Function destino.
| Cola | Worker destino | Rate limit |
|---|---|---|
images-download | images-download Cloud Function | Configurable |
admin-metrics-fetcher | admin-metrics Cloud Function | 1 task/segundo |
faceswap-recognition | faceswap-recognition Cloud Function | Configurable |
Cloud Scheduler — Trabajos programados
| Job | Cron | Destino | Descripción |
|---|---|---|---|
admin-metrics-refresh | 0 6,18 * * * (aprox. 2x/día) | Cola admin-metrics-fetcher | Dispara el worker de métricas admin |
Cloud Storage — Almacenamiento de imágenes
| Bucket | Uso |
|---|---|
rial_prod | Producción — imágenes de prendas y resultados generados |
rial_staging | Staging — entorno de prueba |
rial_test | Testing — tests de integración |
Las imágenes nunca son públicas. El acceso se da siempre a través de signed URLs con expiración de 1 hora.
Artifact Registry — Docker Images
Almacena las imágenes Docker de rial-frontend, rial-backend y los workers. Cada merge a las ramas develop (staging) o production dispara un GitHub Action que construye y sube una nueva imagen.
Supabase
| Componente | Uso |
|---|---|
| PostgreSQL | Base de datos principal — todas las entidades del sistema |
| Auth | Gestión de usuarios, sesiones y tokens JWT |
El backend usa DATABASE_URL (con pgBouncer para pooling) y DATABASE_URL_DIRECT (para migraciones Prisma sin pooling).
Cache
Caché de métricas admin con TTL. El worker admin-metrics escribe aquí; el API lee directamente. No es un servicio separado: corre in-process dentro de rial-backend usando @nestjs/cache-manager. Si REDIS_URL está configurada se conecta a esa URL; si no, usa memoria en proceso. No se usa para sesiones ni para nada crítico — si el caché falla, el API devuelve los datos como no disponibles y el worker recalcula en la próxima ejecución del scheduler.
New Relic
APM (Application Performance Monitoring) instalado en rial-backend. Captura:
- Trazas de requests HTTP
- Errores y excepciones
- Métricas de performance (CPU, memoria, latencia)
- Deployment tracking — cada deploy a producción registra un evento en New Relic
Ambientes
| Ambiente | Frontend | Backend API | Base de datos | Bucket GCS |
|---|---|---|---|---|
| Producción | rial-ai.com | api.rial-ai.com | Supabase prod | rial_prod |
| Staging | staging.rial-ai.com | https://rial-backend-staging-304072319206.southamerica-east1.run.app | Supabase staging | rial_staging |
Secretos y variables de entorno
Todos los secretos se gestionan en secrets.rial-ai.com . En producción, se inyectan como variables de entorno en Cloud Run a través del paso de deploy de GitHub Actions. Las credenciales de GCS se montan como volume secret en Cloud Run (/secrets/gcs-sa-key).
Dominios
DNS gestionado con Cloud DNS. El dominio rial-ai.com está registrado en Squarespace y apunta a los Cloud Run services.