# Guía de Despliegue en cPanel - RoadFY

## 📋 Pre-requisitos

1. Acceso a cPanel de tu hosting
2. Python 3.12.x habilitado en el servidor
3. Base de datos MySQL creada y accesible
4. Módulo de Python Application o Passenger habilitado en cPanel

---

## 📦 Paso 1: Preparar Archivos Localmente

### Archivos a Subir (todos excepto los excluidos):

```
roadfy/
├── app/                    ✅ Subir TODO
├── requirements.txt        ✅ Subir
├── wsgi.py                 ✅ Subir
├── runtime.txt             ✅ Subir (opcional, pero recomendado)
├── .env                    ✅ Subir (creado con tus configuraciones)
├── README.md               ✅ Subir (opcional)
└── .gitignore              ⚠️  NO subir (solo para git)
```

### Archivos que NO debes subir:
- ❌ `__pycache__/` (cache de Python)
- ❌ `*.pyc` (bytecode compilado)
- ❌ `*.log` (logs)
- ❌ `run.py` (solo para desarrollo local)
- ❌ `start.bat`, `start.sh` (scripts locales)
- ❌ `test_*.py` (scripts de prueba)
- ❌ `.git/` (si existe)

---

## 🗄️ Paso 2: Crear Base de Datos en cPanel

1. En cPanel, ve a **MySQL Databases**
2. Crea una nueva base de datos: `idatasc_roadfy_db`
3. Crea un usuario: `idatasc_roadfy`
4. Asigna el usuario a la base de datos con **todos los privilegios**
5. Anota las credenciales (ya las tienes en el .env)

**Nota:** Si el hosting agrega prefijos automáticos (ej: `usuario_`), ajusta el `.env` con los nombres completos.

---

## 📤 Paso 3: Subir Archivos a cPanel

### Opción A: File Manager de cPanel
1. Ve a **File Manager** en cPanel
2. Navega a la carpeta donde quieres instalar (ej: `public_html/roadfy` o `public_html/`)
3. Sube todos los archivos (puedes comprimir en ZIP y descomprimir en el servidor)

### Opción B: FTP/SFTP
1. Conecta usando FileZilla o similar
2. Sube todos los archivos manteniendo la estructura de carpetas
3. Asegúrate de que los permisos sean correctos:
   - Carpetas: 755
   - Archivos: 644
   - `wsgi.py`: 644

---

## ⚙️ Paso 4: Configurar Python Application en cPanel

1. En cPanel, busca **Python App** o **Setup Python App**
2. Clic en **Create Application** o **Crear Aplicación**

### Configuración:
- **Python Version:** 3.12.x (o la disponible, mínimo 3.8)
- **Application Root:** `/home/tuusuario/public_html/roadfy` (ajusta según tu estructura)
- **Application URL:** `/roadfy` o `/` (según donde lo instales)
- **Application Entry Point:** `wsgi:application`
- **Application Startup File:** `wsgi.py`

### Variables de Entorno (Environment Variables):
Agrega estas variables en la sección de Environment Variables:

```
DB_HOST=localhost
DB_PORT=3306
DB_USER=idatasc_roadfy
DB_PASSWORD=walterjp2026
DB_NAME=idatasc_roadfy_db
SECRET_KEY=yxGpKVT1_1x_XzV3RbFaEYyN2BrEylgHOH2fbxva-FTO6kQS5AObj6nRJERFzUDLLnOq1gpcaDrZoD2eM15NOQ
ACCESS_TOKEN_EXPIRE_MINUTES=30
URL=https://roadfy.i-datasciences.com
ENVIRONMENT=production
DEBUG=false
LOG_LEVEL=INFO
RATELIMIT_ENABLED=true
CACHE_TYPE=SimpleCache
```

**Nota:** También puedes usar el archivo `.env` que subiste, pero algunas configuraciones de cPanel prefieren variables de entorno.

3. Clic en **Create** o **Crear**

---

## 📚 Paso 5: Instalar Dependencias

1. En la página de Python App, busca tu aplicación
2. Clic en **Run Pip Install** o similar
3. O ve a **Terminal** en cPanel y ejecuta:

```bash
cd ~/public_html/roadfy  # Ajusta la ruta
pip3.12 install -r requirements.txt --user
```

Si el comando `pip3.12` no funciona, prueba:
```bash
python3.12 -m pip install -r requirements.txt --user
```

---

## ✅ Paso 6: Verificar Configuración

1. Verifica que el archivo `.env` esté en la raíz del proyecto
2. Verifica que `wsgi.py` esté correcto
3. En Terminal, prueba:

```bash
cd ~/public_html/roadfy
python3.12 -c "from app import create_app; app = create_app(); print('OK')"
```

Si hay errores, revísalos y corrige.

---

## 🔧 Paso 7: Ajustes Adicionales

### Permisos de Archivos:
```bash
chmod 644 wsgi.py
chmod 644 .env
chmod -R 755 app/
```

### Si usas subdominio (roadfy.i-datasciences.com):
1. En cPanel, ve a **Subdomains**
2. Crea el subdominio `roadfy` apuntando a la carpeta donde instalaste la app
3. O configura el dominio principal si es el caso

---

## 🚀 Paso 8: Iniciar/Reiniciar la Aplicación

1. En Python App, busca tu aplicación
2. Clic en **Restart** o **Reiniciar**
3. Espera unos segundos
4. Visita: `https://roadfy.i-datasciences.com`

---

## 🔍 Paso 9: Verificar que Funciona

1. Abre el navegador y ve a: `https://roadfy.i-datasciences.com`
2. Deberías ver la página principal
3. Prueba:
   - Registro de usuario
   - Login
   - Navegación básica

---

## 🐛 Solución de Problemas Comunes

### Error: "ModuleNotFoundError: No module named 'flask'"
**Solución:** Las dependencias no están instaladas. Ejecuta:
```bash
pip3.12 install -r requirements.txt --user
```

### Error: "ImportError: cannot import name 'create_app'"
**Solución:** Verifica que `wsgi.py` esté en la raíz y tenga el código correcto.

### Error: "OperationalError: (2003, 'Can't connect to MySQL server')"
**Solución:** 
- Verifica que `DB_HOST=localhost` (en cPanel suele ser `localhost`)
- Verifica credenciales de la base de datos
- Verifica que la base de datos existe

### Error: "403 Forbidden" o "Internal Server Error"
**Solución:**
- Verifica permisos de archivos (644 para archivos, 755 para carpetas)
- Revisa los logs en cPanel (Error Log)
- Verifica que `wsgi.py` tenga los permisos correctos

### La aplicación no responde
**Solución:**
- Reinicia la aplicación en Python App
- Verifica que el puerto/URL esté configurado correctamente
- Revisa los logs

---

## 📝 Notas Importantes

1. **Base de Datos:** Asegúrate de que la base de datos y el usuario existan en cPanel
2. **Python Version:** Algunos hostings tienen limitaciones de versión. Si no hay 3.12, usa la más cercana (3.11, 3.10, 3.9)
3. **.env vs Variables de Entorno:** Algunos cPanel prefieren variables de entorno. Si el `.env` no funciona, usa las variables en Python App
4. **Rutas:** Ajusta las rutas según la estructura de tu hosting (algunos usan `public_html/`, otros `domains/tudominio.com/`)
5. **HTTPS:** Asegúrate de que el SSL esté configurado para `roadfy.i-datasciences.com`

---

## 🔐 Seguridad

- ✅ El archivo `.env` NO debe ser accesible públicamente
- ✅ Verifica que `.gitignore` incluya `.env`
- ✅ Usa HTTPS (SSL) en producción
- ✅ Mantén las dependencias actualizadas
- ✅ No expongas credenciales en el código

---

## 📞 Soporte

Si encuentras problemas:
1. Revisa los logs de error en cPanel
2. Verifica que todas las dependencias estén instaladas
3. Verifica la configuración de la base de datos
4. Contacta al soporte de tu hosting si es necesario

---

## ✅ Checklist Final

- [ ] Archivos subidos correctamente
- [ ] Base de datos creada y configurada
- [ ] Variables de entorno configuradas
- [ ] Dependencias instaladas
- [ ] `wsgi.py` configurado correctamente
- [ ] Permisos de archivos correctos
- [ ] Aplicación iniciada/reiniciada
- [ ] Sitio accesible en el navegador
- [ ] Funcionalidades básicas probadas

¡Listo! Tu aplicación debería estar funcionando en producción. 🎉
