rss2/README.md
SITO b3bf3d7a7f refactor: reorganizar estructura de archivos en raiz
Antes la raiz tenia 20+ archivos sueltos. Ahora organizado en:

  docs/       10 archivos .md de documentacion tecnica
  scripts/    3 scripts utilitarios (credentials, migrate, verify)
  config/     entity_config.json (aliases y blacklist NER)
  data/       feeds.csv (feeds precargados)

Eliminados restos de Docker que ya no aplican:
  .dockerignore, .env.example, .env.secure.example, nginx.conf (raiz)

Makefile: eliminados targets docker-build, añadidos install/rebuild/check/poc

Referencias actualizadas en:
  deploy/debian/install.sh  entity_config.json -> config/entity_config.json
  deploy/debian/build.sh    entity_config.json -> config/entity_config.json
  README.md                 links a docs/ y data/ actualizados,
                            arbol de estructura del repo reescrito

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-30 22:29:50 +02:00

200 lines
6.1 KiB
Markdown

# COCONEWS
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.
---
## Qué hace
- **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
```
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
```
**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
git clone https://gitea.laenre.net/pietre/rss2.git coconews
cd coconews
git checkout coconews
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: [docs/DEPLOY_DEBIAN.md](docs/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
```
---
## Actualizar el código
```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.
---
## 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
```
├── README.md
├── requirements.txt Dependencias Python para workers ML
├── Makefile Compilación local de binarios Go
├── 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 — Workers ML (traducción, embeddings, NER, cluster, categorización)
├── init-db/ SQL — Schema completo y datos iniciales
├── migrations/ SQL — Migraciones incrementales
├── config/
│ └── entity_config.json Aliases y blacklist para normalización de entidades NER
├── data/
│ └── feeds.csv Feeds RSS precargados para importar desde el admin
├── docs/
│ ├── DEPLOY_DEBIAN.md Guía detallada de despliegue en Debian
│ ├── SECURITY_GUIDE.md Guía de seguridad
│ ├── SECURITY_AUDIT.md Resultado del audit de seguridad
│ ├── QDRANT_SETUP.md Configuración de Qdrant
│ └── ... Resto de documentación técnica
├── scripts/
│ ├── generate_secure_credentials.sh
│ ├── migrate_to_secure.sh
│ └── verify_security.sh
├── deploy/debian/ Despliegue nativo en 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
│ ├── check.sh Diagnóstico del sistema
│ ├── env.example Plantilla de variables de entorno
│ ├── nginx.conf Configuración nginx
│ └── systemd/ 16 ficheros de servicio systemd
└── poc/
├── poc.sh POC local en 2 minutos (sin Docker, sin ML)
└── seed.sql 10 noticias de muestra en español
```