# Instalacion en cualquier servidor Windows

Guia base para desplegar este sistema Laravel + OCR + IA local en Windows Server 2019/2022.

## 1) Software requerido

- **XAMPP** (Apache + PHP 8.2+ + MySQL/MariaDB) o stack equivalente.
- **Composer 2.8+**
- **Node.js 20+** (para compilar assets)
- **Python 3.10+**
- **Git**
- **Ollama** (local)
- **Tesseract OCR**

## 2) Preparar carpetas

Ejemplo estandar:

- Proyecto: `C:\xampp\htdocs\tienda`
- Backups: `D:\Backups\TiendaAI`
- Logs extra: `C:\logs\tienda-ai`

## 3) Clonar proyecto e instalar Laravel

```powershell
cd C:\xampp\htdocs
git clone <URL_REPO> tienda
cd tienda
composer install --no-dev --optimize-autoloader
copy .env.example .env
php artisan key:generate
```

Tambien puedes ejecutar el bootstrap automatizado:

```powershell
powershell -ExecutionPolicy Bypass -File .\scripts\windows\bootstrap-server.ps1 -ProjectRoot "C:\xampp\htdocs\tienda"
```

## 4) Configurar base de datos

En `.env`:

```env
APP_ENV=production
APP_DEBUG=false
APP_URL=http://tu-dominio-o-ip

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=tienda_ai
DB_USERNAME=tu_usuario
DB_PASSWORD=tu_password
```

Crear DB y ejecutar:

```powershell
php artisan migrate --force
php artisan db:seed --force
```

## 5) Instalar frontend

```powershell
npm install
npm run build
```

## 6) Configurar Ollama (local o remoto)

### Opcion A: Ollama local en el mismo servidor

Instalar Ollama y descargar modelos:

```powershell
ollama pull qwen3:latest
ollama pull llama3:latest
```

Variables `.env`:

```env
OLLAMA_ENDPOINT=http://127.0.0.1:11434
OLLAMA_MODEL=qwen3:latest
OLLAMA_FALLBACK_MODEL=llama3:latest
OLLAMA_CONNECT_TIMEOUT_SECONDS=5
OLLAMA_TIMEOUT_SECONDS=120
OLLAMA_RETRIES=2
```

### Opcion B: Ollama remoto en otra PC de la LAN (recomendada si este servidor no tiene GPU/RAM)

1. En la PC de IA, configurar Ollama para escuchar en red local (`OLLAMA_HOST=0.0.0.0:11434`).
2. Abrir firewall solo para la IP del servidor Laravel.
3. En este servidor Laravel, configurar:

```env
OLLAMA_ENDPOINT=http://IP_PC_IA:11434
OLLAMA_MODEL=qwen3:latest
OLLAMA_FALLBACK_MODEL=llama3:latest
OLLAMA_CONNECT_TIMEOUT_SECONDS=5
OLLAMA_TIMEOUT_SECONDS=120
OLLAMA_RETRIES=2
```

Validar conectividad:

```powershell
php artisan app:ollama-health-check
```

Detalle completo: ver `docs/OLLAMA_REMOTE_LAN_SETUP.md`.

## 7) Configurar OCR local (PaddleOCR + Tesseract)

Instalar Tesseract en:
`C:\Program Files\Tesseract-OCR\tesseract.exe`

Luego ejecutar:

```powershell
powershell -ExecutionPolicy Bypass -File .\scripts\windows\install-ocr.ps1 -ProjectRoot "C:\xampp\htdocs\tienda" -PythonExe "python" -TesseractPath "C:\Program Files\Tesseract-OCR\tesseract.exe"
```

Validar:

```powershell
php artisan app:ocr-health-check --input="C:\ruta\documento.pdf"
```

## 8) Permisos y cache Laravel

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

## 9) Ejecutar workers en background (produccion)

### Opcion recomendada: NSSM

Crear servicios Windows para:

1. Queue Worker
```powershell
php artisan queue:work --queue=default --sleep=1 --tries=3 --timeout=300
```

2. Scheduler
```powershell
php artisan schedule:work
```

3. (Opcional) Cola alta prioridad
```powershell
php artisan queue:work --queue=high,default --sleep=1 --tries=3 --timeout=300
```

Configurar reinicio automatico si falla.

## 10) Seguridad minima obligatoria

- `APP_DEBUG=false` en produccion.
- HTTPS con certificado valido.
- Firewall: exponer solo 80/443 (o solo 443).
- Restringir puertos internos (Ollama/MySQL/servicios) a localhost o a IPs LAN autorizadas.
- Cambiar usuario admin inicial y password.
- Revisar auditoria y logs periodicamente.

## 11) Backups automáticos

Programar tarea de Windows (Task Scheduler):

1. Dump base de datos diario.
2. Copia de `storage\app\private\documents`.
3. Rotacion de 30 dias.

Ejemplo de frecuencia:
- Diario 02:00 DB
- Diario 02:30 documentos
- Semanal verificacion de restauracion

## 12) Checklist de validacion post-instalacion

- `php artisan migrate --force` sin errores.
- `php artisan test` pasando.
- Upload de documento desde UI funcionando.
- OCR devuelve texto.
- IA devuelve JSON.
- `php artisan app:ollama-health-check` responde OK.
- Dashboard responde `GET /api/dashboard/kpis`.
- Queue worker y scheduler activos tras reinicio del servidor.
