# Producție — Cache & Redis (Ubuntu / Listara)

Ghid pentru activarea controlată pe serverul de producție. **Updater (dev) și producția trebuie să folosească aceleași chei `.env`** (valori diferite doar pentru host/URL).

## 1. Variante recomandate

### A) Fără Redis (trafic mic / un singur server)

```env
CACHE_DRIVER=file
SESSION_DRIVER=file
QUEUE_CONNECTION=sync
```

Cache-ul aplicației (layout, homepage) funcționează în `storage/framework/cache/data`.

### B) Cu Redis (recomandat la trafic mare)

```bash
sudo apt update
sudo apt install redis-server php-redis
sudo systemctl enable redis-server
sudo systemctl start redis-server
redis-cli ping   # PONG
```

`.env` pe producție:

```env
CACHE_DRIVER=redis
SESSION_DRIVER=redis
QUEUE_CONNECTION=sync

REDIS_HOST=127.0.0.1
REDIS_PORT=6379
REDIS_CACHE_DB=1
REDIS_DB=0
```

**Queue:** rămâne `sync` până implementați dispatch real + `php artisan queue:work`.

## 2. După modificare .env

```bash
cd /path/to/app
php artisan config:clear
php artisan cache:warm
php artisan cache:diagnostics
```

## 3. Deploy din updater

```bash
DEPLOY_CONFIG=deploy/deploy.conf.listara ./deploy.sh
```

Post-deploy automat (Linux), în ordine:

1. `REMOTE_POST_DEPLOY` — permisiuni `www-data`, nginx (fără `optimize:clear`)
2. `optimize:clear` → `config:cache` / `route:cache` / `view:cache`
3. `cache:warm` + `cache:diagnostics` (rulează ca **www-data**, același user ca PHP-FPM)

**Important:** `deploy/linux/post-deploy.sh` nu mai rulează `optimize:clear` după warm (golea cache-ul și încetinește site-ul).

**Nu** se folosește `cache:clear` global la editare meniu — doar invalidare țintită în cod.

## 4. Comenzi utile

| Comandă | Rol |
|---------|-----|
| `php artisan cache:diagnostics` | Status driver, Redis, HIT/MISS layout & homepage |
| `php artisan cache:warm` | Preîncălzește cache aplicație |
| `php artisan cache:warm --layout` | Doar layout |
| `php artisan cache:warm --homepage` | Doar homepage |

## 5. Invalidare țintită (automată)

La salvare în admin:

- Setări, logo, integrări → layout + settings
- Categorii / subcategorii → categorii + homepage
- SEO homepage, testimoniale, ads → homepage
- Meniuri → layout + MenuService cache

Funcții manuale (Tinker):

```php
clear_layout_view_cache();
clear_homepage_cache();
clear_app_setting_cache();
clear_main_category_cache();
```

## 6. Sincronizare dev ↔ producție

1. Păstrați `.env.example` actualizat în git.
2. Pe producție: copiați variabilele noi din `.env.example`, nu suprascrieți tot `.env`.
3. Rulați `./deploy.sh` după fiecare release cu modificări cache.

## 7. De ce site-ul e lent imediat după deploy

La fiecare deploy, scriptul rulează:

1. `optimize:clear` — golește cache layout/homepage
2. `config:cache` / `route:cache` / `view:cache` — reconstruiește
3. `cache:warm` — reîncălzește (primul minut poate fi tot mai lent)

**Evitați** `DB_SYNC_REFERENCE_DATA=true` la deploy-uri obișnuite (categorii/orașe): importă multe tabele și blochează MySQL. Folosiți `false` în `deploy.conf.listara`, activați doar când sincronizați date de referință din local.

## 8. Captcha „invalid” după deploy

Cauze frecvente:

| Cauză | Verificare / fix |
|-------|------------------|
| `APP_URL` greșit în `.env` producție | Trebuie `https://listara.online`, apoi `php artisan config:clear && php artisan config:cache` |
| `SESSION_DRIVER=redis` fără Redis activ | `CACHE_DRIVER=file` și `SESSION_DRIVER=file`, sau instalați Redis |
| Sesiunea nu se salvează | `chown -R www-data:www-data storage/framework/sessions` și `chmod 775` |
| Cookie secure pe HTTPS | `SESSION_SECURE_COOKIE=true` în `.env` (sau lăsați gol — app setează pe HTTPS) |

După deploy, testați captcha în fereastră privată (fără cookie vechi).

## 9. Troubleshooting

| Simptom | Acțiune |
|---------|---------|
| Meniu vechi după editare | `php artisan cache:warm` sau verifică permisiuni `storage/` |
| Redis connection refused | `systemctl status redis` sau reveniți la `CACHE_DRIVER=file` |
| Homepage stale | Așteptați TTL (5–60 min) sau `clear_homepage_cache()` în tinker |
| Captcha mereu invalid | Vezi secțiunea 8; verifică `storage/framework/sessions` scriabil de www-data |

Vezi și: `docs/CACHE-REDIS-AUDIT.md`, `docs/CACHE-STATUS.md`

## 8. Script instalare Redis (Listara)

Pe server, după deploy:

```bash
bash /opt/apps/main-updater/deploy/linux/setup-redis.sh
```

Sau din mașina locală:

```bash
DEPLOY_CONFIG=deploy/deploy.conf.listara ./deploy.sh
# apoi SSH:
ssh root@192.166.82.76 'bash /opt/apps/main-updater/deploy/linux/setup-redis.sh'
```

## 9. Dev local (XAMPP) — permisiuni storage

Dacă apare `Permission denied` la `storage/framework/views`:

```bash
./scripts/fix-local-storage-permissions.sh
```
