Auch verfügbar in: EN English

Konfiguration

Inhalt

ITSWEBER Play wird über Umgebungsvariablen konfiguriert, Site-Name, Registrierung und SMTP liegen dagegen in der Datenbank. Im All-in-One-Container laufen Datenbank, Cache und Objektspeicher intern. Öffentliche URL, Secrets und Passwörter musst du trotzdem selbst setzen.


All-in-One-Hinweis

Im offiziellen AIO-Container (ghcr.io/itsweber-official/itsweber-play:main) laufen Postgres, Redis und MinIO intern als s6-overlay-Services. Sie müssen nicht extern bereitgestellt werden. Host und Port für Redis und MinIO fallen im Code auf localhost zurück und passen damit. DATABASE_URL und die Zugangsdaten setzt der Container nicht selbst, das Unraid-Template belegt sie vor.

Für ein funktionsfähiges Basis-Setup brauchst du diese Werte.

  • PUBLIC_URL und NEXT_PUBLIC_SITE_URL — Die öffentliche URL der Instanz
  • AUTH_SECRET — Mit openssl rand -hex 32 erzeugen
  • POSTGRES_PASSWORD und passend dazu DATABASE_URL
  • MINIO_ROOT_USER und MINIO_ROOT_PASSWORD, dazu S3_ACCESS_KEY und S3_SECRET_KEY mit denselben Werten

Umgebungsvariablen

Erforderlich

Variable Standard Beschreibung
PUBLIC_URL http://localhost:3000 Öffentliche Root-URL ohne Slash am Ende, z. B. https://play.example.com. Erlaubter Origin für CORS und Better Auth, Basis für Links in Mails.
NEXT_PUBLIC_SITE_URL — Gleicher Wert wie PUBLIC_URL, landet im JS-Bundle.
AUTH_SECRET — Ohne startet die API nicht. Erzeugen mit openssl rand -hex 32.
POSTGRES_PASSWORD — Passwort des Postgres-Benutzers play.
DATABASE_URL — Im AIO postgresql://play:<POSTGRES_PASSWORD>@127.0.0.1:5432/itsweber_play.
MINIO_ROOT_USER / MINIO_ROOT_PASSWORD — Ohne startet MinIO nicht.
S3_ACCESS_KEY / S3_SECRET_KEY — Gleiche Werte wie MINIO_ROOT_USER / MINIO_ROOT_PASSWORD.

Optional — Instanz

Variable Standard Beschreibung
INITIAL_ADMIN_EMAIL — Belegt das Admin-Feld im Einrichtungsassistenten vor, wer sich mit dieser Adresse registriert, wird Admin.
NEXT_PUBLIC_APP_NAME Play Sichtbarer Name im Header und in Meta-Tags.
MAX_UPLOAD_SIZE_MB 8192 Maximale Upload-Größe in MB (8 GB). Die API vergleicht den Content-Length-Header damit und antwortet mit 413. Im AIO-Container begrenzt der interne Nginx zusätzlich fest auf 8 GB.

Site-Name und Registrierungsmodus werden im Einrichtungsassistenten bzw. unter /admin/settings gepflegt, INSTANCE_NAME und REGISTRATION_ENABLED gibt es nicht.


Optional — Datenbank

Auch im AIO-Container Pflicht, siehe oben. Ein externes Postgres ist im AIO-Container nicht vorgesehen, das Migrationsskript wartet fest auf 127.0.0.1:5432.

Variable Standard Beschreibung
DATABASE_URL — Postgres-Verbindungsstring, im AIO postgresql://play:<POSTGRES_PASSWORD>@127.0.0.1:5432/itsweber_play

Optional — Cache

Im AIO-Container automatisch konfiguriert. Nur bei externem Redis-Einsatz setzen.

Variable Standard Beschreibung
REDIS_HOST localhost Redis-Host
REDIS_PORT 6379 Redis-Port

Optional — S3/MinIO

Endpunkt und Buckets passen im AIO-Container mit den Standardwerten. Die Zugangsdaten musst du immer setzen.

Variable Standard Beschreibung
S3_ENDPOINT http://localhost:9000 S3-Endpunkt-URL
S3_REGION us-east-1 Region
S3_ACCESS_KEY — Zugriffsschlüssel, im AIO gleich MINIO_ROOT_USER
S3_SECRET_KEY — Geheimschlüssel, im AIO gleich MINIO_ROOT_PASSWORD
S3_BUCKET_VIDEOS play-videos Bucket für HLS-Ausgaben
S3_BUCKET_THUMBS play-thumbs Bucket für Thumbnails
S3_PUBLIC_URL / NEXT_PUBLIC_S3_PUBLIC_URL /s3 (Unraid-Template) Öffentliche Basis-URL für Assets, beide Werte gleich

S3_BUCKET_RAW und S3_BUCKET_ASSETS stehen in .env.example, der Code nutzt aber fest play-raw und play-assets.


Optional — E-Mail

SMTP wird nicht über Umgebungsvariablen konfiguriert. Host, Port (Standard 587), TLS, Benutzer, Passwort und Absender trägst du im Einrichtungsassistenten oder unter /admin/settings ein, dort gibt es auch einen Verbindungstest und eine Testmail. Die Werte liegen in der Datenbank (SmtpSettings). Ohne SMTP verschickt Play keine Mails, Passwort-Reset und Mail-Benachrichtigungen funktionieren dann nicht.


Optional — Erweitert

Variable Standard Beschreibung
TRANSCODE_CONCURRENCY 2 Parallele Transcode-Jobs
IMPORT_CONCURRENCY 2 Parallele yt-dlp-Importe
TRANSCODE_EXTRA_CODECS leer av1 und/oder vp9 für zusätzliche Varianten, sehr CPU-intensiv
TRANSCODE_QUALITIES 1080p,720p,480p Steht in .env.example und im Unraid-Template, wird vom Worker derzeit nicht ausgelesen
AUTO_CAPTIONS_ENABLED 0 1 erzeugt Untertitel per whisper.cpp
RATE_LIMIT_MAX / RATE_LIMIT_WINDOW_MS 120 / 60000 Standard-Limit für begrenzte Routen

Das Log-Level setzt die API selbst (info in Produktion, sonst debug). Ein SESSION_SECRET gibt es nicht, Sessions signiert Better Auth mit AUTH_SECRET.


Beispiel: docker-compose.yml

services:
  play:
    image: ghcr.io/itsweber-official/itsweber-play:main
    container_name: itsweber-play
    ports:
      - "3000:3000"
    volumes:
      - play-data:/data
    environment:
      PUBLIC_URL: "https://play.example.com"
      NEXT_PUBLIC_SITE_URL: "https://play.example.com"
      AUTH_SECRET: "<openssl rand -hex 32>"
      POSTGRES_PASSWORD: "<openssl rand -hex 24>"
      DATABASE_URL: "postgresql://play:<POSTGRES_PASSWORD>@127.0.0.1:5432/itsweber_play"
      MINIO_ROOT_USER: "play-admin"
      MINIO_ROOT_PASSWORD: "<openssl rand -hex 24>"
      S3_ACCESS_KEY: "play-admin"
      S3_SECRET_KEY: "<gleicher Wert wie MINIO_ROOT_PASSWORD>"
      INITIAL_ADMIN_EMAIL: "admin@example.com"
      NEXT_PUBLIC_APP_NAME: "Meine Video-Plattform"
    restart: unless-stopped

volumes:
  play-data:

Produktions-Checkliste

Vor dem Go-Live empfohlene Einstellungen prüfen:

  • [ ] PUBLIC_URL und NEXT_PUBLIC_SITE_URL auf die echte HTTPS-URL gesetzt (kein http://, kein Trailing-Slash)
  • [ ] AUTH_SECRET, POSTGRES_PASSWORD, MINIO_ROOT_PASSWORD selbst erzeugt, DATABASE_URL und S3_SECRET_KEY passend dazu
  • [ ] Einrichtungsassistent unter /setup abgeschlossen
  • [ ] SMTP konfiguriert (Passwort-Reset, Benachrichtigungen)
  • [ ] Container hinter Reverse Proxy (Nginx/Traefik/Caddy) mit TLS-Terminierung
  • [ ] Datenpersistenz: Volume play-data auf zuverlässigem Host-Pfad gemountet
  • [ ] Regelmäßige Backups des Volumes eingerichtet (enthält Postgres-Daten, MinIO-Objekte und das Redis-AOF)
  • [ ] MAX_UPLOAD_SIZE_MB an verfügbaren Speicherplatz angepasst
  • [ ] Reverse Proxy client_max_body_size auf denselben oder größeren Wert gesetzt (Werte über 8 GB kappt im AIO-Container der interne Nginx)

Hinweis zu Unraid

Auf Unraid werden alle Werte über das Unraid-Template in der GUI gepflegt, der Eintrag im Community-Apps-Store ist noch nicht freigegeben. Die Template-Datei befindet sich unter docker/unraid/itsweber-play.xml. Siehe Unraid-Installation für die vollständige Anleitung.