# Guía de despliegue: ArcaBeauty Club en hosting cPanel

Esta guía asume que tu hosting de cPanel tiene la herramienta **"Setup Python App"** (a veces llamada "Python Selector"), disponible en la mayoría de los hostings basados en CloudLinux/Passenger (A2 Hosting, Hostinger Business+, SiteGround, GoDaddy Business, etc.). Si no la ves en tu panel, contacta a tu proveedor antes de continuar — sin ella no es posible correr esta aplicación.

---

## Paso 0 — Verificar que tu hosting es compatible

1. Entra a cPanel y busca, en la sección "Software", un ícono llamado **"Setup Python App"** o **"Python Selector"**.
2. Si existe, anota qué versiones de Python ofrece. Necesitas **Python 3.10 o superior**.
3. Si no existe esa herramienta, pregunta a soporte de tu hosting: *"¿Mi plan permite correr aplicaciones Python/WSGI con Passenger?"*. Si la respuesta es no, esta app no podrá correr ahí — tendrías que usar otro hosting (Render, Railway, PythonAnywhere) o subir de plan.

---

## Paso 1 — Preparar tus archivos localmente

1. Descarga el `arcabeauty_club.zip` que te compartí.
2. Ábrelo y confirma que dentro está la carpeta `arcabeauty/` con `app.py`, `requirements.txt`, `templates/`, `static/`, etc.
3. **No subas la carpeta `arcabeauty.db`** si ya tiene datos de prueba que no quieres en producción — la recrearemos limpia en el Paso 7. Si prefieres conservar los datos de ejemplo para probar primero, no hay problema en dejarla.

---

## Paso 2 — Crear la aplicación Python en cPanel

1. Abre **Setup Python App** → **Create Application**.
2. Completa:
   - **Python version**: la más alta disponible ≥ 3.10.
   - **Application root**: una carpeta nueva, por ejemplo `arcabeauty_app` (cPanel la crea fuera de `public_html`, lo cual es correcto y más seguro).
   - **Application URL**: el dominio o subdominio donde quieres que viva (ej. `salon.tudominio.com` o `tudominio.com/citas`).
   - **Application startup file**: escribe `passenger_wsgi.py` (lo crearemos en el Paso 4).
   - **Application Entry point**: escribe `application`.
3. Haz clic en **Create**. cPanel generará la carpeta y un entorno virtual de Python ya aislado para esta app.
4. Anota la ruta completa que te muestra cPanel, algo como:
   `/home/tu_usuario/arcabeauty_app`
   y el comando para activar el entorno virtual, algo como:
   `source /home/tu_usuario/virtualenv/arcabeauty_app/3.11/bin/activate`

---

## Paso 3 — Subir los archivos del proyecto

1. Ve a **File Manager** en cPanel y navega a la carpeta que creaste (`arcabeauty_app`).
2. Verás que cPanel ya puso ahí un `passenger_wsgi.py` de ejemplo y una carpeta `public/`. Vamos a reemplazar/ajustar eso.
3. Sube tu `arcabeauty_club.zip` a esa carpeta (botón **Upload**).
4. Selecciona el zip subido → botón **Extract**.
5. Verifica que el contenido de la carpeta `arcabeauty/` (es decir, `app.py`, `db.py`, `templates/`, etc.) quede **directamente dentro** de `arcabeauty_app/`, no anidado en una subcarpeta extra. Si quedó como `arcabeauty_app/arcabeauty/app.py`, mueve todo un nivel hacia arriba (selecciona todos los archivos dentro de `arcabeauty/` → Move → pégalos en `arcabeauty_app/`).
6. Borra el zip ya extraído para no dejarlo expuesto.

---

## Paso 4 — Configurar `passenger_wsgi.py`

Este archivo le dice a cPanel cómo arrancar tu app Flask.

1. En **File Manager**, abre (o crea) `passenger_wsgi.py` en la raíz de `arcabeauty_app/`.
2. Reemplaza su contenido completo por esto:

```python
import sys
import os

sys.path.insert(0, os.path.dirname(__file__))

from app import app as application
```

3. Guarda.

---

## Paso 5 — Instalar las dependencias

1. Vuelve a **Setup Python App**, busca tu aplicación en la lista y haz clic en ella para ver los detalles.
2. Copia el comando de activación del entorno virtual que te muestra (similar al del Paso 2).
3. Abre **Terminal** en cPanel (ícono "Terminal" en el menú principal; si no aparece, usa SSH con tu cliente preferido).
4. Ejecuta:

```bash
source /home/tu_usuario/virtualenv/arcabeauty_app/3.11/bin/activate
cd /home/tu_usuario/arcabeauty_app
pip install -r requirements.txt
```

5. Debe instalar Flask sin errores. (El proyecto no necesita ninguna otra dependencia: el módulo de IA usa únicamente librerías incluidas en Python).

---

## Paso 6 — Configurar variables de entorno

Esto es importante por seguridad: **no** se editan claves directamente en el código.

1. En **Setup Python App**, dentro del detalle de tu aplicación, busca la sección **"Environment variables"**.
2. Agrega estas dos variables:

| Variable | Valor | ¿Para qué sirve? |
|---|---|---|
| `SECRET_KEY` | una cadena larga y aleatoria, ej. `8f3a1c9b2e7d4f6a0b1c3d5e7f9a1b3c` | Firma las sesiones de la App de Clientes y la App de Empleados. Cambia el valor de ejemplo que trae el código. |
| `ANTHROPIC_API_KEY` | tu llave de [console.anthropic.com](https://console.anthropic.com) | Necesaria solo si quieres usar el módulo de Asistente IA. Si no la configuras, todo el resto de la app funciona normal; el chat de IA simplemente mostrará un aviso. |

3. El código ya viene preparado para usar esta variable automáticamente (lee `SECRET_KEY` del entorno; si no la encuentra, usa un valor de respaldo solo apto para pruebas). No necesitas editar `app.py` para esto.

4. Haz clic en **Save** en la sección de variables de entorno de cPanel.

---

## Paso 7 — Inicializar la base de datos

1. En la misma **Terminal** (con el entorno virtual ya activado del Paso 5):

```bash
cd /home/tu_usuario/arcabeauty_app
python3 seed_data.py
```

2. Esto crea `arcabeauty.db` con datos de ejemplo (sucursal, empleados, clientes, servicios, etc.) para que puedas probar la app de inmediato.
3. **Cuando estés listo para usarla con tus datos reales**, vuelve a correr `python3 seed_data.py` una última vez para dejarla limpia con la estructura correcta, y desde ahí empieza a capturar tu información real desde la interfaz (no necesitas volver a correr este script salvo que quieras reiniciar todo).

---

## Paso 8 — Permisos de la carpeta

SQLite necesita poder escribir el archivo `arcabeauty.db` en disco.

1. En **File Manager**, clic derecho sobre la carpeta `arcabeauty_app` → **Permissions**.
2. Asegúrate de que la carpeta tenga permisos `755` y el archivo `arcabeauty.db` tenga `644` o `664`. Si tu hosting corre la app con un usuario distinto al dueño del archivo, puede que necesites `775`/`666` — si tienes errores de "database is locked" o "permission denied", este es el primer lugar a revisar.

---

## Paso 9 — Reiniciar la aplicación

1. Vuelve a **Setup Python App**.
2. Encuentra tu aplicación en la lista y haz clic en **Restart**.
3. Espera unos segundos a que el ícono confirme que está corriendo.

---

## Paso 10 — Verificar que todo funcione

Abre tu navegador en el dominio que configuraste y revisa esta lista:

- [ ] `/` — Panel principal (dashboard) carga y muestra los KPIs del día.
- [ ] `/agenda` — La agenda muestra el calendario por profesional.
- [ ] `/reservar` — La página pública de reservas carga (esta es la que compartes con tus clientes).
- [ ] `/clientes` — Lista de clientes.
- [ ] `/pos` — Punto de venta, puedes agregar un producto al carrito.
- [ ] `/fidelizacion` — Panel de fidelización.
- [ ] `/inventario` — Panel de inventarios.
- [ ] `/rh` — Panel de RH.
- [ ] `/finanzas` — Panel de Dirección y Finanzas, con la gráfica cargando.
- [ ] `/medicina` — Panel de Medicina Estética.
- [ ] `/ia` — Si configuraste `ANTHROPIC_API_KEY`, prueba escribir una pregunta y confirma que responde. Si no la configuraste, debe mostrarte el aviso explicativo (no un error genérico).
- [ ] `/app-cliente` — Inicia sesión con el teléfono de un cliente de prueba.
- [ ] `/app-empleado` — Inicia sesión con el teléfono de un empleado de prueba.

Si alguna falla, revisa los logs (siguiente sección).

---

## Paso 11 — Dominio y SSL

1. Si usaste un subdominio nuevo (ej. `salon.tudominio.com`), ve a **Domains** en cPanel y confirma que apunta correctamente.
2. Ve a **SSL/TLS Status** o **AutoSSL** y activa el certificado gratuito de Let's Encrypt para ese dominio/subdominio. Esto es importante: la App de Clientes y la App de Empleados manejan datos personales y de sesión, así que necesitas HTTPS.
3. Una vez activo el SSL, todas las URLs deben cargar con `https://` sin advertencias del navegador.

---

## Mantenimiento

**Cómo ver errores si algo falla:**
En **Setup Python App**, tu aplicación tiene un enlace a sus logs (o revisa `~/arcabeauty_app/logs/` o `~/logs/` dependiendo de tu hosting). Ahí verás el error real de Python si una página da 500.

**Cada vez que subas un cambio de código:**
Vuelve a **Setup Python App** → **Restart**. Los cambios no se reflejan solos.

**Respaldo de tu base de datos:**
`arcabeauty.db` es un solo archivo. Descárgalo periódicamente por **File Manager** (clic derecho → Download) o automatiza un backup con el **Backup Wizard** de cPanel apuntando a esa carpeta. Como es SQLite, no necesitas exportar nada especial: ese archivo ES toda tu base de datos.

**Si quieres reiniciar todo y empezar de cero:**
```bash
cd /home/tu_usuario/arcabeauty_app
python3 seed_data.py
```
Esto borra y recrea todas las tablas con datos de ejemplo. **Esto borra cualquier dato real que ya hayas capturado** — solo úsalo si realmente quieres reiniciar.

---

## Notas de seguridad antes de operar con datos reales

- **Cambia `SECRET_KEY`** (Paso 6) por un valor único y aleatorio. No uses el valor de ejemplo que trae el código.
- **Las apps de Clientes y de Empleados** (`/app-cliente`, `/app-empleado`) autentican solo con número de teléfono, sin contraseña ni verificación por SMS. Esto es válido para una prueba piloto, pero antes de promoverlas ampliamente entre tus clientes/equipo, considera agregar un código de verificación enviado por SMS o correo (puedo ayudarte a construir esa capa cuando la necesites).
- **El módulo de IA** ya llama a la API de Anthropic de forma segura desde el servidor (tu llave nunca se expone al navegador), siempre que hayas seguido el Paso 6 correctamente.
- **SQLite es de un solo archivo**: funciona bien para una sucursal con tráfico moderado. Si más adelante creces a varias sucursales con uso simultáneo intenso, conviene migrar a PostgreSQL o MySQL (la mayoría de los hostings cPanel ya ofrecen MySQL incluido).

---

## Solución de problemas comunes

| Síntoma | Causa probable | Qué revisar |
|---|---|---|
| Error 500 en cualquier página | Error de Python no capturado | Revisa los logs de la app en cPanel |
| "Internal Server Error" justo después de Restart | `passenger_wsgi.py` mal configurado | Confirma que el Paso 4 quedó exacto |
| Página en blanco o "Application failed to start" | Faltan dependencias | Repite el Paso 5, confirma que no hubo errores en `pip install` |
| "database is locked" o "permission denied" | Permisos de archivo incorrectos | Revisa el Paso 8 |
| El asistente de IA da el aviso de "no está configurado" aunque ya pusiste la llave | No reiniciaste la app tras guardar la variable de entorno | Repite el Paso 9 |
| Los estilos (colores, tipografía) no cargan, todo se ve sin diseño | La carpeta `static/` no quedó en la ubicación correcta | Revisa el Paso 3, confirma que `static/` está al mismo nivel que `app.py` |

---

¿Quieres que preparemos también la migración a MySQL/PostgreSQL para cuando crezcas a más de una sucursal, o que construyamos la verificación por SMS para las apps de Clientes y Empleados?
