# Instalación en cPanel — desde cero

## Prerrequisitos

PHP 8.2 con extensiones BCMath, Ctype, cURL, DOM, Fileinfo, JSON, Mbstring, OpenSSL, PDO MySQL, Tokenizer y XML; HTTPS; MySQL/MariaDB exclusiva; ZIP de producción y archivo de secretos entregado por canal separado.

## Procedimiento

1. Respaldar el sitio actual y documentar su Document Root; no borrar WordPress. El rollback será restaurar ese root.
2. En cPanel crear base y usuario MySQL exclusivos, contraseña aleatoria y privilegios solo sobre esa base.
3. Importar `database-production.sql` en phpMyAdmin. Debe quedar `users` vacío.
4. Extraer el ZIP en `/home/todocomu/public_html/flexiprestamos/`. Nunca extraer dentro de `public/` solamente.
5. Copiar `.env.example` a `.env` fuera de descarga pública y configurar producción, URL, zona, MySQL, SMTP, prefijos/tokens y la `APP_KEY` entregada. No usar comillas incorrectas ni espacios finales.
6. Confirmar `APP_ENV=production`, `APP_DEBUG=false`, `CLIENT_PORTAL_ENABLED=false`, `EMERGENCY_RECOVERY_ENABLED=false`.
7. Dar escritura al usuario PHP en `storage/` y `bootstrap/cache/` (habitualmente 755/775 según hosting); archivos 644. Nunca 777.
8. Definir Document Root exactamente `/home/todocomu/public_html/flexiprestamos/public`.
9. Si no hay SSH, el paquete ya contiene `vendor/`. Limpie manualmente archivos de caché en `bootstrap/cache/` excepto `.gitignore` antes de subir si cambió `.env`.
10. Abra la URL secreta `INITIAL_SETUP_ROUTE` + `/i`, use `INITIAL_SETUP_TOKEN` y cree el único superadmin. Luego vacíe el token.
11. Compruebe web pública, login, dashboard, solicitud ficticia autorizada, comunicación log/SMTP, headers, 404 y que `.env` devuelve 404.

## Rollback

Ponga mantenimiento si procede, conserve DB/código nuevos, y restaure únicamente el Document Root anterior. No elimine la base nueva hasta confirmar investigación/retención. Nunca apunte Document Root a la raíz Laravel.

