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_URLundNEXT_PUBLIC_SITE_URL— Die öffentliche URL der InstanzAUTH_SECRET— Mitopenssl rand -hex 32erzeugenPOSTGRES_PASSWORDund passend dazuDATABASE_URLMINIO_ROOT_USERundMINIO_ROOT_PASSWORD, dazuS3_ACCESS_KEYundS3_SECRET_KEYmit 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_URLundNEXT_PUBLIC_SITE_URLauf die echte HTTPS-URL gesetzt (keinhttp://, kein Trailing-Slash) - [ ]
AUTH_SECRET,POSTGRES_PASSWORD,MINIO_ROOT_PASSWORDselbst erzeugt,DATABASE_URLundS3_SECRET_KEYpassend dazu - [ ] Einrichtungsassistent unter
/setupabgeschlossen - [ ] SMTP konfiguriert (Passwort-Reset, Benachrichtigungen)
- [ ] Container hinter Reverse Proxy (Nginx/Traefik/Caddy) mit TLS-Terminierung
- [ ] Datenpersistenz: Volume
play-dataauf zuverlässigem Host-Pfad gemountet - [ ] Regelmäßige Backups des Volumes eingerichtet (enthält Postgres-Daten, MinIO-Objekte und das Redis-AOF)
- [ ]
MAX_UPLOAD_SIZE_MBan verfügbaren Speicherplatz angepasst - [ ] Reverse Proxy
client_max_body_sizeauf 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.