GestionTablets/setup.sh

165 lines
5.1 KiB
Bash
Raw Permalink Normal View History

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