rss2/DEPLOY.md

7.7 KiB

🚀 Guía de Despliegue RSS2

Despliegue Rápido (5 minutos)

Paso 1: Clonar el Proyecto

git clone https://github.com/tu-usuario/rss2.git
cd rss2

Paso 2: Generar Credenciales Seguras

./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

./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:
    docker compose up -d
    

Paso 4: Verificar Despliegue

# 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

# Aplicación web
http://localhost:8888

# API (prueba con curl)
curl http://localhost:8888/api/feeds

🔐 Seguridad

¿Por qué es importante?

Sin seguridad ( MAL):

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):

./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)

# Copia las credenciales y guárdalas en:
# - LastPass
# - 1Password
# - KeePass
# - Bitwarden

Opción 2: Archivo seguro local

# Crea un archivo seguro fuera del proyecto
echo "POSTGRES_PASSWORD=..." > ~/rss2-credentials.txt
echo "REDIS_PASSWORD=..." >> ~/rss2-credentials.txt

🛠️ Comandos Útiles

Verificar Credenciales

# Ver que las contraseñas están definidas
grep -E "^(POSTGRES_PASSWORD|REDIS_PASSWORD|DB_PASS)=" .env

Reiniciar Servicios

# Reiniciar todos los servicios
docker compose restart

# Reiniciar solo base de datos
docker compose restart db

Escalar Workers

# 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

# 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

# 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:

# Ejecutar pre-deploy para generar credenciales
./pre-deploy.sh --generate

Problema: Contraseña vacía en healthcheck

redis-cli: Authentication failed

Solución:

# 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:

# 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:

# 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

# 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:

# 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


RSS2 - Transformando noticias en inteligencia con IA.