# Deploy a Producción

> Documentación concisa siguiendo estándares del proyecto.

## Descripción

Script robusto (`deploy-produccion.ps1`) con validaciones, backup automático y rollback para deploy a `cammybk.appgsi.com` (Plesk).

## Flujo del Script (Automático)

1. Verifica Git y remoto 'origin'
2. Valida rama actual (pregunta solo si no es main/master)
3. **Commitea automáticamente** cambios pendientes
4. Actualiza desde remoto con validación
5. Ejecuta tests automáticamente (solo pregunta si fallan)
6. Compila assets para producción con validación
7. **Commitea automáticamente** assets compilados
8. Crea backup automático de rama produccion
9. Cambia a rama `produccion` (crea si no existe)
10. Merge con detección de conflictos
11. Push a remoto con validación
12. Vuelve a rama original
13. Push de rama original (si hay cambios)
14. **Elimina automáticamente** el backup
15. Muestra resumen con instrucciones de Plesk

## Uso

```powershell
.\deploy-produccion.ps1
```

**Características**: Proceso completamente automático con backup y rollback automático si algo falla.

## Configuración en Plesk (cammybk.appgsi.com)

### 1. Configurar Document Root
```
Plesk → Hosting Settings → Document Root
Cambiar a: public/
```

### 2. Configurar Git
```
Plesk → Git → Agregar repositorio
• URL repositorio: <tu_url_repositorio>
• Rama: produccion
• Modo deploy: Automático (recomendado)
```

### 3. Configurar Deploy Actions
En **Plesk → Git → Deploy Actions** agregar los siguientes comandos que se ejecutarán automáticamente después de cada pull:

```bash
composer install --no-dev --optimize-autoloader
php artisan migrate --force
php artisan config:cache
php artisan route:cache
php artisan view:cache
chmod -R 755 storage bootstrap/cache
```

**Importante**: Estos comandos se ejecutan automáticamente cada vez que Plesk hace pull de la rama produccion.

### 4. Configurar .env
En **Plesk → Files → .env** (o editar directamente):

```env
APP_ENV=production
APP_DEBUG=false
APP_URL=https://cammybk.appgsi.com
APP_TIMEZONE=America/Bogota
DB_HOST=localhost
DB_DATABASE=<nombre_base_datos>
DB_USERNAME=<usuario_mysql>
DB_PASSWORD=<contraseña_mysql>
```

### 5. Configurar SSL (Opcional)
```
Plesk → SSL/TLS Certificates → Let's Encrypt
• Activar certificado SSL
• Habilitar "Redirect from HTTP to HTTPS"
• Descomentar líneas HTTPS en public/.htaccess
```

## Checklist Pre-Deploy

- [ ] Tests pasando (`php artisan test`)
- [ ] Assets compilados localmente sin errores
- [ ] .env.example actualizado
- [ ] Commits actuales en main

## Checklist Post-Deploy en Plesk

- [ ] Document root configurado a `public/`
- [ ] Deploy Actions configurados correctamente
- [ ] Pull desde Git ejecutado exitosamente
- [ ] .env configurado con APP_DEBUG=false
- [ ] .env configurado con APP_ENV=production
- [ ] Credenciales MySQL actualizadas en .env
- [ ] SSL/HTTPS activado (Let's Encrypt)
- [ ] Verificar https://cammybk.appgsi.com funciona
- [ ] Dashboard deshabilitado o protegido con auth

## Troubleshooting

### Local (Script de Deploy)

| Problema | Solución |
|----------|----------|
| Rollback automático activado | Revisa el mensaje de error, corrige y vuelve a ejecutar |
| Compilación falla | Verificar Node.js 17+ compatibility en `package.json` |
| Conflictos de merge | Resolver manualmente siguiendo instrucciones del script |
| Push rechazado | Verificar permisos SSH o HTTPS en repositorio |
| Tests fallan | Corregir tests antes de deploy o continuar bajo tu responsabilidad |

### Plesk (Deploy Actions)

| Problema | Solución |
|----------|----------|
| Deploy Actions no se ejecutan | Verificar que están configurados en Plesk → Git → Deploy Actions |
| Error en composer install | Verificar versión de PHP en Plesk (debe ser >= 7.3) |
| Error en migraciones | Verificar credenciales MySQL en .env |
| Error 500 después de pull | Verificar permisos de storage/ y bootstrap/cache/ |
| Assets no cargan | Verificar Document Root apunta a public/ |

## Flujo de Deploy Completo

1. **Local**: Ejecutar `.\deploy-produccion.ps1`
2. **Plesk**: Hacer pull manual desde Git (o esperar pull automático)
3. **Plesk**: Deploy Actions se ejecutan automáticamente
4. **Verificar**: Abrir https://cammybk.appgsi.com

## Rollback Manual (Si es necesario)

Si algo sale mal después del deploy:

**Opción 1: Desde Plesk**
- Plesk → Git → Pull de commit anterior
- Deploy Actions se ejecutarán automáticamente

**Opción 2: Desde Git local**
```bash
git checkout produccion
git reset --hard <commit_anterior>
git push origin produccion --force
```
Luego hacer pull desde Plesk.

---

**URL Producción**: https://cammybk.appgsi.com  
**Servidor**: Plesk Obsidian 18.0.76
