# --- Aplicación --- APP_NAME=GenExamenes IA ENVIRONMENT=production # URL pública HTTPS (Apache termina TLS; contenedores en HTTP interno) PUBLIC_BASE_URL=https://sinbad2.ujaen.es/generadorexamenesllm # Hosts aceptados por TrustedHostMiddleware (sin esquema ni puerto) TRUSTED_HOSTS=sinbad2.ujaen.es,localhost,127.0.0.1 # HSTS (segundos; 1 año por defecto) SECURITY_HSTS_SECONDS=31536000 # Clave legacy (reservada; las rutas /exam usan JWT de usuario). API_KEY=change-me-in-production-min-16-chars # --- Base de datos (Docker: host "db") --- DATABASE_URL=postgresql+psycopg://genexamenes:genexamenes@db:5432/genexamenes # --- CORS (orígenes HTTPS del frontend; separados por coma) --- ALLOWED_ORIGINS=https://sinbad2.ujaen.es,http://sinbad2.ujaen.es,http://sinbad2.ujaen.es:8075 # --- Rate limiting y tamaño de petición --- RATE_LIMIT_REQUESTS=60 RATE_LIMIT_WINDOW_SECONDS=60 MAX_REQUEST_BYTES=25165824 # --- Materiales de contexto (PDF, DOCX, imágenes, etc.) --- UPLOAD_DIR=/app/uploads MAX_UPLOAD_BYTES=20971520 MAX_MATERIALS_PER_TEMPLATE=10 MAX_REFERENCE_CHARS=12000 # --- Imágenes de examen (preguntas visuales, sin extracción OCR) --- MAX_IMAGE_BYTES=5242880 MAX_IMAGES_PER_TEMPLATE=20 # Cupo total por examen (materiales + imágenes). 50 MB por defecto. MAX_STORAGE_BYTES_PER_TEMPLATE=52428800 # --- JWT (login email/contraseña y sesión tras Google) --- JWT_SECRET_KEY=change-me-use-a-long-random-secret-key-at-least-32-chars JWT_ALGORITHM=HS256 JWT_EXPIRE_MINUTES=1440 # --- Google Sign-In --- # Client ID de OAuth 2.0 (tipo "Aplicación web") en Google Cloud Console. # El frontend obtiene un id_token con Google Identity Services y lo envía a POST /auth/google. GOOGLE_CLIENT_ID=123456789012-abcdefghijklmnopqrstuvwxyz123456.apps.googleusercontent.com # --- LLM (Sinbad2IA UJA — sin clave) --- # URL base del servidor; el cliente llama a {LLM_BASE_URL}/api/chat LLM_BASE_URL= LLM_MODEL=qwen3.5:35b LLM_TIMEOUT_SECONDS=180 # Opcional, solo si el servidor exige autenticación: # LLM_API_KEY=