# Display Setup für Live-Server (cabinet.b2in.eu) ## Übersicht Das Display-System nutzt den Ordner `public/_cabinet/` für beide Umgebungen: - **Testserver:** `portal.b2in.test/_cabinet/` - **Live-Server:** `cabinet.b2in.eu/` (Subdomain zeigt direkt auf `public/_cabinet/`) ## Setup-Schritte für Live-Server ### 1. Dateien vorbereiten Die Dateien sind bereits im Ordner `public/_cabinet/` vorhanden: ```bash public/_cabinet/ ├── index.html # Display-Seite ├── go.php # Short-Link-Handler ├── assets/ # Video-Dateien │ ├── herbst_2025.mp4 │ ├── fruehjahr_2025.mp4 │ └── ... └── clicks.log # Tracking-Log (wird automatisch erstellt) ``` ### 2. Subdomain konfigurieren Auf dem Live-Server die Subdomain `cabinet.b2in.eu` so einrichten, dass sie direkt auf `/public/_cabinet/` zeigt. **Apache VirtualHost Beispiel:** ```apache ServerName cabinet.b2in.eu DocumentRoot /var/www/html/public/_cabinet Options Indexes FollowSymLinks AllowOverride All Require all granted # SSL Konfiguration SSLEngine on SSLCertificateFile /etc/ssl/certs/certificate.crt SSLCertificateKeyFile /etc/ssl/private/private.key # Optionale Sicherheits-Header Header always set X-Frame-Options "SAMEORIGIN" Header always set X-Content-Type-Options "nosniff" ``` **Nginx Beispiel:** ```nginx server { listen 443 ssl http2; server_name cabinet.b2in.eu; root /var/www/html/public/_cabinet; index index.html index.php; # SSL Konfiguration ssl_certificate /etc/ssl/certs/certificate.crt; ssl_certificate_key /etc/ssl/private/private.key; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers HIGH:!aNULL:!MD5; location / { try_files $uri $uri/ /index.html; } location ~ \.php$ { fastcgi_pass unix:/var/run/php/php8.2-fpm.sock; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } # Logs access_log /var/log/nginx/cabinet.b2in.eu-access.log; error_log /var/log/nginx/cabinet.b2in.eu-error.log; } ``` ### 3. Umgebungsvariablen setzen In der `.env` Datei auf dem Live-Server folgende Variablen hinzufügen/ändern: ```env # Display Configuration für Live-Server DISPLAY_BASE_PATH=_cabinet DISPLAY_SUBDOMAIN=cabinet DISPLAY_DOMAIN=b2in.eu APP_ENV=production ``` **Wichtig:** Nach dem Ändern der `.env`: ```bash php artisan config:clear php artisan cache:clear ``` ### 4. API-Zugriff sicherstellen Die API kann über zwei Wege erreichbar sein: **Option A: API über Hauptdomain (empfohlen)** - API-URL: `https://b2in.eu/api/display/config` - Display-Seite lädt von Hauptdomain **Option B: API auch auf Subdomain** ```bash cd /var/www/html/public/_cabinet ln -s ../api api ``` - API-URL: `https://cabinet.b2in.eu/api/display/config` ### 5. Videos hochladen Videos in den Cabinet-Ordner kopieren: ```bash # Lokal zum Server scp -r videos/*.mp4 user@liveserver:/var/www/html/public/_cabinet/assets/ # Im CMS hinzufügen # Admin → CMS → Cabinet → Video hinzufügen ``` ### 6. Testen 1. **Display-Seite:** `https://cabinet.b2in.eu/` 2. **API-Test:** `https://b2in.eu/api/display/config` 3. **Short-Link-Test:** `https://cabinet.b2in.eu/go.php?z=c59kjb` 4. **CMS:** Admin-Login → CMS → Cabinet 5. **QR-Code scannen** und Tracking prüfen ## Zugriffswege ### Testserver - Display: `http://portal.b2in.test/_cabinet/` - Short-Link: `http://portal.b2in.test/_cabinet/go.php?z=abc123` - API: `http://portal.b2in.test/api/display/config` ### Live-Server - Display: `https://cabinet.b2in.eu/` - Short-Link: `https://cabinet.b2in.eu/go.php?z=abc123` - API: `https://b2in.eu/api/display/config` ## Wartung ### Videos aktualisieren 1. Neue Videos in `public/_cabinet/assets/` hochladen 2. Im CMS unter "Video-Playlist" hinzufügen 3. Display lädt automatisch neue Konfiguration (max. 5 Min.) ### Footer-Inhalte ändern 1. Im CMS unter "Footer-Inhalte" bearbeiten 2. Short-Links bleiben gleich (nur Ziel-URL ändert sich) 3. Klick-Statistiken bleiben erhalten ### Logs prüfen ```bash # Klick-Tracking tail -f /var/www/html/public/_cabinet/clicks.log # Laravel-Logs tail -f /var/www/html/storage/logs/laravel.log # Nginx-Logs tail -f /var/log/nginx/cabinet.b2in.eu-access.log ``` ## Troubleshooting ### Display zeigt "LADEN..." und lädt nicht **Ursache:** API nicht erreichbar **Lösung:** 1. Browser-Console öffnen (F12) 2. Netzwerk-Tab prüfen 3. API-URL testen: `curl https://b2in.eu/api/display/config` 4. CORS-Fehler? → API auch auf Subdomain verfügbar machen (siehe oben) ### Short-Links funktionieren nicht **Ursache:** `go.php` nicht ausführbar oder Datenbankverbindung fehlerhaft **Lösung:** ```bash # Dateiberechtigungen prüfen ls -la /var/www/html/public/_cabinet/go.php # Manuell testen curl -I https://cabinet.b2in.eu/go.php?z=c59kjb # Logs prüfen tail -f /var/www/html/public/_cabinet/clicks.log ``` ### Videos werden nicht abgespielt **Ursache:** Dateipfad falsch oder Video-Format nicht unterstützt **Lösung:** 1. Pfad prüfen: Videos müssen in `assets/` liegen 2. Format prüfen: `.mp4` mit H.264-Codec empfohlen 3. Browser-Console prüfen auf Fehler 4. Im CMS prüfen: Sind Videos aktiv? ### API gibt leere Arrays zurück **Ursache:** Keine aktiven Inhalte in der Datenbank **Lösung:** ```bash # Prüfen php artisan tinker >>> App\Models\DisplayVideo::count() >>> App\Models\DisplayFooterContent::count() # Falls leer: Seeder ausführen php artisan db:seed --class=DisplayContentSeeder ``` ## Performance-Optimierung ### Video-Komprimierung ```bash # FFmpeg für optimale Dateigröße ffmpeg -i input.mp4 -c:v libx264 -crf 23 -preset medium \ -c:a aac -b:a 128k output.mp4 ``` ### Caching Nginx-Caching für statische Assets: ```nginx location ~* \.(mp4|jpg|jpeg|png|gif|ico|css|js)$ { expires 7d; add_header Cache-Control "public, immutable"; } ``` ## Sicherheit ### SSL/TLS - SSL-Zertifikat für `cabinet.b2in.eu` installieren - Automatische Erneuerung einrichten (z.B. Certbot) ### Zugriffsbeschränkung Falls gewünscht, Display-Seite per IP einschränken: ```nginx location / { allow 1.2.3.4; # Ihre IP deny all; try_files $uri $uri/ /index.html; } ``` ## Deployment-Checkliste - [ ] `public/_cabinet/` Ordner vorhanden - [ ] Videos in `public/_cabinet/assets/` hochgeladen - [ ] Subdomain `cabinet.b2in.eu` konfiguriert - [ ] Subdomain zeigt auf `public/_cabinet/` - [ ] `.env` aktualisiert mit korrekten Werten - [ ] `php artisan config:clear` ausgeführt - [ ] SSL-Zertifikat installiert - [ ] Display-Seite getestet: `https://cabinet.b2in.eu/` - [ ] API getestet: `https://b2in.eu/api/display/config` - [ ] Short-Link getestet - [ ] QR-Code gescannt und Tracking geprüft - [ ] Logs eingerichtet und überwacht ## Support Bei Problemen: 1. **Logs prüfen:** clicks.log, laravel.log, nginx/apache logs 2. **Browser-Console:** F12 → Console & Network Tabs 3. **API manuell testen:** `curl https://b2in.eu/api/display/config` 4. **Datenbankverbindung testen:** `php artisan tinker` 5. **Cache leeren:** `php artisan config:clear && php artisan cache:clear`