Español
Despliegue
Variables de Entorno

Variables de Entorno

Referencia completa de todas las variables de entorno utilizadas por ReliaPulse.

Variables Requeridas

Estas variables deben estar configuradas para que la aplicación funcione.

Base de Datos

# Cadena de conexión PostgreSQL
DATABASE_URL="postgresql://usuario:contraseña@host:5432/basededatos"

Autenticación

# Secreto de NextAuth.js (mínimo 32 caracteres)
# Generar: openssl rand -base64 32
NEXTAUTH_SECRET="tu-clave-super-secreta-al-menos-32-chars"
 
# URL base de tu aplicación
NEXTAUTH_URL="https://status.example.com"

Redis

# Conexión Redis para colas y caché
REDIS_URL="redis://localhost:6379"

Variables Opcionales

Email (Resend)

# API key de Resend para notificaciones por email
RESEND_API_KEY="re_xxx"
 
# Dirección de email remitente por defecto
EMAIL_FROM="noreply@status.example.com"

SMS (Twilio)

# Credenciales de Twilio para notificaciones SMS
TWILIO_ACCOUNT_SID="ACxxx"
TWILIO_AUTH_TOKEN="xxx"
TWILIO_PHONE_NUMBER="+1234567890"

Web Push

# Claves VAPID para notificaciones push en navegador
# Generar: npx web-push generate-vapid-keys
NEXT_PUBLIC_VAPID_PUBLIC_KEY="BPxxx"
VAPID_PRIVATE_KEY="xxx"

Proveedores OAuth

# GitHub OAuth
GITHUB_CLIENT_ID="xxx"
GITHUB_CLIENT_SECRET="xxx"
 
# Google OAuth
GOOGLE_CLIENT_ID="xxx"
GOOGLE_CLIENT_SECRET="xxx"
 
# Microsoft/Azure AD OAuth
AZURE_AD_CLIENT_ID="xxx"
AZURE_AD_CLIENT_SECRET="xxx"
AZURE_AD_TENANT_ID="xxx"

Encriptación

# Clave para encriptar datos sensibles (secretos 2FA, tokens API)
# Generar: openssl rand -base64 32
ENCRYPTION_KEY="tu-clave-de-encriptacion-32-chars"

Aplicación

# Entorno de Node
NODE_ENV="production"
 
# Nivel de log (fatal, error, warn, info, debug, trace)
LOG_LEVEL="info"
 
# Nombre del servicio para logs
SERVICE_NAME="status-page"
 
# Concurrencia del worker
WORKER_CONCURRENCY="10"

Feature Flags

# Habilitar/deshabilitar actualizaciones en tiempo real Socket.IO
ENABLE_SOCKET_IO="true"
 
# Habilitar/deshabilitar rate limiting
ENABLE_RATE_LIMITING="true"

Entorno por Tipo de Despliegue

Desarrollo

# .env.local
DATABASE_URL="postgresql://postgres:postgres@localhost:5432/statuspage"
REDIS_URL="redis://localhost:6379"
NEXTAUTH_SECRET="clave-secreta-desarrollo-al-menos-32-chars"
NEXTAUTH_URL="http://localhost:3000"
NODE_ENV="development"
LOG_LEVEL="debug"

Docker Compose

# docker/.env
DATABASE_URL="postgresql://postgres:postgres@db:5432/statuspage"
REDIS_URL="redis://redis:6379"
NEXTAUTH_SECRET="tu-clave-secreta-produccion"
NEXTAUTH_URL="http://localhost:3000"
POSTGRES_PASSWORD="postgres"

Kubernetes

Las variables de entorno deben almacenarse en Kubernetes Secrets:

apiVersion: v1
kind: Secret
metadata:
  name: statuspage-secrets
type: Opaque
stringData:
  DATABASE_URL: "postgresql://usuario:pass@postgres:5432/statuspage"
  REDIS_URL: "redis://redis:6379"
  NEXTAUTH_SECRET: "tu-secreto"
  NEXTAUTH_URL: "https://status.example.com"

Vercel

Configura las variables en el dashboard de Vercel bajo Project Settings → Environment Variables.

Requerido para Vercel:

  • DATABASE_URL - Usa un PostgreSQL hospedado (Neon, Supabase, etc.)
  • NEXTAUTH_SECRET
  • NEXTAUTH_URL

Nota: Redis es necesario para los workers. Usa Upstash Redis para compatibilidad serverless.

Mejores Prácticas de Seguridad

Generación de Secretos

# Generar secretos seguros
openssl rand -base64 32
 
# Usando Node.js
node -e "console.log(require('crypto').randomBytes(32).toString('base64'))"

Gestión de Secretos

  1. Nunca commitear secretos a git

    • Usa .env.local (en gitignore)
    • Usa gestores de secretos (Vault, AWS Secrets Manager)
  2. Rota los secretos regularmente

    • NEXTAUTH_SECRET
    • API keys
    • Contraseñas de base de datos
  3. Usa secretos diferentes por entorno

    • Desarrollo
    • Staging
    • Producción

Mínimo Requerido para Producción

DATABASE_URL       # Debe usar SSL en producción
NEXTAUTH_SECRET    # Debe ser único y seguro
NEXTAUTH_URL       # Debe coincidir con tu dominio
REDIS_URL          # Requerido para trabajos en segundo plano
ENCRYPTION_KEY     # Requerido para 2FA y datos sensibles

Validación

La aplicación valida las variables de entorno requeridas al iniciar. Variables faltantes causarán que la aplicación falle con un mensaje de error claro.

// Validación de entorno (src/lib/env.ts)
import { z } from "zod";
 
const envSchema = z.object({
  DATABASE_URL: z.string().url(),
  NEXTAUTH_SECRET: z.string().min(32),
  NEXTAUTH_URL: z.string().url(),
  REDIS_URL: z.string().optional(),
});
 
export const env = envSchema.parse(process.env);

Solución de Problemas

Variable No Encontrada

# Verificar si la variable está configurada
echo $DATABASE_URL
 
# Verificar en Docker
docker compose exec app printenv | grep DATABASE_URL

Problemas con Cadenas de Conexión

# Formato URL PostgreSQL
postgresql://usuario:contraseña@host:puerto/basededatos?sslmode=require
 
# Formato URL Redis
redis://[[usuario]:[contraseña]]@host:puerto[/basededatos]
redis://:contraseña@host:puerto  # Solo contraseña
rediss://host:puerto             # Con TLS

Conexiones SSL/TLS

Para bases de datos de producción:

# PostgreSQL con SSL
DATABASE_URL="postgresql://user:pass@host:5432/db?sslmode=require"
 
# Redis con TLS
REDIS_URL="rediss://user:pass@host:6379"

Relacionado