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:
| Variable | Descripcion | Como Generar |
|---|---|---|
DATABASE_URL | Cadena de conexion PostgreSQL | Ver Instalacion |
NEXTAUTH_SECRET | Secreto de autenticacion | openssl rand -base64 32 |
NEXTAUTH_URL | URL de la aplicacion | Su dominio de produccion |
SENTRY_DSN | Endpoint de rastreo de errores | Obtener de sentry.io |
Integracion con Nextcloud
Certexi utiliza Nextcloud para autenticacion OAuth y almacenamiento de archivos de evidencia.
Configuracion OAuth2
- Inicie sesion en Nextcloud como administrador
- Navegue a Configuracion > Seguridad > Clientes OAuth 2.0
- Agregue un nuevo cliente con URI de redireccion:
https://su-app.com/api/auth/nextcloud/callback - 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:
| Variable | Predeterminado | Descripcion |
|---|---|---|
ENABLE_OFFLINE_MODE | true | Soporte PWA offline |
ENABLE_NFC_SCANNING | true | Integracion Web NFC |
ENABLE_CCTV | true | Integracion de vigilancia |
ENABLE_MOTION_DETECTION | true | Sistema de deteccion de movimiento |
ENABLE_OCR | false | Procesamiento OCR de documentos |
ENABLE_AI_SERVICE | false | Integracion 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.