#!/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 "$@"