Add production deployment files:
- INSTALL.md: Complete installation guide in Spanish
- setup.sh: Automatic setup script for dependencies
- .env.example: Environment variables template
- Updated requirements.txt and .gitignore
This commit is contained in:
parent
fe42de5bfa
commit
d909006a01
5 changed files with 560 additions and 6 deletions
17
.env.example
Normal file
17
.env.example
Normal file
|
|
@ -0,0 +1,17 @@
|
||||||
|
# Configuración de ejemplo para GestionTablets
|
||||||
|
# COPIA este archivo a .env y ajusta los valores según tu entorno
|
||||||
|
|
||||||
|
# Configuración de Flask
|
||||||
|
FLASK_APP=app.py
|
||||||
|
FLASK_ENV=development
|
||||||
|
|
||||||
|
# Clave secreta para sesiones y CSRF
|
||||||
|
# GENERA UNA NUEVA CON: openssl rand -hex 32
|
||||||
|
# O en Python: python3 -c "import secrets; print(secrets.token_hex(32))"
|
||||||
|
SECRET_KEY=cambiar_esta_clave_por_una_segura_en_produccion
|
||||||
|
|
||||||
|
# Configuración de la base de datos
|
||||||
|
DATABASE=tablets.db
|
||||||
|
|
||||||
|
# Puerto del servidor (solo para desarrollo)
|
||||||
|
PORT=5000
|
||||||
21
.gitignore
vendored
21
.gitignore
vendored
|
|
@ -13,9 +13,10 @@ wheels/
|
||||||
*.db
|
*.db
|
||||||
*.db-journal
|
*.db-journal
|
||||||
|
|
||||||
# Project-specific
|
# Environment files
|
||||||
notes_development/
|
.env
|
||||||
.vibe/
|
.env.local
|
||||||
|
.env.*.local
|
||||||
|
|
||||||
# IDE/Editor
|
# IDE/Editor
|
||||||
.idea/
|
.idea/
|
||||||
|
|
@ -29,3 +30,17 @@ Thumbs.db
|
||||||
|
|
||||||
# Python
|
# Python
|
||||||
.python-version
|
.python-version
|
||||||
|
|
||||||
|
# Project-specific
|
||||||
|
notes_development/
|
||||||
|
.vibe/
|
||||||
|
|
||||||
|
# Logs and temporary files
|
||||||
|
*.log
|
||||||
|
*.tmp
|
||||||
|
|
||||||
|
# Test coverage
|
||||||
|
.htmlcov/
|
||||||
|
.coverage
|
||||||
|
|
||||||
|
# Local configuration
|
||||||
|
|
|
||||||
354
INSTALL.md
Normal file
354
INSTALL.md
Normal file
|
|
@ -0,0 +1,354 @@
|
||||||
|
# Instalación y Configuración - GestionTablets
|
||||||
|
|
||||||
|
**Versión:** 1.0
|
||||||
|
**Fecha:** 24 de junio de 2026
|
||||||
|
**Idioma:** Español
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📋 Requisitos Previos
|
||||||
|
|
||||||
|
Antes de instalar GestionTablets, asegúrate de que tu sistema cumple con los siguientes requisitos:
|
||||||
|
|
||||||
|
### Sistema Operativo
|
||||||
|
- **Linux** (recomendado: Debian 12+, Ubuntu 22.04+)
|
||||||
|
- **macOS** (11+)
|
||||||
|
- **Windows** (10+ con WSL2 recomendado)
|
||||||
|
|
||||||
|
### Dependencias del Sistema
|
||||||
|
|
||||||
|
| Requisito | Versión Mínima | Cómo instalar (Debian/Ubuntu) | Notas |
|
||||||
|
|-----------|----------------|--------------------------------|-------|
|
||||||
|
| Python | 3.13.0 | `sudo apt update && sudo apt install python3.13` | **Obligatorio** |
|
||||||
|
| Git | 2.30+ | `sudo apt install git` | Para clonar el repositorio |
|
||||||
|
| curl | - | `sudo apt install curl` | Para instalar `uv` |
|
||||||
|
| SQLite3 | 3.35+ | `sudo apt install sqlite3` | Incluido en Python |
|
||||||
|
|
||||||
|
> ⚠️ **NOTA IMPORTANTE:** Este proyecto **requiere Python 3.13+** debido al uso de `uv` como gestor de dependencias.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🚀 Instalación Rápida
|
||||||
|
|
||||||
|
Ejecuta estos comandos en tu terminal:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 1. Clonar el repositorio
|
||||||
|
git clone http://hq.ijuanes.ovh:3333/ijuanes/GestionTablets.git
|
||||||
|
cd GestionTablets
|
||||||
|
|
||||||
|
# 2. Ejecutar el script de configuración (requiere permisos de ejecución)
|
||||||
|
chmod +x setup.sh
|
||||||
|
./setup.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
El script `setup.sh` se encargará de:
|
||||||
|
- Instalar `uv` si no está presente
|
||||||
|
- Crear un entorno virtual aislado
|
||||||
|
- Instalar todas las dependencias Python
|
||||||
|
- Inicializar la base de datos
|
||||||
|
- Configurar las variables de entorno básicas
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🔧 Instalación Manual (sin setup.sh)
|
||||||
|
|
||||||
|
Si prefieres instalar manualmente, sigue estos pasos:
|
||||||
|
|
||||||
|
### 1. Instalar uv (gestor de paquetes de Python)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Instalar uv (Astral)
|
||||||
|
curl -LsSf https://astral.sh/uv/install.sh | sh
|
||||||
|
|
||||||
|
# Añadir uv al PATH (para la sesión actual)
|
||||||
|
export PATH="$HOME/.local/bin:$PATH"
|
||||||
|
|
||||||
|
# Verificar instalación
|
||||||
|
uv --version
|
||||||
|
```
|
||||||
|
|
||||||
|
> **Nota:** Si usas `zsh`, añade `export PATH="$HOME/.local/bin:$PATH"` a tu `~/.zshrc`.
|
||||||
|
> Si usas `bash`, añádelo a tu `~/.bashrc` o `~/.bash_profile`.
|
||||||
|
|
||||||
|
### 2. Crear entorno virtual
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Crear entorno virtual con uv
|
||||||
|
uv venv .venv
|
||||||
|
|
||||||
|
# Activar el entorno virtual
|
||||||
|
source .venv/bin/activate
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3. Instalar dependencias
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Instalar dependencias desde requirements.txt
|
||||||
|
uv pip install -r requirements.txt
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4. Inicializar la base de datos
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Inicializar la base de datos SQLite
|
||||||
|
python3 -c "from app import init_db; init_db(); print('✅ Base de datos inicializada')"
|
||||||
|
```
|
||||||
|
|
||||||
|
### 5. Configurar variables de entorno
|
||||||
|
|
||||||
|
Crea un archivo `.env` en el directorio raíz del proyecto:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Copiar el archivo de ejemplo (si existe)
|
||||||
|
cp .env.example .env
|
||||||
|
|
||||||
|
# O crear manualmente
|
||||||
|
cat > .env << EOF
|
||||||
|
# Configuración de Flask
|
||||||
|
FLASK_APP=app.py
|
||||||
|
FLASK_ENV=production
|
||||||
|
|
||||||
|
# Clave secreta (generar una nueva con: openssl rand -hex 32)
|
||||||
|
SECRET_KEY=tu_clave_secreta_aqui_cambiarla
|
||||||
|
|
||||||
|
# Base de datos (opcional, por defecto: tablets.db)
|
||||||
|
DATABASE=tablets.db
|
||||||
|
EOF
|
||||||
|
```
|
||||||
|
|
||||||
|
> ⚠️ **IMPORTANTE:** Genera una clave secreta segura:
|
||||||
|
> ```bash
|
||||||
|
> openssl rand -hex 32
|
||||||
|
> ```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🏃♂️ Ejecución
|
||||||
|
|
||||||
|
### Desarrollo
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Activar el entorno virtual (si no lo está)
|
||||||
|
source .venv/bin/activate
|
||||||
|
|
||||||
|
# Ejecutar la aplicación en modo desarrollo
|
||||||
|
python3 app.py
|
||||||
|
```
|
||||||
|
|
||||||
|
La aplicación estará disponible en: `http://localhost:5000`
|
||||||
|
|
||||||
|
### Producción
|
||||||
|
|
||||||
|
Para producción, se recomienda usar **Waitress** (ya incluido en `requirements.txt`):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Activar el entorno virtual
|
||||||
|
source .venv/bin/activate
|
||||||
|
|
||||||
|
# Ejecutar con Waitress (más robusto que el servidor de desarrollo)
|
||||||
|
waitress-serve --port=8080 app:app
|
||||||
|
```
|
||||||
|
|
||||||
|
La aplicación estará disponible en: `http://localhost:8080`
|
||||||
|
|
||||||
|
> **Nota:** Para producción real, considera:
|
||||||
|
> - Usar un proxy inverso (Nginx, Apache)
|
||||||
|
> - Configurar HTTPS
|
||||||
|
> - Establecer un dominio/IP estática
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📦 Actualización
|
||||||
|
|
||||||
|
Para actualizar a la última versión:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Desde el directorio del proyecto
|
||||||
|
git pull origin develop
|
||||||
|
|
||||||
|
# Actualizar dependencias (opcional, si requirements.txt ha cambiado)
|
||||||
|
source .venv/bin/activate
|
||||||
|
uv pip install -r requirements.txt --upgrade
|
||||||
|
|
||||||
|
# Reiniciar la aplicación
|
||||||
|
# (Ctrl+C para detener, luego vuelve a ejecutar)
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🔄 Migración de Base de Datos
|
||||||
|
|
||||||
|
Si ya tienes una base de datos existente y necesitas migrar a la nueva estructura (con soporte para alumnos):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Hacer backup de la base de datos actual
|
||||||
|
cp tablets.db tablets.db.backup
|
||||||
|
|
||||||
|
# Ejecutar el script de migración
|
||||||
|
python3 scripts/migrate_database.py
|
||||||
|
|
||||||
|
# Importar datos de alumnos (si tienes un CSV)
|
||||||
|
python3 scripts/import_students.py Datos_programa.csv --verbose
|
||||||
|
```
|
||||||
|
|
||||||
|
> **Nota:** El script de migración crea automáticamente un backup antes de realizar cambios.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🧪 Ejecución de Pruebas
|
||||||
|
|
||||||
|
Para verificar que todo funciona correctamente:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Activar el entorno virtual
|
||||||
|
source .venv/bin/activate
|
||||||
|
|
||||||
|
# Ejecutar todas las pruebas
|
||||||
|
python3 -m pytest
|
||||||
|
|
||||||
|
# Ejecutar con cobertura de código
|
||||||
|
python3 -m pytest --cov=app --cov-report=term
|
||||||
|
|
||||||
|
# Ejecutar pruebas específicas
|
||||||
|
python3 -m pytest tests/test_import.py -v
|
||||||
|
```
|
||||||
|
|
||||||
|
Deberías ver: `46 passed, 1 warning in X.XXs`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📂 Estructura del Proyecto
|
||||||
|
|
||||||
|
```
|
||||||
|
GestionTablets/
|
||||||
|
├── app.py # Aplicación Flask principal
|
||||||
|
├── requirements.txt # Dependencias Python
|
||||||
|
├── setup.sh # Script de configuración automática
|
||||||
|
├── INSTALL.md # Este documento
|
||||||
|
├── .env.example # Plantilla de variables de entorno
|
||||||
|
├── .gitignore # Archivos ignorados por Git
|
||||||
|
├── tablets.db # Base de datos SQLite (generada)
|
||||||
|
├── docs/
|
||||||
|
│ └── DATABASE_SCHEMA_SPECIFICATION.md # Esquema de la base de datos
|
||||||
|
├── scripts/
|
||||||
|
│ ├── import_students.py # Importación de alumnos desde CSV
|
||||||
|
│ └── migrate_database.py # Migración de base de datos
|
||||||
|
├── templates/ # Plantillas HTML (Jinja2)
|
||||||
|
│ ├── base.html # Plantilla base
|
||||||
|
│ ├── index.html # Página principal
|
||||||
|
│ ├── students.html # Lista de alumnos
|
||||||
|
│ └── ...
|
||||||
|
└── translations/ # Archivos de traducción (i18n)
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🛠️ Solución de Problemas
|
||||||
|
|
||||||
|
### Problema: "Command 'uv' not found"
|
||||||
|
|
||||||
|
**Solución:**
|
||||||
|
```bash
|
||||||
|
# Instalar uv manualmente
|
||||||
|
curl -LsSf https://astral.sh/uv/install.sh | sh
|
||||||
|
|
||||||
|
# Añadir al PATH
|
||||||
|
export PATH="$HOME/.local/bin:$PATH"
|
||||||
|
|
||||||
|
# Verificar
|
||||||
|
uv --version
|
||||||
|
```
|
||||||
|
|
||||||
|
### Problema: "Python 3.13 not found"
|
||||||
|
|
||||||
|
**Solución:**
|
||||||
|
```bash
|
||||||
|
# Instalar Python 3.13 en Debian/Ubuntu
|
||||||
|
sudo apt update
|
||||||
|
sudo apt install python3.13 python3.13-venv python3.13-dev
|
||||||
|
|
||||||
|
# Verificar
|
||||||
|
python3.13 --version
|
||||||
|
```
|
||||||
|
|
||||||
|
### Problema: "ModuleNotFoundError: No module named 'flask'"
|
||||||
|
|
||||||
|
**Solución:**
|
||||||
|
```bash
|
||||||
|
# Asegúrate de que el entorno virtual está activado
|
||||||
|
source .venv/bin/activate
|
||||||
|
|
||||||
|
# Instalar dependencias
|
||||||
|
uv pip install -r requirements.txt
|
||||||
|
```
|
||||||
|
|
||||||
|
### Problema: "Permission denied" al ejecutar setup.sh
|
||||||
|
|
||||||
|
**Solución:**
|
||||||
|
```bash
|
||||||
|
# Dar permisos de ejecución
|
||||||
|
chmod +x setup.sh
|
||||||
|
|
||||||
|
# Ejecutar
|
||||||
|
./setup.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
### Problema: La base de datos no se inicializa
|
||||||
|
|
||||||
|
**Solución:**
|
||||||
|
```bash
|
||||||
|
# Forzar inicialización manual
|
||||||
|
python3 -c "from app import init_db; init_db()"
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📝 Variables de Entorno
|
||||||
|
|
||||||
|
| Variable | Valor por Defecto | Descripción | Requerida |
|
||||||
|
|----------|-------------------|-------------|-----------|
|
||||||
|
| `FLASK_APP` | `app.py` | Archivo principal de Flask | No |
|
||||||
|
| `FLASK_ENV` | `production` | Entorno de Flask (`development` o `production`) | No |
|
||||||
|
| `SECRET_KEY` | - | Clave secreta para sesiones (¡genera una nueva!) | **Sí** |
|
||||||
|
| `DATABASE` | `tablets.db` | Ruta a la base de datos SQLite | No |
|
||||||
|
| `PORT` | `5000` | Puerto del servidor (solo para desarrollo) | No |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🔒 Seguridad
|
||||||
|
|
||||||
|
### Clave Secreta
|
||||||
|
- **Nunca** uses la clave secreta por defecto en producción.
|
||||||
|
- Genera una nueva con: `openssl rand -hex 32`
|
||||||
|
- Guárdala en `.env` (este archivo **no** debe comitearse a Git)
|
||||||
|
|
||||||
|
### Base de Datos
|
||||||
|
- El archivo `tablets.db` contiene todos los datos del sistema.
|
||||||
|
- **Haz backups regulares:** `cp tablets.db tablets.db.backup`
|
||||||
|
- No expongas el archivo públicamente.
|
||||||
|
|
||||||
|
### Acceso a la Aplicación
|
||||||
|
- Actualmente, la aplicación no tiene autenticación.
|
||||||
|
- **Recomendación para producción:**
|
||||||
|
- Usa un proxy inverso con autenticación (Nginx + Basic Auth)
|
||||||
|
- O implementa autenticación en Flask (ver propuestas de mejora)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📞 Soporte
|
||||||
|
|
||||||
|
Si encuentras problemas:
|
||||||
|
|
||||||
|
1. **Revisa esta documentación** (INSTALL.md)
|
||||||
|
2. **Consulta los logs** de la aplicación
|
||||||
|
3. **Verifica los requisitos** (Python 3.13+, uv, etc.)
|
||||||
|
4. **Contacta al administrador** del sistema (ijuanes)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📚 Documentación Adicional
|
||||||
|
|
||||||
|
- [DOCUMENTACION_RECAPITULACION.md](DOCUMENTACION_RECAPITULACION.md) - Recapitulación técnica completa
|
||||||
|
- [IMPLEMENTATION_SUMMARY.md](IMPLEMENTATION_SUMMARY.md) - Resumen de implementación
|
||||||
|
- [docs/DATABASE_SCHEMA_SPECIFICATION.md](docs/DATABASE_SCHEMA_SPECIFICATION.md) - Esquema detallado de la base de datos
|
||||||
|
|
@ -1,16 +1,20 @@
|
||||||
# Core dependencies
|
# Core dependencies
|
||||||
Flask==2.3.3
|
Flask==2.3.3
|
||||||
Flask-Babel==2.0.0
|
Flask-Babel==2.0.0
|
||||||
|
python-dotenv==1.0.0
|
||||||
|
|
||||||
# Database
|
# Database
|
||||||
sqlite3 # Built-in, but listed for clarity
|
# sqlite3 is built-in with Python
|
||||||
|
|
||||||
# For CSV processing
|
# For CSV processing
|
||||||
python-dotenv==1.0.0
|
# No additional dependencies needed (csv is built-in)
|
||||||
|
|
||||||
# For development/testing
|
# For development/testing
|
||||||
pytest==7.4.0
|
pytest==7.4.0
|
||||||
pytest-cov==4.1.0
|
pytest-cov==4.1.0
|
||||||
|
|
||||||
# For running the application
|
# For running the application in production
|
||||||
waitress==2.1.2 # Production WSGI server
|
waitress==2.1.2 # Production WSGI server
|
||||||
|
|
||||||
|
# For production deployment (optional)
|
||||||
|
# gunicorn==21.2.0 # Alternative WSGI server
|
||||||
|
|
|
||||||
164
setup.sh
Executable file
164
setup.sh
Executable file
|
|
@ -0,0 +1,164 @@
|
||||||
|
#!/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 ""
|
||||||
Loading…
Add table
Add a link
Reference in a new issue