Incluye: backend Node.js/Express, visualización 3D (Three.js/3d-force-graph), scrapers Wikipedia/noticias/imágenes, analizador Qwen3-VL, pipeline maestro con systemd timer, fixes de seguridad (NoSQL injection, XSS, ReDoS, port binding) y documentación técnica completa en docs/. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
98 lines
4.1 KiB
Markdown
98 lines
4.1 KiB
Markdown
# FLUJOS — Documentación técnica
|
|
**Última actualización:** 2026-04-21
|
|
**Proyecto:** Plataforma libre de análisis y visualización de flujos de información
|
|
**Stack:** Node.js + Express + MongoDB + Python (BERT, Qwen3-VL) + Three.js/3d-force-graph
|
|
|
|
---
|
|
|
|
## Índice de documentos
|
|
|
|
| Documento | Contenido |
|
|
|---|---|
|
|
| [SEGURIDAD.md](SEGURIDAD.md) | Informe de vulnerabilidades (NoSQL injection, XSS, rate limiting...) + fixes |
|
|
| [MONGODB.md](MONGODB.md) | Esquema de colecciones, índices, volúmenes, consultas frecuentes |
|
|
| [VISUALIZACION_JS.md](VISUALIZACION_JS.md) | Frontend Three.js, API endpoint, nodos imagen Sprite, scripts por vista |
|
|
| [SCRAPER_IMAGENES_QWEN.md](SCRAPER_IMAGENES_QWEN.md) | Scraper Wikipedia imágenes + analizador Qwen3-VL-8B (carga, batch, resume) |
|
|
| [SCRAPER_WIKIPEDIA.md](SCRAPER_WIKIPEDIA.md) | Scraper artículos Wikipedia, tokenización BERT, temas y keywords |
|
|
| [SCRAPER_NOTICIAS.md](SCRAPER_NOTICIAS.md) | Scraper de ~90 medios internacionales, traducción, limpieza, ficheros adjuntos |
|
|
| [PIPELINE_MAESTRO.md](PIPELINE_MAESTRO.md) | Orquestador 3 fases, systemd timer, lockfile, estado MongoDB, cooldowns |
|
|
|
|
---
|
|
|
|
## Arquitectura en una página
|
|
|
|
```
|
|
Internet
|
|
│
|
|
▼
|
|
nginx (theflows.net:443, TLS Let's Encrypt)
|
|
├── / → FLUJOS/VISUALIZACION/public/ (estáticos)
|
|
├── /api/ → proxy → Node.js :3000
|
|
└── /wiki-images/ → (Node.js sirve estáticos de IMAGENES/output/wiki_images/)
|
|
|
|
Node.js — FLUJOS/BACK_BACK/FLUJOS_APP.js
|
|
└── GET /api/data → MongoDB FLUJOS_DATOS
|
|
|
|
MongoDB localhost:27017 — FLUJOS_DATOS
|
|
├── wikipedia (~5k docs)
|
|
├── noticias (~20k docs)
|
|
├── imagenes (~150 docs, analizadas con Qwen)
|
|
├── imagenes_wiki (~500 docs, solo metadatos scrapeados)
|
|
├── comparaciones (~52M pares de similitud)
|
|
└── pipeline_log (estado de ejecuciones)
|
|
|
|
Python Pipeline (systemd timer — domingos 3:00 AM)
|
|
FLUJOS_DATOS/pipeline_maestro.py
|
|
├── Fase 1: scraping (Wikipedia + noticias + imágenes)
|
|
├── Fase 2: análisis (Qwen3-VL + tokenización BERT)
|
|
└── Fase 3: comparación (similitud coseno entre documentos)
|
|
```
|
|
|
|
---
|
|
|
|
## Variables de entorno (.env en FLUJOS/BACK_BACK/)
|
|
|
|
```
|
|
MONGO_URL=mongodb://localhost:27017
|
|
DB_NAME=FLUJOS_DATOS
|
|
PORT=3000
|
|
```
|
|
|
|
---
|
|
|
|
## Rutas críticas del servidor
|
|
|
|
```
|
|
/var/www/theflows.net/flujos/
|
|
├── docs/ # esta documentación
|
|
├── FLUJOS/
|
|
│ ├── BACK_BACK/FLUJOS_APP.js # servidor Node.js
|
|
│ └── VISUALIZACION/public/ # frontend estático
|
|
├── FLUJOS_DATOS/
|
|
│ ├── pipeline_maestro.py # orquestador
|
|
│ ├── myenv/ # Python venv (~2 GB, en .gitignore)
|
|
│ ├── WIKIPEDIA/main.py # scraper Wikipedia
|
|
│ ├── NOTICIAS/main_noticias.py # scraper noticias
|
|
│ ├── IMAGENES/
|
|
│ │ ├── wikipedia_image_scraper.py # scraper imágenes
|
|
│ │ ├── image_analyzer.py # Qwen3-VL
|
|
│ │ ├── pipeline_imagenes.py # orquestador imágenes
|
|
│ │ ├── model_cache/ # Qwen descargado (~16 GB, .gitignore)
|
|
│ │ └── output/wiki_images/ # imágenes en disco (.gitignore)
|
|
│ └── COMPARACIONES/
|
|
│ ├── pipeline_completo.py # cálculo de similitud
|
|
│ └── pipeline_mongolo.py # tokenización + inserción MongoDB
|
|
└── .gitignore # excluye datos pesados del repo
|
|
```
|
|
|
|
---
|
|
|
|
## Seguridad — prioridades pendientes
|
|
|
|
1. 🔴 **Aplicar `sanitizeParam()`** en FLUJOS_APP.js para prevenir NoSQL injection
|
|
2. 🔴 **Cambiar `'0.0.0.0'` por `'127.0.0.1'`** en `app.listen()` para cerrar puerto 3000
|
|
3. 🟠 **Reemplazar `innerHTML` por `textContent`** en output_int_sec.js y 3dscript_eco-corp.html
|
|
4. 🟠 **Añadir `express-rate-limit`** al endpoint `/api/`
|
|
5. 🟡 **Activar `helmet()` completo** (no solo CSP) para quitar `X-Powered-By`
|
|
|
|
Ver [SEGURIDAD.md](SEGURIDAD.md) para código de fix completo.
|