Display CMS Optimierungen 03-06-2026
This commit is contained in:
parent
6c6d683b9a
commit
bebfa63e87
17 changed files with 925 additions and 133 deletions
274
dev/displays-11-05-2026/02-deployment-live-29-05-2026.md
Normal file
274
dev/displays-11-05-2026/02-deployment-live-29-05-2026.md
Normal file
|
|
@ -0,0 +1,274 @@
|
|||
# Display CMS – Deployment auf Live (29.05.2026)
|
||||
|
||||
Kurze Übersicht der Änderungen aus Commit `6c6d683` und was beim Live-Deploy zu beachten ist.
|
||||
|
||||
---
|
||||
|
||||
## Was wurde geändert?
|
||||
|
||||
### Mediathek
|
||||
- Videos zeigen ein **Vorschaubild** (Poster-Frame) statt nur eines Icons.
|
||||
- Poster werden beim Upload automatisch erzeugt (`ffmpeg`).
|
||||
- Neuer Artisan-Command zum Nachgenerieren bestehender Videos: `display-media:generate-video-thumbnails`
|
||||
- Neue Kategorie **„Sonstiges“** für B2in-Medien.
|
||||
|
||||
### B2in-Display-Modul
|
||||
- Media-Picker zeigt **alle Medien** (Bild + Video); der Typ wird aus der Datei abgeleitet.
|
||||
- **Marke** (ehem. Header): Logo und Claim frei in Ecken positionierbar; separate Schalter für Anzeige.
|
||||
- **Footer** global ein-/ausblendbar; unten positionierte Markenelemente nur ohne Footer.
|
||||
- Kleine **Thumbnail-Vorschau** vor allen Medien-URL-Feldern im Editor.
|
||||
|
||||
### Video-Playlist-Modul
|
||||
- Video-Vorschaubilder in der Übersicht.
|
||||
- Feld „Titel“ heißt jetzt **„Name“** (intern, nicht auf dem Display).
|
||||
- Vorschau im Modal zeigt bei neuen Einträgen kein falsches Video mehr.
|
||||
|
||||
### Angebote-Modul
|
||||
- **Kein Slide-Typ** mehr – einheitliches Detail-Layout.
|
||||
- Jeder Inhaltsblock (Logo, Badge, Texte, Preis, QR, Kontakt …) ist **pro Angebot** ein-/ausblendbar.
|
||||
- Logo und Brand-Text liegen **pro Slide**, nicht mehr in den Modul-Meta-Einstellungen.
|
||||
- Meta-Einstellungen: nur noch Endlosschleife, Transition, Dauer.
|
||||
- **Streichpreis**: Originalpreis rot durchgestrichen (optional).
|
||||
|
||||
### Display-Player (`public/_cabinet/display/index.html`)
|
||||
- B2in: Marke/Footer-Einstellungen werden ausgespielt.
|
||||
- Angebote: dynamisches Layout, Streichpreis, Show-Flags.
|
||||
- **Bugfix**: Endlosschleife bei leeren Modulen gestoppt (kein CPU-Loop mehr).
|
||||
|
||||
### Admin-Portal (allgemein)
|
||||
- **Script-Reihenfolge** korrigiert: `@livewireScripts` vor `@fluxScripts` (behebt `fluxModal`-Fehler).
|
||||
- Stale Datei `public/flux/flux.js` **entfernt** – Flux wird **nicht** statisch aus `public/` geladen (siehe Abschnitt „Flux UI auf Live“).
|
||||
- Livewire-Modal-Crash beim Aktualisieren von Inhalten behoben.
|
||||
|
||||
---
|
||||
|
||||
## Flux UI auf Live (wichtig – Switcher, Modals, Dropdowns)
|
||||
|
||||
### Diagnose (portal.b2in.eu)
|
||||
|
||||
```bash
|
||||
curl -I "https://portal.b2in.eu/flux/flux.min.js?id=test"
|
||||
# Aktuell: HTTP 404 ← Browser führt das Script NICHT aus → Switcher/Modals kaputt
|
||||
|
||||
curl -I "https://portal.b2in.eu/vendor/livewire/livewire.min.js?id=test"
|
||||
# HTTP 200 ← Livewire funktioniert, weil Assets statisch unter public/vendor/livewire/ liegen
|
||||
```
|
||||
|
||||
**Ursache:** Flux wird auf Live per Laravel-Route ausgeliefert, liefert dort aber **HTTP 404** (trotz JS-Inhalt). Livewire nutzt veröffentlichte Dateien in `public/vendor/livewire/` → **HTTP 200**.
|
||||
|
||||
**Symptome:** Modals öffnen nicht, Switcher reagieren nicht, Konsole zeigt `ReferenceError: Can't find variable: fluxModal`.
|
||||
|
||||
### Fix auf dem Live-Server
|
||||
|
||||
Flux-Assets wie Livewire statisch veröffentlichen:
|
||||
|
||||
```bash
|
||||
git pull
|
||||
composer install --no-dev --optimize-autoloader
|
||||
# ↑ führt flux:publish-assets automatisch aus (composer.json post-install-cmd)
|
||||
|
||||
# Falls nötig manuell:
|
||||
php artisan flux:publish-assets --force
|
||||
|
||||
php artisan route:clear
|
||||
php artisan config:cache
|
||||
php artisan view:clear
|
||||
```
|
||||
|
||||
**auth.json** muss auf Live existieren (Flux Pro) – die Datei liegt nicht in Git.
|
||||
|
||||
Der Command kopiert aktuelle Dateien aus `vendor/livewire/flux-pro/dist/` nach `public/flux/`. Nginx liefert sie dann direkt mit **HTTP 200** aus (wie bei Livewire).
|
||||
|
||||
### Prüfen ob Flux korrekt läuft
|
||||
|
||||
```bash
|
||||
curl -I "https://portal.b2in.eu/flux/flux.min.js?id=test"
|
||||
# Erwartung: HTTP 200
|
||||
# Kein x-fastcgi-cache Header (dann kommt es aus PHP statt statisch)
|
||||
```
|
||||
|
||||
Im Admin-Portal → DevTools → Netzwerk:
|
||||
|
||||
1. `vendor/livewire/livewire.min.js` → **200**
|
||||
2. `flux/flux.min.js` → **200** (nicht 404!)
|
||||
3. `livewire.js` lädt **vor** `flux.min.js`
|
||||
4. Hard-Reload (`Cmd+Shift+R` / `Ctrl+Shift+R`)
|
||||
|
||||
### Wichtig
|
||||
|
||||
| ❌ Falsch | ✅ Richtig |
|
||||
|---|---|
|
||||
| Alte `public/flux/flux.js` aus altem Backup zurückkopieren | `php artisan flux:publish-assets --force` |
|
||||
| `public/flux/` löschen ohne neu zu publishen | Danach immer `flux:publish-assets` ausführen |
|
||||
| Nur `route:clear` erwarten, dass es reicht | Statische Assets publishen (wie bei Livewire) |
|
||||
|
||||
---
|
||||
|
||||
## Live-Deploy Checkliste
|
||||
|
||||
### 1. Code deployen
|
||||
|
||||
```bash
|
||||
git pull
|
||||
composer install --no-dev --optimize-autoloader
|
||||
```
|
||||
|
||||
`composer install` veröffentlicht dabei automatisch Livewire- und Flux-Assets nach `public/` (`post-install-cmd`). Falls der Deploy-Prozess Composer-Skripte mit `--no-scripts` deaktiviert, danach zwingend manuell ausführen:
|
||||
|
||||
```bash
|
||||
php artisan livewire:publish --assets
|
||||
php artisan flux:publish-assets --force
|
||||
```
|
||||
|
||||
**Keine neuen Migrationen** in diesem Release. Die Spalte `display_media.thumbnail_path` existiert bereits seit der Mediathek-Migration (`2026_03_26_*`).
|
||||
|
||||
### 2. FFmpeg installieren (Pflicht für Video-Poster)
|
||||
|
||||
Video-Poster werden serverseitig per `ffmpeg` erzeugt (`DisplayMediaService`, Artisan-Command). Ohne FFmpeg funktionieren Uploads weiterhin, aber **keine Video-Vorschaubilder** (weder in der Mediathek noch im Editor).
|
||||
|
||||
#### Dev Container (lokal)
|
||||
|
||||
Im Dev Container ist `ffmpeg` bereits vorinstalliert. Prüfen:
|
||||
|
||||
```bash
|
||||
ffmpeg -version
|
||||
# Erwartung: /usr/bin/ffmpeg
|
||||
```
|
||||
|
||||
#### Ubuntu / Debian (Live-Server)
|
||||
|
||||
```bash
|
||||
sudo apt update
|
||||
sudo apt install -y ffmpeg
|
||||
ffmpeg -version
|
||||
```
|
||||
|
||||
#### CentOS / RHEL / AlmaLinux
|
||||
|
||||
```bash
|
||||
sudo dnf install -y ffmpeg
|
||||
# Alternativ auf älteren Systemen:
|
||||
sudo yum install -y ffmpeg
|
||||
```
|
||||
|
||||
Falls `ffmpeg` im Standard-Repo fehlt, ggf. **RPM Fusion** aktivieren.
|
||||
|
||||
#### macOS (lokal ohne Dev Container)
|
||||
|
||||
```bash
|
||||
brew install ffmpeg
|
||||
```
|
||||
|
||||
#### Wichtig: FFmpeg muss für PHP erreichbar sein
|
||||
|
||||
Nicht nur in der SSH-Session, sondern auch für den **Webserver-User** (PHP-FPM), da Poster sowohl beim Artisan-Command als auch beim Upload in der Mediathek erzeugt werden:
|
||||
|
||||
```bash
|
||||
# Prüfen (User ggf. anpassen: www-data, nginx, apache …)
|
||||
sudo -u www-data which ffmpeg
|
||||
sudo -u www-data ffmpeg -version
|
||||
```
|
||||
|
||||
Wenn `which ffmpeg` für den Webserver-User leer ist, `ffmpeg` systemweit installieren oder sicherstellen, dass `/usr/bin` im PATH von PHP-FPM liegt. Der Code ruft `ffmpeg` direkt auf – ein separater `.env`-Key ist nicht nötig.
|
||||
|
||||
### 3. Bestehende Videos: Poster nachgenerieren
|
||||
|
||||
Einmalig nach dem Deploy (oder bei Bedarf erneut mit `--force`):
|
||||
|
||||
```bash
|
||||
php artisan display-media:generate-video-thumbnails
|
||||
```
|
||||
|
||||
Thumbnails landen auf dem `public`-Disk neben der Videodatei (`…-poster.jpg`).
|
||||
|
||||
### 4. Laravel-Caches leeren
|
||||
|
||||
```bash
|
||||
php artisan route:clear # wichtig für Flux-Routen auf Portal-Domain
|
||||
php artisan config:cache
|
||||
php artisan view:clear
|
||||
```
|
||||
|
||||
> **Hinweis:** `route:cache` erst verwenden, wenn `/flux/flux.min.js` auf Live mit HTTP 200 antwortet. Siehe Abschnitt „Flux UI auf Live“.
|
||||
|
||||
### 5. Storage prüfen
|
||||
|
||||
```bash
|
||||
php artisan storage:link # nur falls noch nicht vorhanden
|
||||
```
|
||||
|
||||
Schreibrechte auf `storage/app/public/display-media/` müssen für den Webserver/PHP-User gesetzt sein (Poster-Erzeugung).
|
||||
|
||||
### 6. Umgebungsvariablen
|
||||
|
||||
In `.env` auf Live prüfen:
|
||||
|
||||
| Variable | Live-Beispiel | Hinweis |
|
||||
|---|---|---|
|
||||
| `DISPLAY_PLAYER_URL` | `https://cabinet.b2in.eu/display` | Player-URL für Admin-Vorschau und Links |
|
||||
| `DISPLAY_DOMAIN` | `b2in.eu` | Fallback in `config/display.php` |
|
||||
| `FILESYSTEM_DISK` | `public` oder S3 | Poster werden auf dem Media-Disk gespeichert |
|
||||
|
||||
Keine neuen Pflicht-ENV-Keys in diesem Release.
|
||||
|
||||
### 7. Frontend-Assets
|
||||
|
||||
Für dieses Release reichen **keine** separaten npm-Builds – Änderungen liegen in Blade-Templates, PHP und der statischen Player-HTML-Datei.
|
||||
|
||||
Falls euer Deploy-Prozess generell Assets baut:
|
||||
|
||||
```bash
|
||||
npm ci
|
||||
npm run build:admin
|
||||
```
|
||||
|
||||
### 8. Display-Player in der Praxis (Cabinet-Geräte)
|
||||
|
||||
- Die Player-Datei `public/_cabinet/display/index.html` ist **statisch** und wird mit dem Deploy ausgeliefert.
|
||||
- Geräte laden die Config alle **60 Sekunden** neu; nach Deploy spätestens innerhalb einer Minute die neue Player-Logik.
|
||||
- Zur Sicherheit: einmal **Hard-Reload** am Display-Browser oder kurz warten (Player hat zusätzlich 6h-Reload und Datei-Change-Erkennung).
|
||||
- **Cache-Control** für Preview-Routen ist auf `no-cache` gesetzt – betrifft Admin-Vorschau, nicht zwingend CDN vor `/display`.
|
||||
|
||||
### 9. Nach dem Deploy testen
|
||||
|
||||
Kurz im Admin-Portal (`portal.b2in.eu`):
|
||||
|
||||
1. **Mediathek** – Video zeigt Poster? Neues Video hochladen → Poster erscheint?
|
||||
2. **B2in-Modul** – Footer aus, Logo-Ecke unten, Claim-Position, Vorschau im iframe.
|
||||
3. **Angebote** – Slide bearbeiten, Blöcke ein/aus, Streichpreis, Logo pro Slide.
|
||||
4. **Leeres Modul** – Editor öffnen ohne Inhalte → kein Browser-Crash, kein Endlos-Reload in der Vorschau.
|
||||
5. **Browser-Konsole** – keine `fluxModal`- oder Livewire-Morph-Fehler mehr.
|
||||
6. **Flux-Assets** – `/flux/flux.min.js` → 200; Switcher und Modals reagieren normal.
|
||||
|
||||
---
|
||||
|
||||
## Rückwärtskompatibilität
|
||||
|
||||
- **Bestehende Angebots-Slides** ohne `show_*`-Flags rendern weiter wie bisher (Fallback: Block sichtbar, wenn Inhalt vorhanden).
|
||||
- **B2in-Module** mit alten Einstellungen behalten ihre Defaults (Footer an, Logo oben links).
|
||||
- **Offers Meta-Einstellungen** (Logo, Brand-Text, Footer) in alten Modul-`settings` werden ignoriert – Branding liegt jetzt pro Slide. Bestehende Slides ohne Logo-Felder nutzen weiter die Player-Defaults.
|
||||
|
||||
---
|
||||
|
||||
## Bekannte Abhängigkeiten
|
||||
|
||||
| Abhängigkeit | Zweck | Ohne |
|
||||
|---|---|---|
|
||||
| `ffmpeg` | Video-Poster | Upload ok, kein Thumbnail |
|
||||
| `public`-Storage | Medien + Poster | Upload schlägt fehl |
|
||||
| Portal-Domain | Admin + API | Editor/Vorschau |
|
||||
| Display-Domain | Player-Ausspielung | Cabinet-Geräte |
|
||||
|
||||
---
|
||||
|
||||
## Rollback
|
||||
|
||||
Bei Problemen: auf den vorherigen Git-Stand zurück (`git revert` oder Deploy des letzten Releases).
|
||||
|
||||
- Keine DB-Migration rückgängig machen nötig.
|
||||
- Bereits erzeugte Poster-Dateien können liegen bleiben (harmlos).
|
||||
- `public/flux/` nicht manuell aus altem Backup wiederherstellen – stattdessen `php artisan flux:publish-assets --force`.
|
||||
|
||||
---
|
||||
|
||||
*Stand: 29.05.2026 · Commit `6c6d683`*
|
||||
Loading…
Add table
Add a link
Reference in a new issue