Configuración
El runtime busca env.joss, después env.enc y finalmente .env; en desarrollo también intenta directorios padre. Las variables del sistema operativo sobrescriben el archivo. System::env("KEY", "default") consulta el entorno cargado.
APP_ENV="development"
APP_URL="https://127.0.0.1:8443"
PORT="8443"
PREFIX="js_"
JWT_SECRET="secreto-largo-y-unico"
APP_KEY="clave-larga-y-unica"
PREFIX es la clave canónica; DB_PREFIX se conserva como alias.
Bases de datos
SQLite:
DB="sqlite"
DB_PATH="database.sqlite"
MySQL usa el puerto 3306 cuando DB_HOST no lo incluye:
DB="mysql"
DB_HOST="127.0.0.1:3306"
DB_NAME="mi_app"
DB_USER="usuario"
DB_PASS="secreto"
PostgreSQL usa el puerto 5432 y acepta DB_SSLMODE:
DB="postgres"
DB_HOST="127.0.0.1:5432"
DB_NAME="mi_app"
DB_USER="usuario"
DB_PASS="secreto"
DB_SSLMODE="require"
Los aliases postgresql y pgx también se normalizan a PostgreSQL.
Microsoft SQL Server usa el puerto 1433 y acepta DB_ENCRYPT:
DB="sqlserver"
DB_HOST="127.0.0.1:1433"
DB_NAME="mi_app"
DB_USER="sa"
DB_PASS="secreto"
DB_ENCRYPT="disable"
Los aliases mssql y mssqlserver también se normalizan a SQL Server.
Servidor y sesiones
SESSION_DRIVER="file"
SESSION_FILE="storage/sessions.json"
RATE_LIMIT_REQUESTS="120"
RATE_LIMIT_WINDOW_SECONDS="60"
TLS_CERT_FILE="certs/fullchain.pem"
TLS_KEY_FILE="certs/private.key"
CORS_WEB="https://app.example.com"
filees el driver de sesión predeterminado y persiste reinicios.memoryes explícitamente volátil.SESSION_DRIVER="redis"almacena las sesiones web en Redis en lugar de disco.- Certificado y llave TLS deben configurarse juntos.
CORS_WEB=*permite cualquier origen sin credenciales; una lista separada por comas crea una whitelist exacta.
Redis y Caché Distribuida
Joss incluye un cliente nativo de Redis con auto-conexión y soporte de sesiones:
# Opción A: URL completa estándar
REDIS_URL="redis://default:[email protected]:6379/0"
# Opción B: Variables individuales (puerto 6379 y DB 0 por defecto)
REDIS_HOST="127.0.0.1"
REDIS_PORT="6379"
REDIS_USER="default"
REDIS_PASSWORD="password"
REDIS_DB="0"
- Si
REDIS_URLoREDIS_HOSTestán presentes, la claseRedis::set(),Redis::get(), etc. se auto-conecta en la primera llamada. SESSION_DRIVER="redis"utiliza automáticamente estas credenciales.
Procesos y plugins
ALLOW_SYSTEM_RUN=truehabilitaSystem::Run().JOSS_PLUGIN_SIGNING_KEYpermite seleccionar una llave privada Ed25519 existente para compilar JP. Si no se especifica, Joss genera y gestiona una llave automáticamente por plugin bajo~/.joss/keys/.- Los plugins
.jpse ejecutan directamente en memoria (bytecode VM y AST Engine), con acceso al mapa de entornor.Envsegún su ejecutor; esto no constituye un sandbox del sistema operativo.
Seguridad, Páginas de Error y Modo Engaño
APP_DEBUG="false"
SECURITY_DECEPTION="true"
- Páginas de Error Nativas: En lugar de texto plano, Joss sirve páginas de error visuales integradas con diseño moderno (SVG animado, código de estado y navegación al inicio). Puedes personalizar las vistas por proyecto en
app/views/errors/{status}.joss.html(por ejemploerrors/404oerrors/500). Si el cliente envíaAccept: application/jsono solicita rutas bajo/api/, responde automáticamente un JSON estructurado. - Modo Engaño (
SECURITY_DECEPTION="true"): Ofusca accesos no autorizados o prohibidos (códigos403 Forbiddeny401 Unauthorized) respondiendo al cliente con404 Not Found. Para el atacante o escáner externo el recurso parece inexistente, mientras que la consola del servidor registra el evento real con el prefijo[SECURITY DECEPTION]y la IP del cliente para auditoría. - Protección de Errores Internos (
APP_DEBUG="false"): Evita la filtración de trazas de pila (stack traces), rutas de archivos o código fuente ante excepciones internas no controladas (código 500), mostrando un mensaje genérico seguro y enviando el diagnóstico detallado a los logs de consola.
No publiques archivos de entorno ni llaves privadas.
CLI de base de datos
joss change db mysql
joss change db sqlite
joss change db postgres
joss change db prefix app_
La migración interactiva joss change db migrate sigue orientada a preparar un servidor MySQL nuevo. El runtime, CRUD, migraciones y Schema Builder sí funcionan con adaptadores para cuatro motores, con diferencias por operación.