rss2/DEPLOY.md

353 lines
7.7 KiB
Markdown

# 🚀 Guía de Despliegue RSS2
## ⚡ Despliegue Rápido (5 minutos)
### Paso 1: Clonar el Proyecto
```bash
git clone https://github.com/tu-usuario/rss2.git
cd rss2
```
### Paso 2: Generar Credenciales Seguras
```bash
./pre-deploy.sh --generate
```
**Salida esperada:**
```
🔑 Generando credenciales seguras...
⚠️ IMPORTANTE: Guarda estas credenciales en un lugar seguro
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
POSTGRES_PASSWORD: S5xwsI9HKjdaBWLpCkqp0mA0DJYZerpD
REDIS_PASSWORD: cVF79QuJulPO5auEhA2nNqv7mqAruzYh
SECRET_KEY: 2eb7c221245bb8d896f83255188de614e59fae6b8dfbf16eee8a23c60dde4ffa
GRAFANA_PASSWORD: R4J61V6OGLTCesrITwEvUPTm
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
```
**⚠️ IMPORTANTE:** Copia estas contraseñas y guárdalas en un gestor de contraseñas. ¡Nunca se volverán a mostrar!
### Paso 3: Validar y Desplegar
```bash
./pre-deploy.sh
```
**El script te preguntará:**
```
¿Deseas desplegar ahora?
1) Desplegar automáticamente (recomendado)
2) Solo validar y salir (modo manual)
Elige una opción:
```
**Opción A: Despliegue automático (Opción 1)**
- Elige `1` para que el script haga todo automáticamente
- Espera a que termine la construcción de las imágenes
- Espera a que inicien los servicios
**Opción B: Despliegue manual (Opción 2)**
- Elige `2` para validar solo
- Luego ejecuta manualmente:
```bash
docker compose up -d
```
### Paso 4: Verificar Despliegue
```bash
# Verificar estado de los servicios
docker compose ps
# Deberías ver algo como:
# Name Status
# rss2_db Up (healthy)
# rss2_redis Up (healthy)
# rss2_backend_go Up (running)
# ...
```
### Paso 5: Acceder a la Aplicación
```bash
# Aplicación web
http://localhost:8888
# API (prueba con curl)
curl http://localhost:8888/api/feeds
```
---
## 🔐 Seguridad
### ¿Por qué es importante?
**Sin seguridad (❌ MAL):**
```bash
docker compose up -d
WARN: The "DB_PASS" variable is not set. Defaulting to a blank string.
# Las contraseñas están vacías ¡PELIGRO!
```
**Con seguridad (✅ BIEN):**
```bash
./pre-deploy.sh --generate
./pre-deploy.sh
docker compose up -d
# ✅ Todo funciona correctamente
```
### Variables Críticas
| Variable | Qué es | Por qué es importante |
|----------|--------|----------------------|
| `POSTGRES_PASSWORD` | Contraseña de PostgreSQL | Base de datos principal |
| `REDIS_PASSWORD` | Contraseña de Redis | Cache y colas |
| `DB_PASS` | Contraseña para workers | Conexiones de workers |
| `SECRET_KEY` | Key secreta de la app | JWT, encriptación |
| `GRAFANA_PASSWORD` | Contraseña de Grafana | Dashboard de monitoring |
### Guardar tus Credenciales
**Opción 1: Gestor de contraseñas (Recomendado)**
```bash
# Copia las credenciales y guárdalas en:
# - LastPass
# - 1Password
# - KeePass
# - Bitwarden
```
**Opción 2: Archivo seguro local**
```bash
# Crea un archivo seguro fuera del proyecto
echo "POSTGRES_PASSWORD=..." > ~/rss2-credentials.txt
echo "REDIS_PASSWORD=..." >> ~/rss2-credentials.txt
```
---
## 🛠️ Comandos Útiles
### Verificar Credenciales
```bash
# Ver que las contraseñas están definidas
grep -E "^(POSTGRES_PASSWORD|REDIS_PASSWORD|DB_PASS)=" .env
```
### Reiniciar Servicios
```bash
# Reiniciar todos los servicios
docker compose restart
# Reiniciar solo base de datos
docker compose restart db
```
### Escalar Workers
```bash
# Añadir más traductores (CPU)
docker compose up -d --scale translator=3
# Añadir más traductores (GPU)
docker compose up -d --scale translator-gpu=2
```
### Ver Logs
```bash
# Ver logs en tiempo real
docker compose logs -f
# Ver logs específicos
docker compose logs -f db
docker compose logs -f redis
docker compose logs -f backend-go
```
### Limpiar y Reiniciar
```bash
# Detener y eliminar todo (incluye datos)
docker compose down -v
# Eliminar solo contenedores (mantiene datos)
docker compose down
# Eliminar volumen específico
docker volume rm rss2_db
docker volume rm rss2_redis
```
---
## 🐛 Solución de Problemas
### Problema: WARN sobre variables no definidas
```
WARN: The "DB_PASS" variable is not set. Defaulting to a blank string.
```
**Solución:**
```bash
# Ejecutar pre-deploy para generar credenciales
./pre-deploy.sh --generate
```
### Problema: Contraseña vacía en healthcheck
```
redis-cli: Authentication failed
```
**Solución:**
```bash
# Verificar REDIS_PASSWORD
grep REDIS_PASSWORD .env
# Si está vacío, regenerar
./pre-deploy.sh --generate
```
### Problema: Port 8888 en uso
```
ERROR: failed to start service: port 8888 already in use
```
**Solución:**
```bash
# Cambiar puerto en docker-compose.yml
# O matar el proceso que usa el puerto
lsof -ti:8888 | xargs kill
# O usar otro puerto
docker compose up -d --scale nginx=1
```
### Problema: Base de datos no inicia
```
postgres: cannot connect to database
```
**Solución:**
```bash
# Ver logs de la base de datos
docker compose logs db
# Reiniciar base de datos
docker compose restart db
# Si persiste, eliminar y recrear (¡PERDERÁS DATOS!)
docker compose down -v
docker compose up -d db
```
---
## 📊 Estado de los Servicios
### Servicios Críticos
| Servicio | Puerto | Descripción |
|----------|--------|-------------|
| `nginx` | 8888 | Aplicación web |
| `backend-go` | 8080 | API interna |
| `db` | 5432 | PostgreSQL |
| `redis` | 6379 | Redis cache |
| `qdrant` | 6333 | Vector database |
### Dashboard de Monitorización
| Herramienta | Puerto | Acceso |
|-------------|--------|--------|
| Grafana | 3001 | http://127.0.0.1:3001 |
| Prometheus | 9090 | http://127.0.0.1:9090 |
**Nota:** Accede a Grafana desde `127.0.0.1` (localhost) por seguridad.
---
## 🔄 Actualización (Upgrade)
### Actualizar a Nueva Versión
```bash
# 1. Pull las nuevas imágenes
docker compose pull
# 2. Backup de la base de datos
docker compose exec db pg_dump -U rss rss > backup.sql
# 3. Parar servicios
docker compose down
# 4. Actualizar código
git pull
# 5. Reiniciar
docker compose up -d
# 6. Verificar
curl http://localhost:8888/api/health
```
### Migrar Contraseñas
Si tienes credenciales existentes y quieres mantenerlas:
```bash
# 1. Verificar .env existente
grep POSTGRES_PASSWORD .env
# 2. Si quieres nuevas credenciales
./pre-deploy.sh --generate
# 3. Si quieres mantener las existentes
# No hagas nada, las credenciales seguirán funcionando
```
---
## 📝 Archivos Importantes
| Archivo | Propósito |
|---------|-----------|
| `.env` | Contraseñas y configuración (NO subir a Git) |
| `.env.example` | Plantilla (SÍ subir a Git) |
| `pre-deploy.sh` | Script de validación (SÍ subir a Git) |
| `generate_secure_credentials.sh` | Script de generación (SÍ subir a Git) |
| `docker-compose.yml` | Configuración de Docker (SÍ subir a Git) |
---
## ✅ Checklist Final
Antes de considerar tu despliegue como "listo", verifica:
- [ ] `.env` tiene credenciales generadas (no por defecto)
- [ ] `.env` está en `.gitignore`
- [ ] Puedes acceder a http://localhost:8888
- [ ] `docker compose ps` muestra todos los servicios "Up"
- [ ] La base de datos muestra "healthy"
- [ ] Los logs de la base de datos no tienen errores
- [ ] Redis responde a ping
- [ ] Qdrant está funcionando
**¡Listo! Tu RSS2 está desplegado y funcionando.** 🎉
---
## 📚 Documentación Adicional
- [README.md](./README.md) - Documentación general
- [SECURITY_GUIDE.md](./SECURITY_GUIDE.md) - Guía de seguridad
- [DOCKER.md](./DOCKER.md) - Configuración avanzada de Docker
---
**RSS2** - *Transformando noticias en inteligencia con IA.*