# Pandora CRM · despliegue en Namecheap

Esta guía replica el patrón que ya funciona en `granja.pandora.farm`, cambiando la raíz a `crm.pandora.farm`.

## 1. Subdominio

Crear `crm.pandora.farm` y configurar Document Root:

```text
/home/pandgkzr/crm.pandora.farm/public
```

Nunca apuntar el subdominio a la raíz Laravel.

## 2. PHP

Usar PHP 8.5. Extensiones mínimas:

- pdo_pgsql / pgsql
- pdo_mysql (necesaria durante la migración legacy)
- mbstring
- openssl
- tokenizer
- xml
- ctype
- json
- fileinfo
- curl
- zip

## 3. PostgreSQL

Crear una base PostgreSQL nueva para CRM y configurar `.env` con las credenciales reales. El host del entorno Pandora actual es el que corresponda al hosting; no copiar contraseñas a documentación.

## 4. Composer

El ZIP de referencia `pandora-platform-v0.9.28` entregado para construir esta base no incluía `composer.lock`. En el primer despliegue de CRM, Composer generará el lock al resolver dependencias. **Conservar ese `composer.lock` y usarlo en todas las versiones siguientes**; desde ese momento no hacer `composer update` como rutina.

Desde la raíz:

```bash
cd /home/pandgkzr/crm.pandora.farm
php -c php.ini composer.phar install --no-dev --optimize-autoloader
```

## 5. Node/Vite

Activar el nodevenv que ya se utiliza para las aplicaciones Pandora:

```bash
source /home/pandgkzr/nodevenv/node-build/24/bin/activate
rm -rf /home/pandgkzr/crm.pandora.farm/public/build
npm --prefix /home/pandgkzr/crm.pandora.farm install
npm --prefix /home/pandgkzr/crm.pandora.farm run build
```

## 6. Laravel

```bash
cd /home/pandgkzr/crm.pandora.farm
php artisan migrate --force
php artisan optimize:clear
php artisan optimize
php artisan migrate:status
chmod -R 775 storage bootstrap/cache
php artisan storage:link
```

## 7. Importador legacy

Configurar `LEGACY_DB_*` con un usuario MySQL de solo lectura y ejecutar primero:

```bash
php artisan crm:import-legacy --dry-run
```

Luego:

```bash
php artisan crm:import-legacy
```

Si la carpeta legacy no es accesible desde el proceso PHP, usar `--skip-assets` y copiar `public/assets` por otro mecanismo.

## 8. Verificación

- `https://crm.pandora.farm/health` devuelve JSON `ok=true`.
- `/login` carga el branding CRM.
- Un usuario legacy puede entrar con su contraseña existente.
- Los conteos del importador muestran `OK`.
- `public/build/manifest.json` existe.
- `APP_ENV=production` y `APP_DEBUG=false`.
- HTTPS está activo antes de probar instalación PWA.
