295 lines
7.2 KiB
Markdown
295 lines
7.2 KiB
Markdown
# 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
|
|
<VirtualHost *:443>
|
|
ServerName cabinet.b2in.eu
|
|
DocumentRoot /var/www/html/public/_cabinet
|
|
|
|
<Directory /var/www/html/public/_cabinet>
|
|
Options Indexes FollowSymLinks
|
|
AllowOverride All
|
|
Require all granted
|
|
</Directory>
|
|
|
|
# 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"
|
|
</VirtualHost>
|
|
```
|
|
|
|
**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`
|