297 lines
7.0 KiB
Bash
Executable File
297 lines
7.0 KiB
Bash
Executable File
#!/bin/bash
|
|
# ====================================
|
|
# SCRIPT DE CONFIGURACIÓN DE ENTORNO
|
|
# Balotario Licencia A-I
|
|
# ====================================
|
|
|
|
set -e # Salir en caso de error
|
|
|
|
# Colores para output
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
BLUE='\033[0;34m'
|
|
NC='\033[0m' # No Color
|
|
|
|
# Función para imprimir con colores
|
|
print_info() {
|
|
echo -e "${ $1${NC}"
|
|
}
|
|
|
|
print_success() {
|
|
echo -e "${GREEN}✅ $1${NC}"
|
|
}
|
|
|
|
print_warning() {
|
|
echo -e "${YELLOW}⚠️ $1${NC}"
|
|
}
|
|
|
|
print_error() {
|
|
echo -e "${RED}❌ $1${NC}"
|
|
}
|
|
|
|
print_header() {
|
|
echo -e "${BLUE}"
|
|
echo "======================================"
|
|
echo "🌍 CONFIGURACIÓN DE ENTORNO"
|
|
echo "Balotario Licencia A-I"
|
|
echo "======================================"
|
|
echo -e "${NC}"
|
|
}
|
|
|
|
# Función para generar SECRET_KEY
|
|
generate_secret_key() {
|
|
if command -v python3 &> /dev/null; then
|
|
python3 -c "import secrets; print(secrets.token_hex(32))"
|
|
elif command -v python &> /dev/null; then
|
|
python -c "import secrets; print(secrets.token_hex(32))"
|
|
elif command -v openssl &> /dev/null; then
|
|
openssl rand -hex 32
|
|
else
|
|
# Fallback básico
|
|
date +%s | sha256sum | base64 | head -c 32
|
|
fi
|
|
}
|
|
|
|
# Función para configurar desarrollo
|
|
setup_development() {
|
|
print_info "Configurando entorno de desarrollo..."
|
|
|
|
SECRET_KEY=$(generate_secret_key)
|
|
|
|
cat > .env << EOF
|
|
# ====================================
|
|
# CONFIGURACIÓN DE DESARROLLO
|
|
# Generado automáticamente: $(date)
|
|
# ====================================
|
|
|
|
# Configuración de Flask
|
|
SECRET_KEY=${SECRET_KEY}
|
|
FLASK_ENV=development
|
|
FLASK_CONFIG=development
|
|
FLASK_DEBUG=true
|
|
|
|
# Configuración del servidor
|
|
HOST=127.0.0.1
|
|
PORT=5000
|
|
|
|
# Configuración de Docker
|
|
DOCKER_CONTAINER=false
|
|
|
|
# Configuración de logging
|
|
LOG_LEVEL=DEBUG
|
|
AUTO_RELOAD=true
|
|
SHOW_DEBUG_TOOLBAR=false
|
|
|
|
# ====================================
|
|
# NOTAS:
|
|
# - Cambia SECRET_KEY antes de ir a producción
|
|
# - Revisa .env.sample para más opciones
|
|
# ====================================
|
|
EOF
|
|
|
|
print_success "Configuración de desarrollo creada en .env"
|
|
}
|
|
|
|
# Función para configurar producción
|
|
setup_production() {
|
|
print_info "Configurando entorno de producción..."
|
|
|
|
SECRET_KEY=$(generate_secret_key)
|
|
|
|
cat > .env << EOF
|
|
# ====================================
|
|
# CONFIGURACIÓN DE PRODUCCIÓN
|
|
# Generado automáticamente: $(date)
|
|
# ====================================
|
|
|
|
# Configuración de Flask
|
|
SECRET_KEY=${SECRET_KEY}
|
|
FLASK_ENV=production
|
|
FLASK_CONFIG=production
|
|
FLASK_DEBUG=false
|
|
|
|
# Configuración del servidor
|
|
HOST=0.0.0.0
|
|
PORT=5000
|
|
|
|
# Configuración de Docker
|
|
DOCKER_CONTAINER=true
|
|
|
|
# Configuración de logging
|
|
LOG_LEVEL=INFO
|
|
|
|
# ====================================
|
|
# IMPORTANTE:
|
|
# - Guarda SECRET_KEY en lugar seguro
|
|
# - Revisa todas las configuraciones antes de desplegar
|
|
# - Considera usar variables de entorno del sistema
|
|
# ====================================
|
|
EOF
|
|
|
|
print_success "Configuración de producción creada en .env"
|
|
print_warning "IMPORTANTE: Guarda la SECRET_KEY en un lugar seguro"
|
|
}
|
|
|
|
# Función para configurar Docker
|
|
setup_docker() {
|
|
print_info "Configurando entorno para Docker..."
|
|
|
|
SECRET_KEY=$(generate_secret_key)
|
|
|
|
cat > .env << EOF
|
|
# ====================================
|
|
# CONFIGURACIÓN PARA DOCKER
|
|
# Generado automáticamente: $(date)
|
|
# ====================================
|
|
|
|
# Configuración de Flask
|
|
SECRET_KEY=${SECRET_KEY}
|
|
FLASK_ENV=production
|
|
FLASK_CONFIG=production
|
|
FLASK_DEBUG=false
|
|
|
|
# Configuración del servidor
|
|
HOST=0.0.0.0
|
|
PORT=5000
|
|
|
|
# Configuración de Docker
|
|
DOCKER_CONTAINER=true
|
|
|
|
# Configuración de logging
|
|
LOG_LEVEL=INFO
|
|
|
|
# ====================================
|
|
# DOCKER NOTES:
|
|
# - Estas variables pueden ser sobrescritas en docker-compose.yml
|
|
# - Para desarrollo con Docker, cambia FLASK_ENV=development
|
|
# ====================================
|
|
EOF
|
|
|
|
print_success "Configuración para Docker creada en .env"
|
|
}
|
|
|
|
# Función para validar configuración
|
|
validate_env() {
|
|
print_info "Validando configuración..."
|
|
|
|
if [ ! -f ".env" ]; then
|
|
print_error "Archivo .env no encontrado"
|
|
return 1
|
|
fi
|
|
|
|
# Verificar variables esenciales
|
|
if ! grep -q "SECRET_KEY=" .env; then
|
|
print_error "SECRET_KEY no encontrada en .env"
|
|
return 1
|
|
fi
|
|
|
|
if ! grep -q "FLASK_ENV=" .env; then
|
|
print_error "FLASK_ENV no encontrada en .env"
|
|
return 1
|
|
fi
|
|
|
|
print_success "Configuración válida"
|
|
|
|
# Mostrar resumen
|
|
echo ""
|
|
print_info "Resumen de configuración:"
|
|
echo "------------------------"
|
|
grep -E "^(SECRET_KEY|FLASK_ENV|FLASK_DEBUG|HOST|PORT)=" .env | while read line; do
|
|
key=$(echo $line | cut -d'=' -f1)
|
|
value=$(echo $line | cut -d'=' -f2)
|
|
if [ "$key" = "SECRET_KEY" ]; then
|
|
echo " $key=***OCULTA***"
|
|
else
|
|
echo " $key=$value"
|
|
fi
|
|
done
|
|
}
|
|
|
|
# Función para mostrar ayuda
|
|
show_help() {
|
|
echo "Uso: $0 [COMANDO]"
|
|
echo ""
|
|
echo "Comandos disponibles:"
|
|
echo " dev Configurar para desarrollo local"
|
|
echo " prod Configurar para producción"
|
|
echo " docker Configurar para Docker"
|
|
echo " validate Validar configuración actual"
|
|
echo " backup Crear backup de .env actual"
|
|
echo " restore Restaurar desde .env.sample"
|
|
echo " help Mostrar esta ayuda"
|
|
echo ""
|
|
echo "Ejemplos:"
|
|
echo " $0 dev # Configuración de desarrollo"
|
|
echo " $0 prod # Configuración de producción"
|
|
echo " $0 docker # Configuración para Docker"
|
|
}
|
|
|
|
# Función para crear backup
|
|
backup_env() {
|
|
if [ -f ".env" ]; then
|
|
backup_file=".env.backup.$(date +%Y%m%d_%H%M%S)"
|
|
cp .env "$backup_file"
|
|
print_success "Backup creado: $backup_file"
|
|
else
|
|
print_warning "No hay archivo .env para respaldar"
|
|
fi
|
|
}
|
|
|
|
# Función para restaurar desde sample
|
|
restore_env() {
|
|
if [ -f ".env.sample" ]; then
|
|
cp .env.sample .env
|
|
print_success "Configuración restaurada desde .env.sample"
|
|
print_warning "Recuerda personalizar los valores en .env"
|
|
else
|
|
print_error "Archivo .env.sample no encontrado"
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
# Función principal
|
|
main() {
|
|
print_header
|
|
|
|
case "${1:-help}" in
|
|
"dev"|"development")
|
|
backup_env
|
|
setup_development
|
|
validate_env
|
|
;;
|
|
"prod"|"production")
|
|
backup_env
|
|
setup_production
|
|
validate_env
|
|
;;
|
|
"docker")
|
|
backup_env
|
|
setup_docker
|
|
validate_env
|
|
;;
|
|
"validate"|"check")
|
|
validate_env
|
|
;;
|
|
"backup")
|
|
backup_env
|
|
;;
|
|
"restore")
|
|
backup_env
|
|
restore_env
|
|
;;
|
|
"help"|"--help"|"-h")
|
|
show_help
|
|
;;
|
|
*)
|
|
print_error "Comando desconocido: $1"
|
|
echo ""
|
|
show_help
|
|
exit 1
|
|
;;
|
|
esac
|
|
}
|
|
|
|
# Ejecutar función principal
|
|
main "$@"
|