Secretos obligatorios

SecretoUsoRotación
BETTER_AUTH_SECRETSesiones y tokens de better-authInvalida sesiones activas al rotar
TICKET_SIGNING_KEYFirmas QR de ticketsTickets emitidos antes de rotar pueden fallar validación
CRON_SECRETProtege /api/cron/*Actualizar en Vercel y en pruebas manuales
DATABASE_URLAcceso a PostgresRotar credenciales en Neon/Supabase y actualizar Vercel
SMTP_PASSEnvío de correoDepende del proveedor (API key)

Procedimiento de rotación

  1. Genera un valor nuevo (openssl rand -base64 32 para secrets de 32+ chars).
  2. Añade el nuevo valor en Vercel (Production).
  3. Redeploy o espera la próxima invocación serverless.
  4. Para TICKET_SIGNING_KEY: planifica ventana de mantenimiento; los tickets ya emitidos pueden requerir reemisión.
  5. Revoca el valor anterior en el proveedor si aplica.

CRON_SECRET es obligatorio cuando NODE_ENV=production (validado en src/env.ts).


Correo transaccional

Desarrollo usa Mailtrap (sandbox). En producción configura SMTP real:

Resend

SMTP_HOST="smtp.resend.com"
SMTP_PORT=465
SMTP_USER="resend"
SMTP_PASS="re_xxxxxxxx"
MAIL_FROM_EMAIL="noreply@tudominio.com"
MAIL_FROM_NAME="Evora"

SendGrid

SMTP_HOST="smtp.sendgrid.net"
SMTP_PORT=587
SMTP_USER="apikey"
SMTP_PASS="SG.xxxxxxxx"

Verifica dominio y registros SPF/DKIM en el panel del proveedor.


Backups

MétodoCuándo usar
Backups del proveedor (Neon/Supabase)Principal en producción
pnpm run db:backupExport JSON local o desde máquina con acceso a BD
Panel super admin → Exportar BDDescarga JSON desde la UI
/api/cron/backupHealth check semanal + conteos en logs de Vercel

Los archivos en backups/ están en .gitignore — no los subas a Git.


Monitoreo recomendado

  • Logs de Vercel para errores 5xx en crons.
  • Alertas del proveedor de Postgres (cuota, conexiones).
  • Upstash Redis para rate limiting.