Antiscam / deploy.sh
Sousaneitor30000's picture
Create deploy.sh
42586f8 verified
#!/bin/bash
# 🛡️ 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 "$@"