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>
This commit is contained in:
parent
ec839b5b54
commit
b3bf3d7a7f
23 changed files with 59 additions and 335 deletions
190
scripts/generate_secure_credentials.sh
Executable file
190
scripts/generate_secure_credentials.sh
Executable file
|
|
@ -0,0 +1,190 @@
|
|||
#!/bin/bash
|
||||
|
||||
# ==================================================================================
|
||||
# Script de Generación de Credenciales Seguras
|
||||
# ==================================================================================
|
||||
#
|
||||
# Este script genera credenciales aleatorias seguras para todos los servicios
|
||||
# y crea un archivo .env con las configuraciones necesarias.
|
||||
#
|
||||
# Uso:
|
||||
# ./generate_secure_credentials.sh
|
||||
#
|
||||
# El script creará:
|
||||
# - .env.generated (con las credenciales nuevas)
|
||||
# - .env.backup (backup de .env actual si existe)
|
||||
#
|
||||
# ==================================================================================
|
||||
|
||||
set -e # Exit on error
|
||||
|
||||
# Colores para output
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
echo -e "${GREEN}=================================="
|
||||
echo -e "🔒 Generador de Credenciales Seguras"
|
||||
echo -e "==================================${NC}\n"
|
||||
|
||||
# Verificar dependencias
|
||||
command -v openssl >/dev/null 2>&1 || { echo -e "${RED}❌ Error: openssl no está instalado${NC}"; exit 1; }
|
||||
command -v python3 >/dev/null 2>&1 || { echo -e "${RED}❌ Error: python3 no está instalado${NC}"; exit 1; }
|
||||
|
||||
# Backup del .env actual si existe
|
||||
if [ -f .env ]; then
|
||||
echo -e "${YELLOW}⚠️ Encontrado archivo .env existente${NC}"
|
||||
BACKUP_FILE=".env.backup.$(date +%Y%m%d_%H%M%S)"
|
||||
cp .env "$BACKUP_FILE"
|
||||
echo -e "${GREEN}✅ Backup creado: $BACKUP_FILE${NC}\n"
|
||||
fi
|
||||
|
||||
echo -e "${GREEN}🔑 Generando credenciales seguras...${NC}\n"
|
||||
|
||||
# Generar credenciales
|
||||
POSTGRES_PASSWORD=$(openssl rand -base64 32 | tr -d "=+/" | cut -c1-32)
|
||||
REDIS_PASSWORD=$(openssl rand -base64 32 | tr -d "=+/" | cut -c1-32)
|
||||
SECRET_KEY=$(python3 -c "import secrets; print(secrets.token_hex(32))")
|
||||
GRAFANA_PASSWORD=$(openssl rand -base64 24 | tr -d "=+/" | cut -c1-24)
|
||||
|
||||
# Mostrar credenciales generadas (para que el usuario las guarde)
|
||||
echo -e "${YELLOW}⚠️ IMPORTANTE: Guarda estas credenciales en un lugar seguro${NC}\n"
|
||||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||
echo -e "${GREEN}POSTGRES_PASSWORD:${NC} $POSTGRES_PASSWORD"
|
||||
echo -e "${GREEN}REDIS_PASSWORD:${NC} $REDIS_PASSWORD"
|
||||
echo -e "${GREEN}SECRET_KEY:${NC} $SECRET_KEY"
|
||||
echo -e "${GREEN}GRAFANA_PASSWORD:${NC} $GRAFANA_PASSWORD"
|
||||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||
echo ""
|
||||
|
||||
# Crear archivo .env.generated
|
||||
ENV_FILE=".env.generated"
|
||||
cat > "$ENV_FILE" << EOF
|
||||
# ==================================================================================
|
||||
# CONFIGURACIÓN SEGURA - Generado automáticamente
|
||||
# Fecha: $(date +"%Y-%m-%d %H:%M:%S")
|
||||
# ==================================================================================
|
||||
#
|
||||
# IMPORTANTE:
|
||||
# - NO compartas este archivo
|
||||
# - Guarda las credenciales en un gestor de contraseñas
|
||||
# - Añade .env al .gitignore
|
||||
#
|
||||
# ==================================================================================
|
||||
|
||||
# ==================================================================================
|
||||
# DATABASE CONFIGURATION - PostgreSQL
|
||||
# ==================================================================================
|
||||
POSTGRES_DB=rss
|
||||
POSTGRES_USER=rss
|
||||
POSTGRES_PASSWORD=$POSTGRES_PASSWORD
|
||||
|
||||
DB_NAME=rss
|
||||
DB_USER=rss
|
||||
DB_PASS=$POSTGRES_PASSWORD
|
||||
DB_HOST=db
|
||||
DB_PORT=5432
|
||||
DB_WRITE_HOST=db
|
||||
DB_READ_HOST=db-replica
|
||||
|
||||
# ==================================================================================
|
||||
# REDIS CONFIGURATION - Con autenticación
|
||||
# ==================================================================================
|
||||
REDIS_HOST=redis
|
||||
REDIS_PORT=6379
|
||||
REDIS_PASSWORD=$REDIS_PASSWORD
|
||||
|
||||
# ==================================================================================
|
||||
# APPLICATION SECRETS
|
||||
# ==================================================================================
|
||||
SECRET_KEY=$SECRET_KEY
|
||||
|
||||
# ==================================================================================
|
||||
# MONITORING - Grafana
|
||||
# ==================================================================================
|
||||
GRAFANA_PASSWORD=$GRAFANA_PASSWORD
|
||||
|
||||
# ==================================================================================
|
||||
# EXTERNAL SERVICES
|
||||
# ==================================================================================
|
||||
ALLTALK_URL=http://host.docker.internal:7851
|
||||
|
||||
# ==================================================================================
|
||||
# AI MODELS & WORKERS
|
||||
# ==================================================================================
|
||||
RSS_MAX_WORKERS=3
|
||||
TARGET_LANGS=es
|
||||
TRANSLATOR_BATCH=128
|
||||
ENQUEUE=300
|
||||
|
||||
# RSS Ingestor Configuration
|
||||
RSS_POKE_INTERVAL_MIN=15
|
||||
RSS_MAX_FAILURES=10
|
||||
RSS_FEED_TIMEOUT=60
|
||||
|
||||
# URL Feed Discovery Worker
|
||||
URL_DISCOVERY_INTERVAL_MIN=15
|
||||
URL_DISCOVERY_BATCH_SIZE=10
|
||||
MAX_FEEDS_PER_URL=5
|
||||
|
||||
# CTranslate2 / AI Model Paths
|
||||
CT2_MODEL_PATH=/app/models/nllb-ct2
|
||||
CT2_DEVICE=cuda
|
||||
CT2_COMPUTE_TYPE=int8_float16
|
||||
UNIVERSAL_MODEL=facebook/nllb-200-distilled-600M
|
||||
|
||||
# Embeddings
|
||||
EMB_MODEL=sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2
|
||||
EMB_BATCH=64
|
||||
EMB_DEVICE=cuda
|
||||
|
||||
# NER
|
||||
NER_LANG=es
|
||||
NER_BATCH=64
|
||||
|
||||
# Flask / Gunicorn
|
||||
GUNICORN_WORKERS=8
|
||||
FLASK_DEBUG=0
|
||||
|
||||
# Qdrant Configuration
|
||||
QDRANT_HOST=qdrant
|
||||
QDRANT_PORT=6333
|
||||
QDRANT_COLLECTION_NAME=news_vectors
|
||||
QDRANT_BATCH_SIZE=100
|
||||
QDRANT_SLEEP_IDLE=30
|
||||
EOF
|
||||
|
||||
echo -e "${GREEN}✅ Archivo generado: $ENV_FILE${NC}\n"
|
||||
|
||||
# Preguntar si quiere reemplazar .env
|
||||
echo -e "${YELLOW}¿Deseas reemplazar el archivo .env actual con el generado?${NC}"
|
||||
echo -e "${YELLOW}(Recomendado: revisa $ENV_FILE primero)${NC}"
|
||||
read -p "¿Continuar? (s/N): " -n 1 -r
|
||||
echo
|
||||
if [[ $REPLY =~ ^[SsYy]$ ]]; then
|
||||
mv "$ENV_FILE" .env
|
||||
echo -e "${GREEN}✅ Archivo .env actualizado${NC}"
|
||||
else
|
||||
echo -e "${YELLOW}⚠️ Archivo guardado como: $ENV_FILE${NC}"
|
||||
echo -e "${YELLOW} Para usarlo: mv $ENV_FILE .env${NC}"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo -e "${GREEN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
|
||||
echo -e "${GREEN}✅ ¡Credenciales generadas exitosamente!${NC}"
|
||||
echo -e "${GREEN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
|
||||
echo ""
|
||||
echo -e "${YELLOW}📋 PRÓXIMOS PASOS:${NC}"
|
||||
echo ""
|
||||
echo -e " 1. Revisa las credenciales generadas arriba"
|
||||
echo -e " 2. Guárdalas en un gestor de contraseñas seguro"
|
||||
echo -e " 3. Migra a docker-compose.secure.yml:"
|
||||
echo -e " ${GREEN}cp docker-compose.secure.yml docker-compose.yml${NC}"
|
||||
echo -e " 4. Haz backup de tus datos (ver SECURITY_GUIDE.md)"
|
||||
echo -e " 5. Reinicia los servicios:"
|
||||
echo -e " ${GREEN}docker-compose down && docker-compose up -d${NC}"
|
||||
echo -e " 6. Verifica que todo funciona correctamente"
|
||||
echo ""
|
||||
echo -e "${YELLOW}📖 Para más detalles, revisa: SECURITY_GUIDE.md${NC}"
|
||||
echo ""
|
||||
119
scripts/migrate_to_secure.sh
Executable file
119
scripts/migrate_to_secure.sh
Executable file
|
|
@ -0,0 +1,119 @@
|
|||
#!/bin/bash
|
||||
|
||||
# ==================================================================================
|
||||
# Script de Migración a Configuración Segura - TODO EN UNO
|
||||
# ==================================================================================
|
||||
|
||||
set -e
|
||||
|
||||
# Colores
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
RED='\033[0;31m'
|
||||
NC='\033[0m'
|
||||
|
||||
echo -e "${BLUE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
|
||||
echo -e "${BLUE}🔒 Migración a Configuración Segura - TODO EN UNO${NC}"
|
||||
echo -e "${BLUE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}\n"
|
||||
|
||||
echo -e "${YELLOW}⚠️ Este script hará lo siguiente:${NC}"
|
||||
echo " 1. Detener los servicios actuales"
|
||||
echo " 2. Iniciar con la configuración segura"
|
||||
echo " 3. Verificar que todo funciona"
|
||||
echo ""
|
||||
echo -e "${YELLOW}📊 Tiempo estimado: 3-5 minutos${NC}\n"
|
||||
|
||||
read -p "¿Deseas continuar? (s/N): " -n 1 -r
|
||||
echo
|
||||
if [[ ! $REPLY =~ ^[SsYy]$ ]]; then
|
||||
echo -e "${RED}❌ Operación cancelada${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo -e "${GREEN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
|
||||
echo -e "${GREEN}PASO 1: Deteniendo servicios actuales...${NC}"
|
||||
echo -e "${GREEN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}\n"
|
||||
|
||||
docker-compose down
|
||||
|
||||
echo ""
|
||||
echo -e "${GREEN}✅ Servicios detenidos${NC}\n"
|
||||
|
||||
echo -e "${GREEN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
|
||||
echo -e "${GREEN}PASO 2: Iniciando con configuración segura...${NC}"
|
||||
echo -e "${GREEN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}\n"
|
||||
|
||||
docker-compose up -d
|
||||
|
||||
echo ""
|
||||
echo -e "${GREEN}✅ Servicios iniciados${NC}\n"
|
||||
|
||||
echo -e "${GREEN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
|
||||
echo -e "${GREEN}PASO 3: Esperando que los servicios se inicialicen...${NC}"
|
||||
echo -e "${GREEN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}\n"
|
||||
|
||||
echo -n "Esperando 30 segundos"
|
||||
for i in {1..30}; do
|
||||
echo -n "."
|
||||
sleep 1
|
||||
done
|
||||
echo ""
|
||||
|
||||
echo ""
|
||||
echo -e "${GREEN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
|
||||
echo -e "${GREEN}PASO 4: Verificando servicios...${NC}"
|
||||
echo -e "${GREEN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}\n"
|
||||
|
||||
docker-compose ps
|
||||
|
||||
echo ""
|
||||
echo -e "${GREEN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
|
||||
echo -e "${GREEN}PASO 5: Ejecutando verificación de seguridad...${NC}"
|
||||
echo -e "${GREEN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}\n"
|
||||
|
||||
./verify_security.sh
|
||||
|
||||
echo ""
|
||||
echo -e "${GREEN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
|
||||
echo -e "${GREEN}PASO 6: Verificando web app...${NC}"
|
||||
echo -e "${GREEN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}\n"
|
||||
|
||||
if curl -s http://localhost:8001 > /dev/null 2>&1; then
|
||||
echo -e "${GREEN}✅ Web app responde correctamente${NC}"
|
||||
else
|
||||
echo -e "${RED}❌ Web app no responde - revisar logs:${NC}"
|
||||
echo " docker-compose logs nginx"
|
||||
echo " docker-compose logs rss2_web"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo -e "${BLUE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
|
||||
echo -e "${BLUE}🎉 ¡Migración completada!${NC}"
|
||||
echo -e "${BLUE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}\n"
|
||||
|
||||
echo -e "${GREEN}✅ Tu sistema ahora está configurado de forma segura:${NC}\n"
|
||||
echo " 🔒 Credenciales fuertes configuradas"
|
||||
echo " 🌐 Redes segmentadas (frontend, backend, monitoring)"
|
||||
echo " 🚪 Solo puerto 8001 expuesto públicamente"
|
||||
echo " 🔐 Redis con autenticación"
|
||||
echo " 📊 Límites de recursos configurados"
|
||||
echo ""
|
||||
|
||||
echo -e "${YELLOW}📋 PRÓXIMOS PASOS:${NC}\n"
|
||||
echo " 1. Verifica que puedes acceder a: http://localhost:8001"
|
||||
echo " 2. Prueba búsqueda y funcionalidades principales"
|
||||
echo " 3. Para Grafana (monitoring):"
|
||||
echo " - Acceso local: http://localhost:3001"
|
||||
echo " - Usuario: admin"
|
||||
echo " - Password: Ver EJECUTAR_AHORA.md"
|
||||
echo ""
|
||||
|
||||
echo -e "${YELLOW}📖 Documentación:${NC}"
|
||||
echo " - EJECUTAR_AHORA.md → Instrucciones detalladas"
|
||||
echo " - SECURITY_GUIDE.md → Guía completa de seguridad"
|
||||
echo " - SECURITY_AUDIT.md → Resumen de auditoría"
|
||||
echo ""
|
||||
|
||||
echo -e "${GREEN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}\n"
|
||||
214
scripts/verify_security.sh
Executable file
214
scripts/verify_security.sh
Executable file
|
|
@ -0,0 +1,214 @@
|
|||
#!/bin/bash
|
||||
|
||||
# ==================================================================================
|
||||
# Script de Verificación de Seguridad
|
||||
# ==================================================================================
|
||||
#
|
||||
# Este script verifica que la configuración segura esté correctamente implementada
|
||||
#
|
||||
# Uso:
|
||||
# ./verify_security.sh
|
||||
#
|
||||
# ==================================================================================
|
||||
|
||||
set -e
|
||||
|
||||
# Colores
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
TOTAL_CHECKS=0
|
||||
PASSED_CHECKS=0
|
||||
FAILED_CHECKS=0
|
||||
|
||||
echo -e "${BLUE}=================================="
|
||||
echo -e "🔍 Verificación de Seguridad"
|
||||
echo -e "==================================${NC}\n"
|
||||
|
||||
# Función para verificar
|
||||
check() {
|
||||
local test_name="$1"
|
||||
local command="$2"
|
||||
local expected="$3"
|
||||
|
||||
TOTAL_CHECKS=$((TOTAL_CHECKS + 1))
|
||||
|
||||
echo -n "Verificando: $test_name... "
|
||||
|
||||
if eval "$command" > /dev/null 2>&1; then
|
||||
if [ "$expected" = "pass" ]; then
|
||||
echo -e "${GREEN}✅ PASS${NC}"
|
||||
PASSED_CHECKS=$((PASSED_CHECKS + 1))
|
||||
return 0
|
||||
else
|
||||
echo -e "${RED}❌ FAIL${NC}"
|
||||
FAILED_CHECKS=$((FAILED_CHECKS + 1))
|
||||
return 1
|
||||
fi
|
||||
else
|
||||
if [ "$expected" = "fail" ]; then
|
||||
echo -e "${GREEN}✅ PASS${NC}"
|
||||
PASSED_CHECKS=$((PASSED_CHECKS + 1))
|
||||
return 0
|
||||
else
|
||||
echo -e "${RED}❌ FAIL${NC}"
|
||||
FAILED_CHECKS=$((FAILED_CHECKS + 1))
|
||||
return 1
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
# Verificar que docker-compose está instalado
|
||||
if ! command -v docker-compose &> /dev/null; then
|
||||
echo -e "${RED}❌ docker-compose no está instalado${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo -e "${YELLOW}📋 Verificando configuración de red...${NC}\n"
|
||||
|
||||
# Verificar que las redes están creadas
|
||||
check "Red frontend existe" "docker network inspect rss2_frontend" "pass"
|
||||
check "Red backend existe" "docker network inspect rss2_backend" "pass"
|
||||
check "Red monitoring existe" "docker network inspect rss2_monitoring" "pass"
|
||||
|
||||
echo ""
|
||||
echo -e "${YELLOW}📋 Verificando servicios en ejecución...${NC}\n"
|
||||
|
||||
# Verificar servicios críticos
|
||||
check "Contenedor DB corriendo" "docker ps | grep rss2_db" "pass"
|
||||
check "Contenedor Redis corriendo" "docker ps | grep rss2_redis" "pass"
|
||||
check "Contenedor Web corriendo" "docker ps | grep rss2_web" "pass"
|
||||
check "Contenedor Nginx corriendo" "docker ps | grep rss2_nginx" "pass"
|
||||
check "Contenedor Qdrant corriendo" "docker ps | grep rss2_qdrant" "pass"
|
||||
|
||||
echo ""
|
||||
echo -e "${YELLOW}📋 Verificando exposición de puertos...${NC}\n"
|
||||
|
||||
# Verificar que puertos internos NO están expuestos
|
||||
check "Qdrant NO expuesto públicamente" "! docker ps | grep '0.0.0.0:6333'" "pass"
|
||||
check "Prometheus NO expuesto públicamente" "! docker ps | grep '0.0.0.0:9090'" "pass"
|
||||
check "cAdvisor NO expuesto públicamente" "! docker ps | grep '0.0.0.0:8081'" "pass"
|
||||
|
||||
# Verificar que puerto web SÍ está expuesto
|
||||
check "Nginx expuesto en puerto 8001" "docker ps | grep '0.0.0.0:8001->80'" "pass"
|
||||
|
||||
echo ""
|
||||
echo -e "${YELLOW}📋 Verificando variables de entorno...${NC}\n"
|
||||
|
||||
# Verificar .env existe
|
||||
if [ ! -f .env ]; then
|
||||
echo -e "${RED}❌ Archivo .env no existe${NC}"
|
||||
FAILED_CHECKS=$((FAILED_CHECKS + 1))
|
||||
TOTAL_CHECKS=$((TOTAL_CHECKS + 1))
|
||||
else
|
||||
echo -e "${GREEN}✅ Archivo .env existe${NC}"
|
||||
PASSED_CHECKS=$((PASSED_CHECKS + 1))
|
||||
TOTAL_CHECKS=$((TOTAL_CHECKS + 1))
|
||||
|
||||
# Verificar que las credenciales han sido cambiadas
|
||||
if grep -q "POSTGRES_PASSWORD=x" .env 2>/dev/null; then
|
||||
echo -e "${RED}❌ POSTGRES_PASSWORD sigue siendo 'x' (INSEGURO)${NC}"
|
||||
FAILED_CHECKS=$((FAILED_CHECKS + 1))
|
||||
else
|
||||
echo -e "${GREEN}✅ POSTGRES_PASSWORD ha sido cambiado${NC}"
|
||||
PASSED_CHECKS=$((PASSED_CHECKS + 1))
|
||||
fi
|
||||
TOTAL_CHECKS=$((TOTAL_CHECKS + 1))
|
||||
|
||||
if grep -q "SECRET_KEY=secret" .env 2>/dev/null; then
|
||||
echo -e "${RED}❌ SECRET_KEY sigue siendo 'secret' (INSEGURO)${NC}"
|
||||
FAILED_CHECKS=$((FAILED_CHECKS + 1))
|
||||
else
|
||||
echo -e "${GREEN}✅ SECRET_KEY ha sido cambiado${NC}"
|
||||
PASSED_CHECKS=$((PASSED_CHECKS + 1))
|
||||
fi
|
||||
TOTAL_CHECKS=$((TOTAL_CHECKS + 1))
|
||||
|
||||
if grep -q "REDIS_PASSWORD" .env 2>/dev/null; then
|
||||
echo -e "${GREEN}✅ REDIS_PASSWORD está configurado${NC}"
|
||||
PASSED_CHECKS=$((PASSED_CHECKS + 1))
|
||||
else
|
||||
echo -e "${RED}❌ REDIS_PASSWORD no está configurado${NC}"
|
||||
FAILED_CHECKS=$((FAILED_CHECKS + 1))
|
||||
fi
|
||||
TOTAL_CHECKS=$((TOTAL_CHECKS + 1))
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo -e "${YELLOW}📋 Verificando límites de recursos...${NC}\n"
|
||||
|
||||
# Verificar que hay límites de recursos configurados
|
||||
if docker-compose config 2>/dev/null | grep -q "limits:" ; then
|
||||
echo -e "${GREEN}✅ Límites de recursos configurados${NC}"
|
||||
PASSED_CHECKS=$((PASSED_CHECKS + 1))
|
||||
else
|
||||
echo -e "${RED}❌ No hay límites de recursos configurados${NC}"
|
||||
FAILED_CHECKS=$((FAILED_CHECKS + 1))
|
||||
fi
|
||||
TOTAL_CHECKS=$((TOTAL_CHECKS + 1))
|
||||
|
||||
echo ""
|
||||
echo -e "${YELLOW}📋 Verificando conectividad de servicios...${NC}\n"
|
||||
|
||||
# Verificar que el sitio web responde
|
||||
if curl -s http://localhost:8001 > /dev/null 2>&1; then
|
||||
echo -e "${GREEN}✅ Sitio web responde correctamente${NC}"
|
||||
PASSED_CHECKS=$((PASSED_CHECKS + 1))
|
||||
else
|
||||
echo -e "${RED}❌ Sitio web no responde${NC}"
|
||||
FAILED_CHECKS=$((FAILED_CHECKS + 1))
|
||||
fi
|
||||
TOTAL_CHECKS=$((TOTAL_CHECKS + 1))
|
||||
|
||||
# Verificar Redis con autenticación (si está configurado)
|
||||
if docker exec rss2_web python3 -c "
|
||||
import os
|
||||
import redis
|
||||
try:
|
||||
password = os.getenv('REDIS_PASSWORD')
|
||||
config = {'host': 'redis', 'port': 6379}
|
||||
if password:
|
||||
config['password'] = password
|
||||
r = redis.Redis(**config)
|
||||
r.ping()
|
||||
print('OK')
|
||||
except Exception as e:
|
||||
print(f'ERROR: {e}')
|
||||
exit(1)
|
||||
" 2>&1 | grep -q "OK"; then
|
||||
echo -e "${GREEN}✅ Redis autenticado funciona correctamente${NC}"
|
||||
PASSED_CHECKS=$((PASSED_CHECKS + 1))
|
||||
else
|
||||
echo -e "${RED}❌ Redis no responde correctamente${NC}"
|
||||
FAILED_CHECKS=$((FAILED_CHECKS + 1))
|
||||
fi
|
||||
TOTAL_CHECKS=$((TOTAL_CHECKS + 1))
|
||||
|
||||
echo ""
|
||||
echo -e "${BLUE}=================================="
|
||||
echo -e "📊 Resultados de la Verificación"
|
||||
echo -e "==================================${NC}\n"
|
||||
|
||||
echo -e "Total de verificaciones: $TOTAL_CHECKS"
|
||||
echo -e "${GREEN}✅ Pasadas: $PASSED_CHECKS${NC}"
|
||||
echo -e "${RED}❌ Fallidas: $FAILED_CHECKS${NC}"
|
||||
|
||||
PERCENTAGE=$((PASSED_CHECKS * 100 / TOTAL_CHECKS))
|
||||
echo -e "\nPorcentaje de éxito: ${GREEN}${PERCENTAGE}%${NC}\n"
|
||||
|
||||
if [ $FAILED_CHECKS -eq 0 ]; then
|
||||
echo -e "${GREEN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
|
||||
echo -e "${GREEN}🎉 ¡Todas las verificaciones pasaron correctamente!${NC}"
|
||||
echo -e "${GREEN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
|
||||
echo -e "\n${GREEN}✅ El sistema está configurado de forma segura${NC}\n"
|
||||
exit 0
|
||||
else
|
||||
echo -e "${RED}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
|
||||
echo -e "${RED}⚠️ Algunas verificaciones fallaron${NC}"
|
||||
echo -e "${RED}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
|
||||
echo -e "\n${YELLOW}📖 Revisa SECURITY_GUIDE.md para solucionar los problemas${NC}\n"
|
||||
exit 1
|
||||
fi
|
||||
Loading…
Add table
Add a link
Reference in a new issue