9.9 KiB
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:
@livewireScriptsvor@fluxScripts(behebtfluxModal-Fehler). - Stale Datei
public/flux/flux.jsentfernt – Flux wird nicht statisch auspublic/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)
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:
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
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:
vendor/livewire/livewire.min.js→ 200flux/flux.min.js→ 200 (nicht 404!)livewire.jslädt vorflux.min.js- 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
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:
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:
ffmpeg -version
# Erwartung: /usr/bin/ffmpeg
Ubuntu / Debian (Live-Server)
sudo apt update
sudo apt install -y ffmpeg
ffmpeg -version
CentOS / RHEL / AlmaLinux
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)
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:
# 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):
php artisan display-media:generate-video-thumbnails
Thumbnails landen auf dem public-Disk neben der Videodatei (…-poster.jpg).
4. Laravel-Caches leeren
php artisan route:clear # wichtig für Flux-Routen auf Portal-Domain
php artisan config:cache
php artisan view:clear
Hinweis:
route:cacheerst verwenden, wenn/flux/flux.min.jsauf Live mit HTTP 200 antwortet. Siehe Abschnitt „Flux UI auf Live“.
5. Storage prüfen
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:
npm ci
npm run build:admin
8. Display-Player in der Praxis (Cabinet-Geräte)
- Die Player-Datei
public/_cabinet/display/index.htmlist 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-cachegesetzt – betrifft Admin-Vorschau, nicht zwingend CDN vor/display.
9. Nach dem Deploy testen
Kurz im Admin-Portal (portal.b2in.eu):
- Mediathek – Video zeigt Poster? Neues Video hochladen → Poster erscheint?
- B2in-Modul – Footer aus, Logo-Ecke unten, Claim-Position, Vorschau im iframe.
- Angebote – Slide bearbeiten, Blöcke ein/aus, Streichpreis, Logo pro Slide.
- Leeres Modul – Editor öffnen ohne Inhalte → kein Browser-Crash, kein Endlos-Reload in der Vorschau.
- Browser-Konsole – keine
fluxModal- oder Livewire-Morph-Fehler mehr. - 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-
settingswerden 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 – stattdessenphp artisan flux:publish-assets --force.
Stand: 29.05.2026 · Commit 6c6d683