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_SECRETNEXTAUTH_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
-
Nunca commitear secretos a git
- Usa
.env.local(en gitignore) - Usa gestores de secretos (Vault, AWS Secrets Manager)
- Usa
-
Rota los secretos regularmente
- NEXTAUTH_SECRET
- API keys
- Contraseñas de base de datos
-
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 sensiblesValidació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_URLProblemas 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 TLSConexiones 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"