Zum Inhalt

Installation#

Diese Anleitung führt dich Schritt für Schritt von Null bis zur laufenden Stream-Seite. Plane ca. 15–20 Minuten ein.

Zwei Wege — wähle deinen

Die Schritte unten beschreiben die Webhosting-Installation per FTP (der übliche Weg, kein technisches Vorwissen nötig). Hast du stattdessen einen eigenen Server mit Docker und möchtest den nutzen? Dann geht es schneller — spring direkt zur Docker-Installation weiter unten.


Voraussetzungen#

Bevor du startest, brauchst du:

Anforderung Details
Webhosting mit PHP 8.0+ Die meisten Hoster (Hetzner, IONOS, All-Inkl, Strato …) erfüllen das. PHP-Erweiterungen curl, openssl, mbstring, json müssen aktiv sein (Standard bei fast allen).
Cron-Job-Möglichkeit Zum automatischen Aktualisieren der Streams alle 60 s. Fast jedes Hosting-Panel bietet das (cPanel, Plesk, KIS …).
HTTPS / SSL Pflicht. Bei den meisten Hostern per Let's Encrypt 1-Klick aktivierbar.
Twitch-Developer-Account Kostenlos. Liefert Client-ID + Secret für die Stream-Abfrage. → Anleitung
FTP- oder Datei-Manager-Zugang Zum Hochladen der Dateien.

Ohne HTTPS funktioniert das Admin-Panel nicht sicher

Session-Cookies werden nur über HTTPS mit dem Secure-Flag gesetzt. Aktiviere SSL vor dem ersten Login.


Schritt 1 — Dateien hochladen#

  1. Entpacke das gekaufte ZIP-Archiv lokal.
  2. Lade alle Dateien per FTP (z. B. FileZilla) oder den Datei-Manager deines Hosters in das Webroot-Verzeichnis hoch (meist htdocs/, public_html/ oder www/).

Die Struktur sieht danach so aus:

public_html/
├── index.html          ← öffentliche Stream-Seite
├── admin.php           ← Admin-Panel
├── setup.php           ← Setup-Wizard (einmalig)
├── fetch.php           ← Cron-Worker
├── site-config.php
├── proxy.php
├── twitch.php
├── default-logo.png
├── favicon.png
├── .htaccess           ← wichtig! (siehe Hinweis)
└── ...

Versteckte .htaccess nicht vergessen

Die Datei .htaccess beginnt mit einem Punkt und ist im FTP-Client oft ausgeblendet. Aktiviere „versteckte Dateien anzeigen" und lade sie mit hoch — sie schützt config.php, data.json & Co. vor direktem Zugriff aus dem Web.


Schritt 2 — Twitch-API vorbereiten#

Du brauchst eine Client-ID und ein Client-Secret von Twitch. Die komplette Anleitung mit Screenshots:

Twitch-API einrichten

Halte beide Werte bereit — du gibst sie im nächsten Schritt in den Wizard ein.


Schritt 3 — Setup-Wizard#

Rufe im Browser auf:

https://deine-domain.de/setup.php

Der Wizard führt dich durch 5 Schritte:

Prüft automatisch PHP-Version, Erweiterungen und Schreibrechte. Alles grün? → Weiter.

Schreibrechte

Falls ein Punkt rot ist: das Verzeichnis braucht Schreibrechte (CHMOD 755 für Ordner, 644 für Dateien — bei den meisten Hostern Standard).

Trage Client-ID und Client-Secret ein. Der Wizard holt damit automatisch ein App-Token und macht einen Live-Test gegen die Twitch-API. Erfolg = grünes Häkchen.

Übersicht der Einstellungen. Hier wird der Verschlüsselungs-Key generiert, mit dem Webhooks und 2FA-Secrets gesichert werden.

Lege dein erstes Admin-Konto an:

  • Benutzername: 3–32 Zeichen (A–Z, 0–9, _, -)
  • Passwort: mindestens 12 Zeichen (16+ mit Sonderzeichen empfohlen)

Dieses Konto hat vollen Zugriff. 2FA kannst du direkt nach dem Login aktivieren.

Der Wizard sperrt sich selbst (.setup_complete) und kann nicht erneut missbraucht werden. Du wirst zum Admin-Panel weitergeleitet.

Sicherheits-Gate

Der Wizard erzeugt beim ersten Aufruf einen einmaligen Token und ist nach Abschluss gesperrt. So kann niemand nach dir ein zweites Admin-Konto anlegen.


Schritt 4 — Cron-Job einrichten#

Damit die Stream-Liste sich automatisch aktualisiert, muss fetch.php regelmäßig laufen (empfohlen: jede Minute).

Docker-Installation? Diesen Schritt überspringen

Bei der Docker-Installation läuft fetch.php bereits automatisch über einen eigenen worker-Container — hier ist nichts weiter zu tun.

Variante A — über das Hosting-Panel (cPanel/Plesk)#

Lege einen neuen Cron-Job an, der jede Minute Folgendes ausführt:

php /pfad/zu/deinem/webroot/fetch.php

Den exakten Pfad zeigt dir dein Hoster (oft /home/USER/public_html/). Als Intervall „jede Minute" bzw. * * * * * wählen.

Variante B — klassischer crontab (eigener Server / VPS)#

crontab -e

Zeile hinzufügen:

* * * * * php /var/www/html/fetch.php >> /tmp/streamer_fetch.log 2>&1

Erster Lauf

Nach dem ersten Cron-Lauf (max. 60 s) erscheinen die Streams auf der öffentlichen Seite. Vorher zeigt sie „niemand live" — das ist normal.

Test ohne Warten#

Du kannst fetch.php einmalig manuell über SSH anstoßen:

php /var/www/html/fetch.php
# Ausgabe: OK: 12/87 Streams gecacht (1 Seiten)

Schritt 5 — Erste Konfiguration#

Logge dich in https://deine-domain.de/admin.php ein und richte ein:

  1. Branding — Community-Name, Logo, Favicon
  2. Twitch-Filter — Kategorie(n) + Sprache wählen
  3. Stream-Präfixe — das Tag, das deine Streamer im Titel tragen (leer lassen = alle Streams der Kategorie)
  4. Community-Links — Discord, YouTube, Twitch, Shop …
  5. Design — Farben & Verläufe nach Wunsch

Jedes Feld hat ein ℹ️-Symbol mit Erklärung, was rein muss und wo es auf der öffentlichen Seite erscheint.

Vollständige Konfigurations-Referenz


Manuelle Installation (ohne Wizard)#

Falls du den Wizard überspringen willst (z. B. für automatisierte Deployments):

  1. Lege eine config.php im Webroot an:

    config.php
    <?php
    return [
        'twitch_client_id' => 'DEINE_CLIENT_ID',
        'twitch_app_token' => 'DEIN_APP_TOKEN',
        'aes_key_b64'      => base64_encode(random_bytes(32)), // einmal generieren, dann fest
    ];
    
  2. Lege users.json mit deinem Admin an (Passwort-Hash via password_hash('deinpw', PASSWORD_DEFAULT)).

  3. Erstelle eine leere .setup_complete-Datei, um den Wizard zu sperren.
  4. Cron wie oben einrichten.

Empfohlen bleibt der Wizard

Er generiert Key, Token und Hash korrekt und macht den Twitch-Live-Test — weniger Fehlerquellen.


Docker-Installation#

Alternative zum Webhosting-Upload: läuft auf jedem Server mit Docker (VPS, Root-Server, Cloud-Instanz). Kein Webhosting-Paket nötig, kein manueller Cron-Job.

Voraussetzungen#

Was Details
Ein Server mit Docker VPS reicht (z. B. Hetzner, Contabo, DigitalOcean, Hostinger). Docker installieren — viele Hoster bieten fertige „Docker"-Server-Images beim Bestellen an.
Eine Domain Ein A-Record deiner Domain zeigt auf die IPv4-Adresse dieses Servers.
Port 80 + 443 frei Es darf noch kein anderer Webserver/Proxy auf diesem Server laufen.

Schnellstart#

Das Standard-Setup bringt seinen eigenen Reverse-Proxy mit und holt sich automatisch ein kostenloses SSL-Zertifikat (Let's Encrypt) — du musst vorher nichts weiter einrichten.

auf dem Server, im entpackten Projektordner
cp .env.example .env
nano .env          # STREAM_DOMAIN + STREAM_ACME_EMAIL eintragen
docker compose -f docker-compose.standalone.yml up -d --build

Nach ca. 30–60 Sekunden (Traefik holt das Zertifikat) öffne:

https://deine-domain.de/setup.php

...und folge dem Setup-Wizard — identisch zur Webhosting-Installation. Den Cron-Schritt kannst du überspringen: der worker-Container führt fetch.php bereits automatisch alle 60 Sekunden aus.

Fertig konfigurieren

Weiter geht's genau wie oben beschrieben: Erste Konfiguration im Admin-Panel — Branding, Twitch-Filter, Präfixe, Links, Design.

Läuft bei dir schon ein Reverse-Proxy?#

Hast du bereits einen eigenen Traefik laufen und willst keinen zweiten Prozess auf Port 80/443? Nutze stattdessen die normale docker-compose.yml und trage dein bestehendes Docker-Netzwerk sowie deinen Cert-Resolver-Namen in die Labels ein. Details dazu stehen direkt im Kopf-Kommentar der Datei sowie in docker/README.md im Paket.

Update auf eine neue Version#

git pull   # oder: neue Dateien aus dem Update-Paket hochladen
docker compose -f docker-compose.standalone.yml up -d --build --force-recreate

Troubleshooting#

Zertifikat kommt nicht / Seite zeigt „Nicht sicher": Prüfe, ob der DNS-A-Record wirklich auf die richtige Server-IP zeigt und Port 80 und 443 von außen erreichbar sind (Firewall prüfen). Danach docker compose -f docker-compose.standalone.yml logs -f traefik — dort steht der genaue Fehler.

„port is already allocated": Ein anderer Webserver/Proxy belegt Port 80/443 bereits — siehe „Läuft bei dir schon ein Reverse-Proxy?" oben.


Geschafft ✅#

Deine Stream-Seite läuft. Weiter mit: