Overview
PROD-SYS uses environment variables for system configuration, enabling flexible deployment across development, test, and production environments. All configuration is centralized in the.env file and loaded at application startup.
Environment Variables
Required Variables
These variables are mandatory and the system will exit if they are not defined:JWT_SECRET
- Purpose: Cryptographic key for signing and verifying JWT authentication tokens
- Requirements: Minimum 32 characters for production security
- Security: Never commit this value to version control
- Location:
backend/config/env.js:8
ADMIN_PASSWORD
- Purpose: Password for the initial system administrator during bootstrap
- Usage: Only used during first-time initialization
- Security: Change immediately after system initialization
- Location:
backend/domains/bootstrap/bootstrap.service.js:50
Optional Variables
PORT
- Default: 3000
- Purpose: HTTP server port
- Location:
backend/config/env.js:18
NODE_ENV
- Default: development
- Values:
development,test,production - Effects:
- Controls cookie security flags (secure flag in production)
- Determines database path (in-memory for test)
- Affects logging verbosity
- Location:
backend/config/env.js:21
DB_SOURCE
- Default: mfcalidad.sqlite
- Purpose: SQLite database filename
- Location: Database stored in
backend/database/ - Reference:
backend/config/database.js:7
LOG_LEVEL
- Default: info
- Values:
error,warn,info,http,verbose,debug - Purpose: Winston logger output level
- Location:
.env.example:23
DISABLE_AUTH_CHECKS
- Default: true (development mode)
- Purpose: Bypass role-based permission checks for development
- Security: MUST be set to
falsein production - Effect: When
true, all authenticated users have full system access - Location:
backend/middlewares/authorize.js:21
Setting
DISABLE_AUTH_CHECKS=true in production disables all role-based access controls. This is a critical security risk.Configuration Files
Environment Configuration
The system validates required environment variables at startup:Database Configuration
Database settings are derived from environment variables:Database Management
SQLite Configuration
PROD-SYS uses SQLite with optimized settings for concurrency and reliability: Write-Ahead Logging (WAL)- Enables concurrent reads during writes
- Improves performance for multi-user environments
- Enforces referential integrity constraints
- Prevents orphaned records
- Balances performance and data safety
- Acceptable for most production workloads
backend/database/sqlite.js:23-28
Schema Migrations
The system automatically performs schema migrations on startup:- Schema Detection: Checks existing table structure
- Migration Execution: Applies schema changes transactionally
- Data Preservation: Migrates existing data to new schema
- Index Creation: Ensures performance indexes exist
- User domain redesign (persona-based access control)
- Audit logging enhancements
- Status field consolidation
- Absence management tracking
backend/database/sqlite.js:36-473
Seed Data
The following catalogs are automatically initialized: Roles (roles table):
- Administrador
- Inspector
- Supervisor
- Jefe de Operaciones
- Gerencia
- Operario
areas table):
- Producción
- Departamento de Calidad
- Mantenimiento
- Administración
roles_operativos table):
- Tejedor
- Urdidor
- Mecánico
- Inspector de Calidad
- Auxiliar
- Supervisor de Planta
backend/database/sqlite.js:1337-1391
System Configuration Table
Thesistema_config table stores runtime system state:
| Key | Values | Description |
|---|---|---|
estado_sistema | NO_INICIALIZADO, INICIALIZADO | System initialization state |
- System starts with
estado_sistema = 'NO_INICIALIZADO' - First admin user is created via bootstrap endpoint
- State changes to
INICIALIZADO - Normal authentication becomes available
backend/domains/bootstrap/bootstrap.service.js:16-84
Security Configuration
JWT Tokens
Token Generation:- Algorithm: Configurable (default: HS256)
- Expiration: 8 hours
- Payload: User ID, username, role, persona information
- HTTP-only cookie (browser protection)
- Authorization header (API clients)
backend/domains/auth/auth.controller.js:19-24
Password Security
Hashing:- Algorithm: bcrypt
- Cost factor: 10
- Random salt per password
- Failed login tracking
- Automatic account lockout after 5 failed attempts
- Timing attack mitigation (constant-time comparison)
- Generic error messages (prevents user enumeration)
backend/domains/auth/auth.service.js:54-75
Session Management
Real-time Session Validation: Every authenticated request verifies user account status:backend/middlewares/auth.middleware.js:34-42
Configuration Validation
Startup Checks
- Environment validation: Required variables present
- Database connectivity: SQLite file accessible
- Schema integrity: Tables and indexes exist
- Seed data: Default catalogs initialized
- Logger initialization: Winston transport ready
Health Monitoring
Monitor these indicators for system health:- Database file size (growth rate)
- WAL file size (should auto-checkpoint)
- Failed login attempts (potential attacks)
- System initialization state
- Active user sessions
Production Checklist
Before deploying to production:- Set
JWT_SECRETto a cryptographically random 32+ character string - Set
NODE_ENV=production - Set
DISABLE_AUTH_CHECKS=false - Configure secure
ADMIN_PASSWORDfor bootstrap - Set appropriate
LOG_LEVEL(warn or error recommended) - Verify database file permissions (write access required)
- Enable HTTPS/TLS for secure cookie transmission
- Configure regular database backups
- Document admin credentials securely
- Test account lockout mechanism
Troubleshooting
Common Issues
System won’t start:- Check required environment variables are set
- Verify
.envfile exists and is readable - Review startup logs for specific error
- Verify database file permissions
- Check disk space availability
- Ensure WAL mode is enabled
- Verify
JWT_SECREThasn’t changed (invalidates existing tokens) - Check user account status in database
- Review failed login attempt count
- Verify
DISABLE_AUTH_CHECKSis set correctly - Check user role assignments
- Review permission mappings in
backend/shared/auth/permissions.js
Related Documentation
User Management
Managing user accounts and personnel
Roles & Permissions
Understanding the permission system
Audit Logs
Tracking system changes and user actions