Spaces:
Running
Running
# 🛡️ AntiScam AI Pro - Script de Despliegue | |
# Automatiza el despliegue de la aplicación en diferentes entornos | |
set -e # Salir si cualquier comando falla | |
# Colores para output | |
RED='\033[0;31m' | |
GREEN='\033[0;32m' | |
YELLOW='\033[1;33m' | |
BLUE='\033[0;34m' | |
NC='\033[0m' # No Color | |
# Funciones de utilidad | |
log_info() { | |
echo -e "${BLUE}[INFO]${NC} $1" | |
} | |
log_success() { | |
echo -e "${GREEN}[SUCCESS]${NC} $1" | |
} | |
log_warning() { | |
echo -e "${YELLOW}[WARNING]${NC} $1" | |
} | |
log_error() { | |
echo -e "${RED}[ERROR]${NC} $1" | |
} | |
# Función principal de despliegue | |
deploy() { | |
local environment=$1 | |
echo "🛡️ ANTISCAM AI PRO - DESPLIEGUE" | |
echo "======================================" | |
echo "Entorno: $environment" | |
echo "Fecha: $(date)" | |
echo "======================================" | |
case $environment in | |
"development"|"dev") | |
deploy_development | |
;; | |
"staging") | |
deploy_staging | |
;; | |
"production"|"prod") | |
deploy_production | |
;; | |
"docker") | |
deploy_docker | |
;; | |
"huggingface"|"hf") | |
deploy_huggingface | |
;; | |
*) | |
log_error "Entorno no válido: $environment" | |
echo "Entornos disponibles: development, staging, production, docker, huggingface" | |
exit 1 | |
;; | |
esac | |
} | |
# Despliegue en desarrollo | |
deploy_development() { | |
log_info "Configurando entorno de desarrollo..." | |
# Verificar Python | |
if ! command -v python3 &> /dev/null; then | |
log_error "Python 3 no está instalado" | |
exit 1 | |
fi | |
# Crear entorno virtual si no existe | |
if [ ! -d "venv" ]; then | |
log_info "Creando entorno virtual..." | |
python3 -m venv venv | |
fi | |
# Activar entorno virtual | |
source venv/bin/activate | |
# Instalar dependencias | |
log_info "Instalando dependencias..." | |
pip install --upgrade pip | |
pip install -r requirements.txt | |
# Verificar archivo .env | |
if [ ! -f ".env" ]; then | |
log_warning "Archivo .env no encontrado" | |
if [ -f ".env.example" ]; then | |
log_info "Copiando .env.example como .env" | |
cp .env.example .env | |
log_warning "¡IMPORTANTE! Edita .env con tus credenciales reales" | |
fi | |
fi | |
# Inicializar base de datos | |
log_info "Inicializando base de datos..." | |
python -c "from app import init_database; init_database()" | |
log_success "Entorno de desarrollo configurado" | |
log_info "Ejecuta: python app.py o python start.py" | |
} | |
# Despliegue en staging | |
deploy_staging() { | |
log_info "Desplegando en staging..." | |
# Verificar variables de entorno | |
check_env_vars | |
# Build y test | |
run_tests | |
# Desplegar con Docker | |
log_info "Construyendo imagen Docker..." | |
docker build -t antiscam-ai:staging . | |
log_info "Desplegando contenedor..." | |
docker run -d \ | |
--name antiscam-staging \ | |
--env-file .env \ | |
-p 7861:7860 \ | |
antiscam-ai:staging | |
log_success "Staging desplegado en puerto 7861" | |
} | |
# Despliegue en producción | |
deploy_production() { | |
log_info "Desplegando en producción..." | |
# Verificaciones críticas | |
check_env_vars | |
check_ssl_certs | |
run_tests | |
# Backup de base de datos | |
backup_database | |
# Desplegar con Docker Compose | |
log_info "Desplegando con Docker Compose..." | |
docker-compose -f docker-compose.yml up -d | |
# Verificar salud de servicios | |
sleep 30 | |
check_services_health | |
log_success "Producción desplegada exitosamente" | |
log_info "Aplicación disponible en https://tu-dominio.com" | |
} | |
# Despliegue con Docker | |
deploy_docker() { | |
log_info "Desplegando con Docker..." | |
# Construir imagen | |
log_info "Construyendo imagen Docker..." | |
docker build -t antiscam-ai:latest . | |
# Ejecutar contenedor | |
log_info "Ejecutando contenedor..." | |
docker run -d \ | |
--name antiscam-ai-pro \ | |
--env-file .env \ | |
-p 7860:7860 \ | |
-v $(pwd)/uploads:/app/uploads \ | |
--restart unless-stopped \ | |
antiscam-ai:latest | |
log_success "Docker desplegado en puerto 7860" | |
} | |
# Despliegue en Hugging Face Spaces | |
deploy_huggingface() { | |
log_info "Preparando para Hugging Face Spaces..." | |
# Verificar que no hay archivos sensibles | |
if [ -f ".env" ]; then | |
log_warning "Archivo .env encontrado - NO subir a HF Spaces" | |
fi | |
# Crear directorio temporal para HF | |
mkdir -p hf_deploy | |
# Copiar archivos necesarios | |
cp app.py hf_deploy/ | |
cp requirements.txt hf_deploy/ | |
cp README.md hf_deploy/ | |
# Crear archivo README específico para HF | |
cat > hf_deploy/README.md << EOF | |
--- | |
title: AntiScam AI Pro | |
emoji: 🛡️ | |
colorFrom: blue | |
colorTo: purple | |
sdk: gradio | |
sdk_version: 4.44.0 | |
app_file: app.py | |
pinned: false | |
license: mit | |
--- | |
# 🛡️ AntiScam AI Pro | |
Protección inteligente contra estafas digitales con IA avanzada. | |
## Configuración | |
Configura las siguientes variables de entorno en Settings → Variables: | |
- \`STRIPE_SECRET_KEY\`: Tu clave secreta de Stripe | |
- \`STRIPE_PUBLISHABLE_KEY\`: Tu clave pública de Stripe | |
- \`EMAIL_USER\`: Tu email para verificaciones | |
- \`EMAIL_PASSWORD\`: App password de Gmail | |
EOF | |
log_success "Archivos preparados en directorio hf_deploy/" | |
log_info "Sube el contenido de hf_deploy/ a tu Hugging Face Space" | |
log_warning "¡No olvides configurar las variables de entorno!" | |
} | |
# Verificar variables de entorno críticas | |
check_env_vars() { | |
log_info "Verificando variables de entorno..." | |
required_vars=( | |
"STRIPE_SECRET_KEY" | |
"STRIPE_PUBLISHABLE_KEY" | |
"EMAIL_USER" | |
"EMAIL_PASSWORD" | |
) | |
missing_vars=() | |
for var in "${required_vars[@]}"; do | |
if [ -z "${!var}" ]; then | |
missing_vars+=("$var") | |
fi | |
done | |
if [ ${#missing_vars[@]} -ne 0 ]; then | |
log_error "Variables de entorno faltantes:" | |
printf '%s\n' "${missing_vars[@]}" | |
exit 1 | |
fi | |
log_success "Variables de entorno verificadas" | |
} | |
# Verificar certificados SSL | |
check_ssl_certs() { | |
log_info "Verificando certificados SSL..." | |
if [ ! -f "nginx/ssl/cert.pem" ] || [ ! -f "nginx/ssl/key.pem" ]; then | |
log_warning "Certificados SSL no encontrados" | |
log_info "Generando certificados autofirmados para testing..." | |
mkdir -p nginx/ssl | |
openssl req -x509 -newkey rsa:4096 -keyout nginx/ssl/key.pem -out nginx/ssl/cert.pem -days 365 -nodes \ | |
-subj "/C=ES/ST=State/L=City/O=AntiScam/OU=IT/CN=localhost" | |
log_warning "¡Usa certificados válidos en producción!" | |
fi | |
log_success "Certificados SSL verificados" | |
} | |
# Ejecutar tests | |
run_tests() { | |
log_info "Ejecutando tests..." | |
# Tests básicos | |
python -c " | |
import sys | |
try: | |
from app import init_database, advanced_scam_analysis | |
print('✅ Importaciones exitosas') | |
# Test análisis básico | |
result = advanced_scam_analysis('Test message', 'text') | |
if 'risk_level' in result: | |
print('✅ Análisis básico funcional') | |
else: | |
print('❌ Error en análisis') | |
sys.exit(1) | |
except Exception as e: | |
print(f'❌ Error en tests: {e}') | |
sys.exit(1) | |
" | |
log_success "Tests completados" | |
} | |
# Backup de base de datos | |
backup_database() { | |
log_info "Creando backup de base de datos..." | |
timestamp=$(date +%Y%m%d_%H%M%S) | |
backup_dir="backups" | |
mkdir -p $backup_dir | |
if [ -f "antiscam_pro.db" ]; then | |
cp antiscam_pro.db "$backup_dir/antiscam_pro_$timestamp.db" | |
log_success "Backup creado: $backup_dir/antiscam_pro_$timestamp.db" | |
else | |
log_warning "Base de datos no encontrada para backup" | |
fi | |
} | |
# Verificar salud de servicios | |
check_services_health() { | |
log_info "Verificando salud de servicios..." | |
services=("antiscam-ai-pro" "antiscam-postgres" "antiscam-redis") | |
for service in "${services[@]}"; do | |
if docker ps --filter "name=$service" --filter "status=running" | grep -q $service; then | |
log_success "✅ $service está corriendo" | |
else | |
log_error "❌ $service no está corriendo" | |
fi | |
done | |
} | |
# Función de ayuda | |
show_help() { | |
echo "🛡️ AntiScam AI Pro - Script de Despliegue" | |
echo "" | |
echo "Uso: ./deploy.sh [ENTORNO]" | |
echo "" | |
echo "Entornos disponibles:" | |
echo " development, dev - Entorno de desarrollo local" | |
echo " staging - Entorno de staging/testing" | |
echo " production, prod - Entorno de producción" | |
echo " docker - Despliegue con Docker simple" | |
echo " huggingface, hf - Preparar para Hugging Face Spaces" | |
echo "" | |
echo "Ejemplos:" | |
echo " ./deploy.sh development" | |
echo " ./deploy.sh production" | |
echo " ./deploy.sh huggingface" | |
echo "" | |
} | |
# Script principal | |
main() { | |
if [ $# -eq 0 ]; then | |
show_help | |
exit 1 | |
fi | |
case $1 in | |
"-h"|"--help"|"help") | |
show_help | |
exit 0 | |
;; | |
*) | |
deploy $1 | |
;; | |
esac | |
} | |
# Ejecutar script principal | |
main "$@" |