#!/bin/bash # setup.sh - Script de configuración automática para GestionTablets # Este script instala las dependencias necesarias y configura el entorno set -e # Salir en caso de error # Colores para salida 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 mensajes print_status() { echo -e "${BLUE}[INFO]${NC} $1" } print_success() { echo -e "${GREEN}[OK]${NC} $1" } print_warning() { echo -e "${YELLOW}[WARNING]${NC} $1" } print_error() { echo -e "${RED}[ERROR]${NC} $1" } # Verificar que estamos en el directorio correcto if [ ! -f "app.py" ]; then print_error "No se encuentra app.py. Ejecuta este script desde el directorio raíz de GestionTablets." exit 1 fi # 1. Verificar Python 3.13+ print_status "Verificando versión de Python..." PYTHON_VERSION=$(python3 --version 2>&1 | cut -d' ' -f2 | cut -d'.' -f1-2) if [ "$PYTHON_VERSION" != "3.13" ]; then print_error "Se requiere Python 3.13. Encontrado: $PYTHON_VERSION" print_status "Instala Python 3.13 con: sudo apt install python3.13" exit 1 fi print_success "Python 3.13+ detectado" # 2. Instalar uv si no está presente print_status "Verificando uv..." if ! command -v uv &> /dev/null; then print_status "Instalando uv (Astral)..." if ! curl -LsSf https://astral.sh/uv/install.sh | sh; then print_error "No se pudo instalar uv. Verifica tu conexión a internet y que curl está instalado." exit 1 fi # Añadir uv al PATH para esta sesión export PATH="$HOME/.local/bin:$PATH" print_success "uv instalado correctamente" else print_success "uv ya está instalado" fi # Verificar versión de uv UV_VERSION=$(uv --version 2>&1) print_status "Versión de uv: $UV_VERSION" # 3. Crear entorno virtual print_status "Creando entorno virtual..." if [ -d ".venv" ]; then print_warning "El entorno virtual .venv ya existe. Usando el existente." else if ! uv venv .venv; then print_error "No se pudo crear el entorno virtual" exit 1 fi print_success "Entorno virtual creado" fi # Activar el entorno virtual print_status "Activando entorno virtual..." source .venv/bin/activate # 4. Instalar dependencias print_status "Instalando dependencias desde requirements.txt..." if [ -f "requirements.txt" ]; then if ! uv pip install -r requirements.txt; then print_error "No se pudieron instalar las dependencias" exit 1 fi print_success "Dependencias instaladas" else print_error "No se encuentra requirements.txt" exit 1 fi # 5. Inicializar base de datos print_status "Inicializando base de datos..." if [ ! -f "tablets.db" ]; then if python3 -c "from app import init_db; init_db(); print('Base de datos inicializada')" 2>&1; then print_success "Base de datos inicializada" else print_warning "No se pudo inicializar la base de datos automáticamente" print_status "Puedes inicializarla manualmente con: python3 -c \"from app import init_db; init_db()\"" fi else print_warning "tablets.db ya existe. No se ha sobrescrito." fi # 6. Configurar variables de entorno print_status "Configurando variables de entorno..." if [ ! -f ".env" ]; then # Generar clave secreta SECRET_KEY=$(openssl rand -hex 32 2>/dev/null || python3 -c "import secrets; print(secrets.token_hex(32))" 2>/dev/null || echo "cambiar_esta_clave_manualmente") cat > .env << EOF # Configuración de Flask FLASK_APP=app.py FLASK_ENV=development # Clave secreta (¡CÁMBIALA EN PRODUCCIÓN!) SECRET_KEY=$SECRET_KEY # Base de datos DATABASE=tablets.db EOF print_success "Archivo .env creado con configuración básica" print_warning "⚠️ REVISA el archivo .env y cambia la SECRET_KEY antes de usar en producción" else print_warning ".env ya existe. No se ha sobrescrito." fi # 7. Crear .env.example si no existe if [ ! -f ".env.example" ]; then cp .env .env.example 2>/dev/null || true print_status "Creado .env.example" fi # 8. Verificar instalación print_status "Verificando instalación..." print_status "Comprobando importación de Flask..." python3 -c "import flask; print(f'Flask versión: {flask.__version__}')" 2>&1 print_status "Comprobando importación de la aplicación..." python3 -c "import app; print('Aplicación importada correctamente')" 2>&1 # 9. Instrucciones finales echo "" print_success "==========================================" print_success "¡Configuración completada con éxito!" print_success "==========================================" echo "" print_status "Para ejecutar la aplicación en desarrollo:" echo " 1. Activa el entorno virtual: source .venv/bin/activate" echo " 2. Ejecuta la aplicación: python3 app.py" echo "" print_status "La aplicación estará disponible en: http://localhost:5000" echo "" print_status "Para producción, usa Waitress:" echo " waitress-serve --port=8080 app:app" echo "" print_warning "⚠️ NO OLVIDES:" print_warning " - Revisar y cambiar SECRET_KEY en .env" print_warning " - Configurar FLASK_ENV=production para producción" print_warning " - Hacer backup de tablets.db regularmente" echo ""