# Checklist de Producción

Checklist para poner un proyecto en producción. Aplica a todos los proyectos independientemente del producto/demo.

## Pre-deploy

### Configuración del servidor
- [ ] PHP 8.x instalado con extensiones requeridas (mbstring, openssl, pdo_mysql, tokenizer, xml, ctype, json, bcmath, gd)
- [ ] MySQL/MariaDB disponible
- [ ] Composer instalado
- [ ] Node.js + npm (si se necesita compilar assets)

### Preparación del proyecto
- [ ] Base de datos creada en el servidor de producción
- [ ] `.env` de producción configurado (ver [ejemplo](env-production-example.env))
- [ ] `APP_ENV=production`
- [ ] `APP_DEBUG=false`
- [ ] `APP_URL` con la URL real del sitio
- [ ] `DB_DATABASE`, `DB_USERNAME`, `DB_PASSWORD` del entorno de producción
- [ ] `CLOUDINARY_URL` configurado (para assets)
- [ ] `MAIL_*` configurado si el proyecto envía correos

### Datos del proyecto
- [ ] Los 4 JSON completos y validados (`cd-system.json`, `site-data.json`, `assets.json`, `analytics.json`)
- [ ] Assets de marca en `public/cd-project/assets/`
- [ ] Contenido de módulos listo (JSONs de módulos o cargado desde admin)

## Deploy

### Ejecución
```bash
composer install --no-dev --optimize-autoloader

php artisan migrate --force

php artisan db:seed --class=Project_Seeder
# O si se usa provisión:
# php artisan bewpro:provision database/seeders/project-data/provision-{proyecto}.json

php artisan config:cache
php artisan route:cache
php artisan view:cache
php artisan cache:clear
```

### Permisos
```bash
chmod -R 775 storage/
chmod -R 775 bootstrap/cache/
chown -R www-data:www-data storage/ bootstrap/cache/
```

## Post-deploy

### Verificación funcional
- [ ] Home carga correctamente con el demo y los módulos activos
- [ ] Logo, favicon y meta tags (OG/Twitter) se ven correctos
- [ ] Cada módulo activo es accesible por su ruta (/blog, /menu, /services, etc.)
- [ ] Formulario de contacto funciona
- [ ] Panel admin accesible (/admin o ruta configurada)
- [ ] SSL/HTTPS activo

### Verificación SEO y analytics
- [ ] `<title>` y `<meta description>` correctos
- [ ] OG tags correctos (verificar compartiendo en redes)
- [ ] Google Analytics activo (verificar script en HTML y Network tab)
- [ ] Favicon visible en la pestaña del navegador

### Verificación de performance
- [ ] Caché de configuración activa (`php artisan config:cache`)
- [ ] Caché de rutas activa (`php artisan route:cache`)
- [ ] Caché de vistas activa (`php artisan view:cache`)
- [ ] Assets servidos desde Cloudinary (no locales)

### Verificación de seguridad
- [ ] `APP_DEBUG=false` en producción
- [ ] `APP_KEY` generada y única
- [ ] `.env` no accesible públicamente
- [ ] `storage/` no accesible públicamente
- [ ] HTTPS forzado

## Comandos de mantenimiento post-deploy

```bash
# Limpiar y regenerar cachés después de cambios
php artisan config:clear && php artisan config:cache
php artisan route:clear && php artisan route:cache
php artisan view:clear && php artisan view:cache
php artisan cache:clear

# Si se cambian datos del proyecto (site-data, assets, etc.)
php artisan db:seed --class=SiteDataSeeder
php artisan cache:clear
php artisan view:clear

# Purgar CDN/Cloudflare si aplica
# curl -X POST "https://api.cloudflare.com/client/v4/zones/{zone}/purge_cache" ...
```

## Ejemplo de .env de producción

Ver [env-production-example.env](env-production-example.env) para un ejemplo completo basado en Muma.

Claves importantes:
- `APP_ENV=production`, `APP_DEBUG=false`
- DB con credenciales de producción
- `CLOUDINARY_URL` configurado
- `MAIL_*` con SMTP real si se envían correos
- No hace falta `GOOGLE_ANALYTICS_ID` en .env (viene de la DB via `analytics.json`)
