feat: prerequisites, POC local y README reescrito
deploy/debian/prerequisites.sh: - Instalador de dependencias del sistema para Debian/Ubuntu - Detecta OS, instala PostgreSQL 16 (repo oficial), Redis, nginx, Go 1.25, Node.js 20 LTS, Qdrant binario, Python venv - Crea usuario rss2 y estructura /opt/rss2 - Pregunta interactivamente si instalar modelos ML pesados (ctranslate2, transformers, spaCy es_core_news_lg, NLLB-200) - Separado de install.sh para poder ejecutarlo independientemente poc/poc.sh: - POC local en ~2 minutos sin Docker, sin workers ML - Crea BD temporal coconews_poc con schema completo - Carga 10 noticias de muestra en español listas para ver - Compila backend Go y frontend React en /tmp/coconews-poc - Lanza Redis en puerto alternativo (6380) sin interferir - Sirve frontend con npx serve en http://127.0.0.1:18001 - Limpieza automatica al Ctrl+C poc/seed.sql: - 10 noticias de muestra en español (no requieren traduccion) - Categorias, continentes y paises basicos - 5 feeds de ejemplo (El Pais, BBC Mundo, etc.) README.md: - Reescrito completamente sin referencias Docker - Diagrama ASCII de arquitectura - Inicio rapido con poc.sh (2 minutos) - Instrucciones de install en Debian con prerequisites.sh - Tabla de requisitos hardware por modo - Mapa completo del repositorio Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
ab3b0b53c5
commit
e3c682a36f
4 changed files with 766 additions and 101 deletions
255
README.md
255
README.md
|
|
@ -1,124 +1,177 @@
|
|||
# RSS2 - AI-Powered News Intelligence Platform
|
||||
# COCONEWS
|
||||
|
||||
RSS2 es una plataforma avanzada de agregación, traducción, análisis y vectorización de noticias, diseñada para transformar flujos masivos de información en inteligencia accionable. Utiliza una arquitectura híbrida de microservicios (Go + Python) integrada con modelos de inteligencia artificial de última generación para ofrecer búsqueda semántica, clasificación inteligente y automatización de contenidos.
|
||||
Plataforma de inteligencia de noticias. Agrega feeds RSS de cualquier idioma, los traduce automáticamente al español, extrae entidades, los agrupa por eventos y los hace buscables semánticamente.
|
||||
|
||||
---
|
||||
|
||||
## 🚀 Capacidades Principales
|
||||
## Qué hace
|
||||
|
||||
* **Enriquecimiento con Wikipedia**: Sistema automatizado que detecta personas y organizaciones, descarga sus biografías e imágenes oficiales de Wikipedia para mostrarlas en tooltips interactivos con avatares circulares.
|
||||
* **Categorización Inteligente (LLM)**: Clasificación de noticias mediante una instancia local de Mistral-7B / Llama-3 (vía Ollama), procesando contenido en tiempo real.
|
||||
* **Búsqueda Semántica**: Motor vectorial Qdrant para descubrir noticias por contexto y significado, yendo más allá de las palabras clave tradicionales.
|
||||
* **Traducción Neuronal de Alta Calidad**: Integración de NLLB-200 (vía CTranslate2) para traducir noticias de múltiples idiomas al español con precisión profesional.
|
||||
* **Inteligencia de Entidades (NER)**: Extracción y normalización automática de Personas, Organizaciones y Lugares para análisis de tendencias y mapeo de relaciones.
|
||||
* **Búsqueda de Noticias Relacionadas**: Algoritmos de similitud que agrupan noticias sobre el mismo tema automáticamente.
|
||||
- **Ingesta** feeds RSS/Atom de cualquier idioma de forma continua
|
||||
- **Traduce** al español con NLLB-200 (200 idiomas soportados)
|
||||
- **Extrae entidades** (personas, organizaciones, lugares) con spaCy y las enriquece con Wikipedia
|
||||
- **Genera embeddings** para búsqueda por significado, no solo por palabras clave
|
||||
- **Agrupa noticias** del mismo evento automáticamente
|
||||
- **Categoriza** contenido con reglas y modelos de lenguaje
|
||||
- Interfaz web React con búsqueda semántica, filtros y tooltips de Wikipedia
|
||||
|
||||
---
|
||||
|
||||
## 🏗️ Arquitectura de Servicios (Docker)
|
||||
## Arquitectura
|
||||
|
||||
El sistema se orquestra mediante Docker Compose y se divide en capas especializadas:
|
||||
|
||||
### Capa de Acceso y API
|
||||
| Servicio | Tecnología | Descripción |
|
||||
|---------|------------|-------------|
|
||||
| **`nginx`** | Nginx Alpine | Gateway y Proxy Inverso (Puerto **8001**). |
|
||||
| **`rss2_frontend`** | React + Vite | Interfaz web de usuario moderna y responsiva. |
|
||||
| **`backend-go`** | Go + Gin | API REST principal y gestión de lógica de negocio. |
|
||||
|
||||
### Ingesta y Descubrimiento (Go)
|
||||
| Servicio | Tecnología | Descripción |
|
||||
|---------|------------|-------------|
|
||||
| **`rss-ingestor-go`** | Go | Crawler de alto rendimiento para feeds RSS. |
|
||||
| **`scraper`** | Go | Scraper profundo con sanitización de HTML y extracción de texto. |
|
||||
| **`discovery`** | Go | Agente autónomo para descubrir nuevos feeds a partir de URLs. |
|
||||
|
||||
### Procesamiento de Datos e IA (Go & Python)
|
||||
| Servicio | Tecnología | Descripción |
|
||||
|---------|------------|-------------|
|
||||
| **`translator`** | NLLB-200 (CPU) | Traducción neuronal optimizada con CTranslate2. |
|
||||
| **`translator-gpu`**| NLLB-200 (GPU) | Traducción acelerada por hardware (CUDA). |
|
||||
| **`wiki-worker`** | Go | **[NUEVO]** Integración con Wikipedia y gestión de imágenes locales. |
|
||||
| **`embeddings`** | S-Transformers | Generación de vectores para búsqueda semántica. |
|
||||
| **`ner`** | Spacy / BERT | Reconocimiento de entidades nombradas (NER). |
|
||||
| **`llm-categorizer`**| Ollama / Mistral | Clasificación avanzada mediante modelos de lenguaje. |
|
||||
| **`topics`** | Go | Matcher automático de países y temas predefinidos. |
|
||||
| **`related`** | Go | Motor de detección de noticias relacionadas. |
|
||||
|
||||
### Capa de Almacenamiento
|
||||
| Servicio | Tecnología | Descripción |
|
||||
|---------|------------|-------------|
|
||||
| **`db`** | PostgreSQL 18 | Base de datos relacional principal. |
|
||||
| **`qdrant`** | Qdrant | Base de datos vectorial para búsqueda por similitud. |
|
||||
| **`redis`** | Redis 7 | Colas de mensajes y caché de alto desempeño. |
|
||||
|
||||
---
|
||||
|
||||
## ⚙️ Guía de Configuración
|
||||
|
||||
### 1. Requisitos de Hardware
|
||||
* **Modo Básico (CPU)**: 4+ Cores CPU, 8GB RAM.
|
||||
* **Modo Avanzado (IA)**: NVIDIA GPU con 8GB+ VRAM (mínimo recomendado para LLM y Traducción GPU).
|
||||
|
||||
### 2. Instalación Rápida
|
||||
```bash
|
||||
git clone <repo_url>
|
||||
cd rss2
|
||||
cp .env.example .env
|
||||
# Edita .env con tus credenciales
|
||||
docker compose up -d
|
||||
```
|
||||
Internet (RSS/Atom)
|
||||
│
|
||||
▼
|
||||
rss-ingestor-go ──→ PostgreSQL ──→ langdetect
|
||||
│ │ │
|
||||
scraper/discovery │ translator (NLLB-200)
|
||||
│ │
|
||||
│ embeddings (MiniLM)
|
||||
│ │
|
||||
│ ner (spaCy)
|
||||
│ │
|
||||
│ cluster / related
|
||||
│ │
|
||||
│ qdrant-worker ──→ Qdrant
|
||||
│
|
||||
backend-go (API REST :8080)
|
||||
│
|
||||
nginx (:8001)
|
||||
│
|
||||
Frontend React
|
||||
```
|
||||
|
||||
### 3. Escalado de Workers (¡Importante!)
|
||||
Para aumentar la velocidad de procesamiento (especialmente la traducción), puedes escalar los workers:
|
||||
**Stack:**
|
||||
- Go 1.25 — API REST (Gin), ingestor RSS, scraper, workers
|
||||
- Python 3 — Workers ML (NLLB-200, MiniLM, spaCy, CTranslate2)
|
||||
- PostgreSQL 16 — datos relacionales + full-text search
|
||||
- Qdrant — búsqueda vectorial semántica
|
||||
- Redis 7 — caché de consultas
|
||||
- React 18 + TypeScript + Tailwind — frontend
|
||||
- nginx — proxy inverso + archivos estáticos
|
||||
|
||||
---
|
||||
|
||||
## Inicio rápido (POC local)
|
||||
|
||||
Prueba COCONEWS en tu máquina en ~2 minutos con datos de muestra, sin instalar los modelos ML.
|
||||
|
||||
**Requisitos mínimos para el POC:**
|
||||
- Go 1.25+
|
||||
- Node.js 18+
|
||||
- PostgreSQL (corriendo)
|
||||
- Redis (corriendo)
|
||||
|
||||
```bash
|
||||
# Ejecutar 4 traductores en paralelo
|
||||
docker compose up -d --scale translator=4
|
||||
git clone https://gitea.laenre.net/pietre/rss2.git coconews
|
||||
cd coconews
|
||||
git checkout coconews
|
||||
|
||||
# Si usas GPU y tienes capacidad
|
||||
docker compose up -d --scale translator-gpu=2
|
||||
bash poc/poc.sh
|
||||
```
|
||||
|
||||
Abre `http://127.0.0.1:18001` en el navegador.
|
||||
El primer usuario que se registre será administrador.
|
||||
|
||||
---
|
||||
|
||||
## Instalación en servidor Debian
|
||||
|
||||
Para un despliegue completo con todos los workers ML en producción:
|
||||
|
||||
### 1. Instalar prerequisites
|
||||
|
||||
```bash
|
||||
sudo bash deploy/debian/prerequisites.sh
|
||||
```
|
||||
|
||||
Instala: PostgreSQL 16, Redis, nginx, Go 1.25, Node.js 20, Qdrant, Python 3 venv.
|
||||
Pregunta si instalar los modelos ML pesados ahora o después.
|
||||
|
||||
### 2. Configurar entorno
|
||||
|
||||
```bash
|
||||
cp deploy/debian/env.example /opt/rss2/.env
|
||||
nano /opt/rss2/.env # edita contraseñas y SECRET_KEY
|
||||
```
|
||||
|
||||
### 3. Instalar y arrancar
|
||||
|
||||
```bash
|
||||
sudo bash deploy/debian/install.sh
|
||||
```
|
||||
|
||||
Compila los binarios Go, el frontend React, crea los servicios systemd y arranca todo.
|
||||
|
||||
### Acceder
|
||||
|
||||
```
|
||||
http://IP_DEL_SERVIDOR:8001
|
||||
```
|
||||
|
||||
Guía completa: [DEPLOY_DEBIAN.md](DEPLOY_DEBIAN.md)
|
||||
|
||||
---
|
||||
|
||||
## Gestión de servicios
|
||||
|
||||
```bash
|
||||
# Estado general
|
||||
systemctl status rss2-backend rss2-ingestor rss2-translator
|
||||
|
||||
# Logs en tiempo real
|
||||
journalctl -u rss2-backend -f
|
||||
journalctl -u rss2-translator -f
|
||||
|
||||
# Reiniciar tras actualizar código
|
||||
git pull
|
||||
sudo bash deploy/debian/build.sh
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🛡️ Administración y Mantenimiento
|
||||
## Actualizar el código
|
||||
|
||||
### Copias de Seguridad (Backups)
|
||||
Desde el panel de Administración (`/admin/settings`), puedes realizar:
|
||||
* **Backup Completo**: Volcado SQL de toda la base de datos.
|
||||
* **Backup de Noticias (ZIP)**: **[NUEVO]** Genera un archivo comprimido que incluye las tablas de noticias, traducciones y todas sus etiquetas. Ideal para migraciones de contenido.
|
||||
|
||||
### Variables de Entorno Clave (`.env`)
|
||||
| Variable | Descripción |
|
||||
|----------|-------------|
|
||||
| `WIKI_SLEEP` | Tiempo de espera entre peticiones a Wikipedia (evita bloqueos). |
|
||||
| `SCHEDULER_BATCH`| Cantidad de noticias a enviar a traducir por ciclo. |
|
||||
| `TARGET_LANGS` | Idiomas destino (ej: `es`). |
|
||||
| `OLLAMA_HOST` | Dirección del servidor Ollama para categorización. |
|
||||
|
||||
---
|
||||
|
||||
## 📖 Documentación de la API (Campos Wikipedia)
|
||||
|
||||
Las respuestas de noticias ahora incluyen el objeto `entities` enriquecido:
|
||||
|
||||
```json
|
||||
{
|
||||
"id": 67449,
|
||||
"titulo": "...",
|
||||
"entities": [
|
||||
{
|
||||
"valor": "Apple",
|
||||
"tipo": "organizacion",
|
||||
"wiki_summary": "Apple Inc. es una empresa estadounidense...",
|
||||
"wiki_url": "https://es.wikipedia.org/wiki/Apple",
|
||||
"image_path": "/api/wiki-images/wiki_5723.png"
|
||||
}
|
||||
]
|
||||
}
|
||||
```bash
|
||||
cd /ruta/al/repo
|
||||
git pull
|
||||
sudo bash deploy/debian/build.sh
|
||||
```
|
||||
|
||||
`build.sh` recompila los binarios Go, el frontend y sincroniza los workers Python, y reinicia los servicios automáticamente.
|
||||
|
||||
---
|
||||
|
||||
**RSS2** - *Transformando noticias en inteligencia con IA localizada.*
|
||||
## Requisitos de hardware
|
||||
|
||||
| Modo | CPU | RAM | Disco |
|
||||
|------|-----|-----|-------|
|
||||
| POC local | 2 cores | 4 GB | 10 GB |
|
||||
| Producción CPU | 4+ cores | 8 GB | 40 GB |
|
||||
| Producción recomendado | 8 cores | 16 GB | 80 GB |
|
||||
|
||||
---
|
||||
|
||||
## Estructura del repositorio
|
||||
|
||||
```
|
||||
├── backend/ Go — API REST + workers (scraper, discovery, wiki, topics, related, qdrant)
|
||||
├── rss-ingestor-go/ Go — Ingestor de feeds RSS
|
||||
├── frontend/ React + TypeScript + Tailwind
|
||||
├── workers/ Python — ML workers (traducción, embeddings, NER, cluster, categorización)
|
||||
├── init-db/ SQL — Schema y datos iniciales
|
||||
├── migrations/ SQL — Migraciones incrementales
|
||||
├── deploy/debian/ Scripts de despliegue para Debian sin Docker
|
||||
│ ├── prerequisites.sh Instala todas las dependencias del sistema
|
||||
│ ├── install.sh Instalación completa
|
||||
│ ├── build.sh Recompila y reinicia tras actualizar código
|
||||
│ ├── env.example Plantilla de variables de entorno
|
||||
│ ├── nginx.conf Configuración nginx para despliegue nativo
|
||||
│ └── systemd/ Ficheros de servicio systemd (16 servicios)
|
||||
├── poc/
|
||||
│ ├── poc.sh POC local con datos de prueba (sin Docker, sin ML)
|
||||
│ └── seed.sql Datos de muestra para el POC
|
||||
├── feeds.csv Feeds RSS precargados para importar desde el admin
|
||||
├── entity_config.json Aliases y blacklist para normalización de entidades NER
|
||||
└── DEPLOY_DEBIAN.md Guía detallada de despliegue en Debian
|
||||
```
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue