# 📦 GUÍA DE DESPLIEGUE EN CPANEL
## WebSoft Solutions — Laravel 12 + PHP 8.3

---

## 📁 ESTRUCTURA DEL PAQUETE

```
paginaweb_cpanel_YYYYMMDD_HHMM.zip
├── public_html/        ← Contenido del /public de Laravel
│   ├── index.php       ← YA MODIFICADO para apuntar al servidor
│   ├── .htaccess
│   ├── css/
│   ├── js/
│   └── storage/
│
├── paginaweb_app/      ← Aplicación Laravel completa
│   ├── app/
│   ├── bootstrap/
│   ├── config/
│   ├── database/
│   ├── resources/
│   ├── routes/
│   ├── storage/
│   ├── vendor/
│   ├── .env            ← YA CONFIGURADO para producción (editar credenciales)
│   └── ...
│
└── docs/
    ├── database_backup.sql   ← Estructura + datos de la BD
    └── GUIA_DESPLIEGUE.md    ← Este archivo
```

---

## 🚀 PASOS DE DESPLIEGUE

### PASO 1 — Preparar en cPanel

1. Ingresa a tu **cPanel** → **Administrador de Archivos**
2. Ve a la carpeta `/home/tuusuario/` (raíz de tu cuenta)

### PASO 2 — Subir la aplicación

**Opción A — Vía Administrador de Archivos:**
1. Sube `paginaweb_app/` a `/home/tuusuario/paginaweb_app/`
2. Sube el contenido de `public_html/` a `/home/tuusuario/public_html/`

**Opción B — Vía FTP (FileZilla):**
```
Servidor:  ftp.tudominio.com
Usuario:   tu_usuario_cpanel
Password:  tu_password_cpanel
Puerto:    21 (o 22 para SFTP)
```

> ⚠️ **Importante:** Si tienes un SUBDOMINIO (ej: app.tudominio.com),
> sube `public_html/` a la carpeta raíz del subdominio en cPanel.

### PASO 3 — Crear la Base de Datos

1. cPanel → **MySQL Databases**
2. Crear nueva base de datos: `tuusuario_paginaweb`
3. Crear nuevo usuario MySQL: `tuusuario_dbuser` + contraseña segura
4. **Agregar usuario a la base de datos** → Todos los privilegios
5. Importar el SQL:
   - cPanel → **phpMyAdmin**
   - Selecciona la BD `tuusuario_paginaweb`
   - Pestaña **Importar** → selecciona `docs/database_backup.sql`
   - Clic en **Importar**

### PASO 4 — Configurar el .env

Edita `/home/tuusuario/paginaweb_app/.env` con los datos reales:

```dotenv
APP_NAME="WebSoft Solutions"
APP_ENV=production
APP_KEY=base64:L8xTsof0xD5JSLC5P320jbQXkKv8RNoU+edWvhlnNzg=
APP_DEBUG=false
APP_URL=https://tudominio.com

DB_CONNECTION=mysql
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=tuusuario_paginaweb    ← Nombre EXACTO creado en paso 3
DB_USERNAME=tuusuario_dbuser       ← Usuario MySQL del paso 3
DB_PASSWORD=TU_PASSWORD_MYSQL      ← Password del paso 3

MAIL_MAILER=smtp
MAIL_HOST=mail.tudominio.com
MAIL_PORT=587
MAIL_USERNAME=info@tudominio.com
MAIL_PASSWORD=TU_PASSWORD_CORREO
MAIL_FROM_ADDRESS="info@tudominio.com"
```

### PASO 5 — Verificar index.php en public_html

El archivo `public_html/index.php` ya tiene configurado:
```php
$appPath = dirname(__DIR__) . '/paginaweb_app';
```

> Si cambiaste el nombre de la carpeta (ej: `laravel_app`), actualiza esta línea.

### PASO 6 — Permisos de carpetas (SSH o Terminal cPanel)

Ejecuta estos comandos en **cPanel → Terminal** o vía SSH:

```bash
# Ir a la carpeta del proyecto
cd ~/paginaweb_app

# Dar permisos correctos
chmod -R 755 .
chmod -R 775 storage
chmod -R 775 bootstrap/cache

# Generar nueva APP_KEY (opcional, si la del .env no funciona)
php artisan key:generate

# Limpiar y optimizar para producción
php artisan optimize:clear
php artisan config:cache
php artisan route:cache
php artisan view:cache

# Crear enlace simbólico para storage (imágenes subidas)
php artisan storage:link
```

> 💡 Si no tienes acceso SSH, el sitio puede funcionar sin estos comandos,
> pero `php artisan storage:link` es necesario para ver imágenes subidas.

### PASO 7 — Verificar PHP en cPanel

1. cPanel → **Software** → **MultiPHP Manager**
2. Asegúrate de que `public_html` use **PHP 8.3** (mínimo 8.1)
3. Activa las extensiones: `pdo_mysql`, `mbstring`, `openssl`, `fileinfo`, `gd`, `zip`, `xml`

---

## 🔧 SOLUCIÓN DE PROBLEMAS COMUNES

### ❌ Error 500 (Internal Server Error)
- Verifica que `APP_KEY` esté configurado en `.env`
- Revisa `paginaweb_app/storage/logs/laravel.log` para el error exacto
- Asegúrate de que PHP 8.3 esté activo

### ❌ No se ven las imágenes subidas
```bash
php artisan storage:link
```
Si no funciona, crea manualmente el enlace:
```bash
ln -s ~/paginaweb_app/storage/app/public ~/public_html/storage
```

### ❌ Error de base de datos
- Verifica usuario/contraseña en `.env`
- Confirma que el usuario MySQL tiene privilegios en la BD
- En cPanel el `DB_HOST` siempre es `localhost`

### ❌ Las rutas no funcionan (404)
- Verifica que el archivo `.htaccess` esté en `public_html/`
- Activa `mod_rewrite` en cPanel → Apache Handlers

### ❌ Error "Class not found" o "Composer"
```bash
cd ~/paginaweb_app
composer install --no-dev --optimize-autoloader
```

---

## 📊 CREDENCIALES DEL ADMIN

Tras importar la BD, el usuario administrador es:

```
Email:    admin@websoftsolutions.pe
Password: password
URL:      https://tudominio.com/admin/dashboard
```

> ⚠️ **Cambia la contraseña** inmediatamente después del primer acceso.
> Panel admin → Perfil → Cambiar contraseña.

---

## 📋 REQUISITOS DEL SERVIDOR

| Requisito | Versión mínima |
|-----------|---------------|
| PHP       | 8.1 (recomendado 8.3) |
| MySQL     | 5.7+ / MariaDB 10.3+ |
| Apache    | 2.4+ con mod_rewrite |
| RAM       | 256 MB mínimo |
| Extensiones | pdo_mysql, mbstring, openssl, fileinfo, gd, zip, xml |

---

## 🆘 SOPORTE

Si encuentras algún problema durante el despliegue:
1. Revisa `paginaweb_app/storage/logs/laravel.log`
2. Activa temporalmente `APP_DEBUG=true` para ver el error
3. Recuerda desactivar `APP_DEBUG=false` después

---

*Generado automáticamente — $(Get-Date -Format 'dd/MM/yyyy HH:mm')*
