Configuracion

Configure variables de entorno, integracion con Nextcloud, conexiones de base de datos, feature flags y servicios de terceros para Certexi.

Última actualización: 2025-02-18

Configuracion

Certexi utiliza variables de entorno para toda la configuracion. Esta guia cubre cada ajuste, organizado por servicio.

Inicio Rapido

cp env.production.template .env.production
nano .env.production
npm run check-env  # Validate configuration

Variables Criticas

Estas deben configurarse antes de que la aplicacion pueda iniciar:

VariableDescripcionComo Generar
DATABASE_URLCadena de conexion PostgreSQLVer Instalacion
NEXTAUTH_SECRETSecreto de autenticacionopenssl rand -base64 32
NEXTAUTH_URLURL de la aplicacionSu dominio de produccion
SENTRY_DSNEndpoint de rastreo de erroresObtener de sentry.io

Integracion con Nextcloud

Certexi utiliza Nextcloud para autenticacion OAuth y almacenamiento de archivos de evidencia.

Configuracion OAuth2

  1. Inicie sesion en Nextcloud como administrador
  2. Navegue a Configuracion > Seguridad > Clientes OAuth 2.0
  3. Agregue un nuevo cliente con URI de redireccion: https://su-app.com/api/auth/nextcloud/callback
  4. Copie el Client ID y Secret
NEXTCLOUD_URL=https://cloud.example.com
NEXTCLOUD_CLIENT_ID=your_client_id
NEXTCLOUD_CLIENT_SECRET=your_client_secret

Almacenamiento de Evidencia

Los archivos se almacenan via WebDAV en Nextcloud. Configure la ruta de almacenamiento:

AWS_S3_BUCKET=certexi-prod-storage  # S3 for file storage
ℹ️

Almacenamiento Dual

Certexi soporta tanto Nextcloud WebDAV como AWS S3 para archivos de evidencia. Nextcloud se usa para gestion de documentos mientras que S3 maneja las cargas binarias de alto rendimiento.

Configuracion de Base de Datos

Formato de Cadena de Conexion

postgresql://USER:PASSWORD@HOST:5432/DATABASE?sslmode=require
⚠️

Siempre Use SSL

Siempre incluya ?sslmode=require para conexiones de produccion. Nunca exponga su base de datos al internet publico.

Pool de Conexiones

Certexi utiliza Drizzle ORM con pool de conexiones integrado:

// Default pool configuration
{
  max: 10,
  idle_timeout: 20,
  connect_timeout: 10,
  max_lifetime: 1800, // 30 minutes
}

Para despliegues de alto trafico, use PgBouncer frente a PostgreSQL con pool_mode = transaction.

Configuracion de Redis

REDIS_URL=redis://localhost:6379

Redis es opcional pero recomendado para:

  • Cache de sesiones
  • Estado de limitacion de tasa
  • Pub/sub de eventos en tiempo real
  • Cache de respuestas API con TTL configurable

Configuracion de Seguridad

Generacion de Secretos

# Generate ECDSA P-256 key pair for credential signing
openssl ecparam -name prime256v1 -genkey -noout -out private-key.pem
openssl ec -in private-key.pem -pubout -out public-key.pem
ISSUER_PRIVATE_KEY=your_hex_key    # Use KMS in production
JWT_SECRET=your_jwt_secret_32chars
ENCRYPTION_KEY=your_encryption_key
🚨

Gestion de Claves

Nunca almacene claves privadas en variables de entorno para produccion. Use AWS KMS, Azure Key Vault o un HSM. Consulte Gestion de Claves para mas detalles.

Limitacion de Tasa

RATE_LIMIT_MAX_REQUESTS=100   # Requests per window
RATE_LIMIT_WINDOW_MS=60000    # Window duration (1 minute)

Firewall

Reglas de firewall recomendadas para produccion:

sudo ufw allow 443/tcp       # HTTPS
sudo ufw allow 80/tcp        # HTTP redirect
sudo ufw allow from YOUR_IP to any port 22  # SSH
sudo ufw default deny incoming
sudo ufw enable

Feature Flags

Control de Feature Flags

<Card className="w-80">
  <CardHeader className="pb-2">
    <CardTitle className="text-sm">Feature Flags</CardTitle>
    <CardDescription>Activar/desactivar funcionalidades opcionales</CardDescription>
  </CardHeader>
  <CardContent className="space-y-3">
    {[
      { flag: 'ENABLE_OFFLINE_MODE', label: 'Offline PWA', on: true },
      { flag: 'ENABLE_NFC_SCANNING', label: 'NFC Scanning', on: true },
      { flag: 'ENABLE_CCTV', label: 'CCTV Integration', on: true },
      { flag: 'ENABLE_MOTION_DETECTION', label: 'Motion Detection', on: true },
      { flag: 'ENABLE_OCR', label: 'OCR Processing', on: false },
      { flag: 'ENABLE_AI_SERVICE', label: 'AI Service', on: false },
    ].map((item, i) => (
      <div key={i} className="flex items-center justify-between text-sm">
        <div>
          <div className="font-medium">{item.label}</div>
          <div className="text-[10px] font-mono text-muted-foreground">{item.flag}</div>
        </div>
        <Badge variant={item.on ? "default" : "outline"} className={item.on ? "bg-green-500" : ""}>
          {item.on ? 'ON' : 'OFF'}
        </Badge>
      </div>
    ))}
  </CardContent>
</Card>

Controle funcionalidades opcionales mediante variables de entorno:

VariablePredeterminadoDescripcion
ENABLE_OFFLINE_MODEtrueSoporte PWA offline
ENABLE_NFC_SCANNINGtrueIntegracion Web NFC
ENABLE_CCTVtrueIntegracion de vigilancia
ENABLE_MOTION_DETECTIONtrueSistema de deteccion de movimiento
ENABLE_OCRfalseProcesamiento OCR de documentos
ENABLE_AI_SERVICEfalseIntegracion Flowhash AI

Monitoreo

Sentry

SENTRY_DSN=https://your-key@sentry.io/project-id

Sentry captura errores, transacciones de rendimiento y source maps automaticamente.

Health Checks

El endpoint /api/health devuelve el estado de todos los servicios. Configure monitoreo de disponibilidad (por ejemplo, UptimeRobot) para consultar este endpoint cada 5 minutos.

Metricas de Prometheus

Disponibles en /api/metrics (requiere autenticacion de administrador):

curl -H "Authorization: Bearer $ADMIN_TOKEN" \
  https://your-app.com/api/metrics

Servicio de IA

FLOWHASH_AI_SERVICE_URL=http://localhost:8000

El servicio Flowhash AI proporciona procesamiento OCR, clasificacion de documentos y deteccion de anomalias. Consulte la vision general de arquitectura para detalles de integracion.

Validacion

Ejecute el validador de configuracion antes de desplegar:

npm run check-env

Esto verifica que todas las variables requeridas esten configuradas, valida las cadenas de conexion y prueba la accesibilidad de los servicios externos.