185 lines
5.5 KiB
Markdown
185 lines
5.5 KiB
Markdown
# napi.qvd.tech — Retroalimentación a Estudiantes
|
|
|
|
## ✅ Estado: MVP FUNCIONAL (2026-02-22)
|
|
|
|
---
|
|
|
|
## Contexto
|
|
|
|
Proyecto minimalista para proporcionar retroalimentación personalizada a los estudiantes de DDAW2, cerrando el bucle profesor → alumno.
|
|
|
|
El profesor (Fénix) mantiene ficheros `notas.md` por alumno con:
|
|
- Tabla resumen de todas las prácticas (nota + estado)
|
|
- Feedback detallado por práctica
|
|
- Próximos pasos concretos
|
|
|
|
Los alumnos acceden desde cualquier dispositivo con su navegador, sin instalar nada.
|
|
|
|
---
|
|
|
|
## Arquitectura Final
|
|
|
|
```
|
|
aldebaran (local) zzz (qu3v3d0.tech)
|
|
───────────────── ──────────────────
|
|
~/napi-data/ sshfs /var/www/napi/data/
|
|
├── anas/notas.md ←──────────→ ├── anas/notas.md
|
|
├── pablo/notas.md ├── pablo/notas.md
|
|
├── miguel/notas.md ├── miguel/notas.md
|
|
└── .../ (19 alumnos) └── .../ (19 alumnos)
|
|
|
|
/var/www/napi/
|
|
├── viewer.html (app completa)
|
|
└── marked.min.js (renderer local)
|
|
|
|
Nginx + libnginx-mod-http-auth-pam
|
|
→ auth con credenciales SFTP del alumno
|
|
→ $remote_user → sirve /var/www/napi/data/$remote_user/notas.md
|
|
→ viewer.html renderiza el .md en el navegador (marked.js local)
|
|
```
|
|
|
|
### Stack
|
|
|
|
| Componente | Tecnología | Dónde |
|
|
|:-----------|:-----------|:------|
|
|
| **Datos** | Ficheros `notas.md` (Markdown) | `zzz:/var/www/napi/data/` |
|
|
| **Transporte** | sshfs mount persistente | aldebaran → zzz |
|
|
| **Servidor web** | Nginx | zzz |
|
|
| **Autenticación** | `libnginx-mod-http-auth-pam` | zzz |
|
|
| **Renderer** | `marked.min.js` (local, sin CDN) + `viewer.html` | zzz |
|
|
| **Notificaciones** (watcher nginx) | Python + slixmpp → XMPP | zzz |
|
|
|
|
**Sin backend. Sin Python para servir. Sin JSON. Sin Syncthing.**
|
|
|
|
---
|
|
|
|
## URL de Acceso
|
|
|
|
```
|
|
https://notas.qu3v3d0.tech
|
|
```
|
|
|
|
Una sola URL para todos los alumnos. Nginx usa `$remote_user` tras auth_pam para servir el `.md` correcto.
|
|
|
|
- Alumno ingresa sus credenciales SFTP (mismas que FileZilla)
|
|
- Ve únicamente sus propias notas
|
|
- Refresco del navegador = actualización inmediata
|
|
|
|
---
|
|
|
|
## Ficheros Clave en zzz
|
|
|
|
| Ruta | Descripción |
|
|
|:-----|:------------|
|
|
| `/var/www/napi/data/$alumno/notas.md` | Fuente de datos por alumno |
|
|
| `/var/www/napi/viewer.html` | App completa (fetch + marked.js) |
|
|
| `/var/www/napi/marked.min.js` | Renderer Markdown local |
|
|
| `/etc/nginx/sites-enabled/napi` | Config Nginx del servicio |
|
|
|
|
`www-data` está en grupo `shadow` (necesario para auth_pam).
|
|
|
|
---
|
|
|
|
## Ficheros Clave en aldebaran
|
|
|
|
| Ruta | Descripción |
|
|
|:-----|:------------|
|
|
| `~/napi-data/` | Mount sshfs → `/var/www/napi/data/` en zzz |
|
|
| `~/.config/systemd/user/home-fenix-napi\x2ddata.mount` | Unit systemd persistente |
|
|
| `~/napi-data/_plantilla/notas.md` | Plantilla para alumnos nuevos |
|
|
| `~/napi-data/README.md` | Documentación del proyecto |
|
|
|
|
---
|
|
|
|
## Workflow Emacs (edición)
|
|
|
|
```
|
|
1. C-x C-f ~/napi-data/pablo/notas.md
|
|
2. Editar → C-x C-s
|
|
3. Alumno refresca navegador → cambios visibles al instante
|
|
```
|
|
|
|
El sshfs hace que guardar en aldebaran sea equivalente a escribir directamente en zzz.
|
|
|
|
---
|
|
|
|
## Formato notas.md
|
|
|
|
```markdown
|
|
# Notas — NombreAlumno
|
|
|
|
> 🏫 Módulo: DDAW2
|
|
> 📅 Última actualización: FECHA
|
|
|
|
## 📊 Resumen
|
|
| Práctica | Título | Nota | Estado |
|
|
| P2.3 | Nginx via SFTP | 7/10 | ✅ |
|
|
...
|
|
|
|
## P2.7 — Multi-sitio Web con Nginx
|
|
**Nota: 9/10**
|
|
[feedback personalizado]
|
|
|
|
### Criterios
|
|
| Criterio | Puntos | Estado |
|
|
...
|
|
```
|
|
|
|
Ver `_plantilla/notas.md` y cualquier alumno como referencia.
|
|
|
|
---
|
|
|
|
## Alumnos Activos (19) — DDAW2
|
|
|
|
```
|
|
anas, carlos, carlosv, daniel, danieln, erick, evelin, gianfranco,
|
|
giorgio, joel, jorge, josue, juanan, juanjesus, kasandra, marius,
|
|
miguel, pablo, patrick
|
|
```
|
|
|
|
Credenciales SFTP en `~/EducaMadrid/DDAW2/PRACTICA2.4-despliegue-web-HTTP-y-HTTPS/README.md`.
|
|
|
|
---
|
|
|
|
## SSH / Conexión a zzz
|
|
|
|
```bash
|
|
ssh fenix@qu3v3d0.tech # clave sin -i
|
|
```
|
|
|
|
`fenix` tiene sudo en zzz. Alumnos: grupo `sftpusers`, chroot `/home/$user`.
|
|
|
|
---
|
|
|
|
## Añadir Alumno Nuevo
|
|
|
|
```bash
|
|
# 1. En zzz: crear usuario SFTP (ver README de P2.4 para el script completo)
|
|
sudo useradd -m -d /home/$USER -s /usr/sbin/nologin -G sftpusers,www-data $USER
|
|
|
|
# 2. En aldebaran: crear carpeta de notas
|
|
mkdir ~/napi-data/$USER
|
|
cp ~/napi-data/_plantilla/notas.md ~/napi-data/$USER/notas.md
|
|
# Editar con Emacs y personalizar
|
|
```
|
|
|
|
---
|
|
|
|
## Prácticas Documentadas
|
|
|
|
| Práctica | Directorio local | Descripción |
|
|
|:---------|:-----------------|:------------|
|
|
| P2.3 | `~/EducaMadrid/DDAW2/PRACTICA2.3-despliegue-nginx-via-sftp/` | Nginx config via SFTP + watcher inotify + XMPP |
|
|
| P2.4 | `~/EducaMadrid/DDAW2/PRACTICA2.4-despliegue-web-HTTP-y-HTTPS/` | HTTP + HTTPS con cert wildcard autofirmado |
|
|
| P2.5 | `~/EducaMadrid/DDAW2/PRACTICA2.5-despliegue-web-bloquear-CDN-JS+servir-MD/` | CSP + bloqueo CDN + marked.js local |
|
|
| P2.6 | `~/EducaMadrid/DDAW2/PRACTICA2.6-Hextris-compresion-cache-y-mejora-de-rendimiento/` | Hextris + gzip + caché |
|
|
| P2.7 | `~/EducaMadrid/DDAW2/PRACTICA2.7-MULTI-SITIO-WEB-NGINX@zzz/` | Multi-sitio: Hextris + App propia + CSP + cabeceras |
|
|
|
|
---
|
|
|
|
## Pendiente
|
|
|
|
- [ ] Rellenar notas de pablo (P2.3 → P2.6 pendientes de detallar)
|
|
- [ ] Considerar CSS más elaborado para viewer.html (opcional)
|
|
- [ ] Renovar certificado SSL wildcard cuando expire (generado 2026-02-04, válido 365 días)
|