# Despliegue de DocenTrack en cPanel (plan básico, sin SSH)

Guía para subir **Laravel** a cPanel. El **agente de huella NO se sube** — sigue
corriendo en la laptop del kiosko (ver `fingerprint-agent/README.md`).

Recordatorio de arquitectura:

```
[Laptop kiosko]                          [cPanel]
 Navegador ── HTTPS ─────────────────►  Laravel (app + BD)
    │                                        ▲
    └─ HTTPS local ─► Agente :8765 ── sync ──┘
                          │
   Lector ZK9500 ◄────────┘
```

---

## 1. Generar el paquete (en tu laptop)

Con Docker corriendo, desde la raíz del proyecto:

- **Windows:** `.\entrega.ps1`
- **Linux/Mac:** `bash entrega.sh`

Produce **`docentrack-deploy.zip`** — Laravel completo con `vendor/`, assets
compilados y un `.env` de producción con `APP_KEY` y el token ya rellenados.

## 2. Exportar la base de datos (en tu laptop)

El plan básico no tiene shell, así que en cPanel **no** correrás `migrate`.
En su lugar importas un volcado de tu BD local (ya migrada + con datos de prueba):

```bash
docker compose exec -T db mysqldump -u root -proot_secret --no-tablespaces docentrack > docentrack-db.sql
```

Queda `docentrack-db.sql` para importar en el paso 6.

---

## 3. Preparar cPanel

1. **PHP 8.3 o superior**: cPanel → *Select PHP Version* (o *MultiPHP Manager*)
   → elige **8.3** (o 8.4). DocenTrack requiere PHP ≥ 8.3.
2. **Extensiones** (en *Select PHP Version → Extensions*): activa
   `gd`, `intl`, `mbstring`, `zip`, `pdo_mysql`, `bcmath`, `exif`, `fileinfo`,
   `openssl`, `dom`. (dompdf y el export a Excel las necesitan.)
3. **Base de datos**: ya la creaste. Anota nombre de BD, usuario y contraseña
   (formato cPanel suele ser `usuario_bd` / `usuario_user`).

## 4. Subir y extraer

1. cPanel → *File Manager*. Sube `docentrack-deploy.zip` a una carpeta del
   proyecto **fuera** de `public_html`, por ejemplo `~/docentrack/`.
2. Clic derecho → **Extract**. Deben quedar `app/`, `public/`, `vendor/`,
   `artisan`, `.env`, etc. dentro de `~/docentrack/`.

## 5. Apuntar el dominio a `/public`

Lo más limpio en cPanel: que el **Document Root** del subdominio apunte a la
carpeta `public` del proyecto.

- cPanel → *Domains* (o *Subdomains*) → edita tu subdominio → **Document Root**
  = `docentrack/public`.

> Si tu cPanel no deja cambiar el Document Root y te obliga a usar `public_html`:
> mueve el **contenido** de `docentrack/public/` dentro de `public_html/`, deja
> el resto del proyecto en `docentrack/`, y edita `public_html/index.php` para
> que las dos rutas `require` apunten a `../docentrack/vendor/autoload.php` y
> `../docentrack/bootstrap/app.php`.

## 6. Importar la base de datos

cPanel → *phpMyAdmin* → elige la BD que creaste → pestaña **Import** → sube
`docentrack-db.sql` → *Go*.

## 7. Editar el `.env`

En *File Manager*, edita `docentrack/.env` (clic derecho → *Edit*). El `APP_KEY`
y el `FINGERPRINT_AGENT_TOKEN` **ya vienen puestos**. Solo cambia:

```
APP_URL=https://TU-SUBDOMINIO.tudominio.pe
DB_DATABASE=usuario_docentrack
DB_USERNAME=usuario_docentrack
DB_PASSWORD=tu_clave_de_bd
```

## 8. Permisos de escritura

En *File Manager*, asegúrate de que estas carpetas tengan permiso **755** (o 775
si diera error de escritura):
`docentrack/storage` (y subcarpetas) y `docentrack/bootstrap/cache`.

## 9. Probar el sitio

Abre `https://TU-SUBDOMINIO/`. Debe cargar el kiosko. Entra a `/login`
(`admin@unamba.edu.pe` / `password`) y revisa el panel.

> Si sale error 500, edita el `.env` y pon `APP_DEBUG=true` temporalmente para
> ver el detalle; vuelve a `false` al terminar.

---

## 10. Conectar el agente de la laptop al cPanel

En la laptop del kiosko, edita `fingerprint-agent/agent.env`:

```
LARAVEL_SYNC_URL=https://TU-SUBDOMINIO/admin/api/fingerprints/sync
```

(El `AGENT_TOKEN` ya coincide con el del `.env` de cPanel — es el mismo que
generamos.) Reinicia el agente:

```
python agent.py
```

Debe decir `Sync OK: N plantillas cargadas`.

## 11. Confiar el certificado del agente (en el navegador del kiosko)

Como la página ahora es HTTPS (cPanel) y el agente es HTTPS local autofirmado,
el navegador del kiosko debe confiar el cert **una vez**:

1. Abre `https://127.0.0.1:8765/status` → *Configuración avanzada* → *Acceder*.
2. Debe verse `{"ok":true,...}`.

Luego abre el kiosko en `https://TU-SUBDOMINIO/`. **Aquí validamos el punto
crítico**: que una página HTTPS pueda hablar con el agente local (mixed-content).
Si el kiosko detecta la huella, todo el circuito quedó cerrado en producción.

---

## Actualizaciones futuras

Para subir cambios de código: regenera el paquete (`entrega`), sube y extrae
sobrescribiendo, y **no** reimportes la BD (perderías los datos). Si hubo
migraciones nuevas, habría que aplicarlas por phpMyAdmin o pedir apoyo con SSH
puntual.
