Configuration
Inhalt
ITSWEBER Play is configured via environment variables, while site name, registration and SMTP live in the database. In the all-in-one container, database, cache and object storage run internally. You still have to set the public URL, secrets and passwords yourself.
All-in-One Quick Note
In the AIO container (ghcr.io/itsweber-official/itsweber-play:main), Postgres, Redis, and MinIO all run internally. Host and port for Redis and MinIO fall back to localhost in the code and therefore fit. DATABASE_URL and the credentials are not set by the container itself, the Unraid template pre-fills them.
Minimum required configuration:
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=<same value as MINIO_ROOT_PASSWORD>
INITIAL_ADMIN_EMAIL is optional.
Environment Variables
Required
| Variable | Required | Default | Description |
|---|---|---|---|
PUBLIC_URL |
Yes | http://localhost:3000 |
Public root URL including scheme and no trailing slash. Example: https://play.example.com. Allowed origin for CORS and Better Auth, base for links in mails. |
NEXT_PUBLIC_SITE_URL |
Yes | — | Same value as PUBLIC_URL, baked into the JS bundle. |
AUTH_SECRET |
Yes | — | The API does not start without it. Generate with openssl rand -hex 32. |
POSTGRES_PASSWORD |
Yes | — | Password of the Postgres user play. |
DATABASE_URL |
Yes | — | In the AIO container postgresql://play:<POSTGRES_PASSWORD>@127.0.0.1:5432/itsweber_play. |
MINIO_ROOT_USER / MINIO_ROOT_PASSWORD |
Yes | — | MinIO does not start without them. |
S3_ACCESS_KEY / S3_SECRET_KEY |
Yes | — | Same values as MINIO_ROOT_USER / MINIO_ROOT_PASSWORD. |
INITIAL_ADMIN_EMAIL |
No | — | Pre-fills the wizard's admin field, whoever signs up with this address becomes Admin. Checked on every sign-up. |
Optional — Instance
| Variable | Required | Default | Description |
|---|---|---|---|
NEXT_PUBLIC_APP_NAME |
No | Play |
Visible name in the header and meta tags |
MAX_UPLOAD_SIZE_MB |
No | 8192 |
Maximum upload size in MB (8 GB). The API compares the Content-Length header against it and answers 413. It does not change Nginx, the internal Nginx of the AIO container is fixed at 8 GB. |
Site name and registration mode are managed in the first-run wizard and under /admin/settings, INSTANCE_NAME and REGISTRATION_ENABLED do not exist.
Optional — Database
DATABASE_URL is required in the all-in-one container as well, see above. An external Postgres is not intended there, the migration script waits for 127.0.0.1:5432. Redis defaults to localhost and fits the AIO container.
| Variable | Required | Default | Description |
|---|---|---|---|
DATABASE_URL |
Yes | — | Postgres connection string. In the AIO container postgresql://play:<POSTGRES_PASSWORD>@127.0.0.1:5432/itsweber_play |
REDIS_HOST |
No | localhost |
Redis host |
REDIS_PORT |
No | 6379 |
Redis port |
Optional — S3 / MinIO
Endpoint and buckets fit the all-in-one container with their defaults. The credentials always have to be set.
| Variable | Required | Default | Description |
|---|---|---|---|
S3_ENDPOINT |
No | http://localhost:9000 |
S3 endpoint URL |
S3_REGION |
No | us-east-1 |
Region |
S3_ACCESS_KEY |
Yes | — | Access key, in the AIO container equal to MINIO_ROOT_USER |
S3_SECRET_KEY |
Yes | — | Secret key, in the AIO container equal to MINIO_ROOT_PASSWORD |
S3_BUCKET_VIDEOS |
No | play-videos |
Bucket for HLS output |
S3_BUCKET_THUMBS |
No | play-thumbs |
Bucket for thumbnails |
S3_PUBLIC_URL / NEXT_PUBLIC_S3_PUBLIC_URL |
No | /s3 (Unraid template) |
Public base URL for assets, both values identical |
S3_BUCKET_RAW and S3_BUCKET_ASSETS appear in .env.example, but the code uses the fixed names play-raw and play-assets. There is no bucket prefix variable.
Optional — Email (SMTP)
Email is optional and is not configured via environment variables. Host, port (default 587), TLS, user, password and sender are entered in the first-run wizard or under /admin/settings, which also offers a connection test and a test mail. The values live in the database (SmtpSettings). Without SMTP, no mails are sent (welcome, verification, password reset).
Optional — Branding
| Variable | Required | Default | Description |
|---|---|---|---|
NEXT_PUBLIC_APP_NAME |
No | Play |
Name exposed to the Next.js frontend (header, meta tags) |
NEXT_PUBLIC_VENDOR_NAME / NEXT_PUBLIC_VENDOR_URL |
No | — | Optional operator name and link in the footer |
NEXT_PUBLIC_API_URL |
No | /api (Unraid template) |
Public API URL. Leave relative when everything runs through port 3000 |
Production Checklist
Before going live, verify the following:
PUBLIC_URLandNEXT_PUBLIC_SITE_URLare set to the exact public URL (includinghttps://) — wrong values break CORS and authAUTH_SECRET,POSTGRES_PASSWORDandMINIO_ROOT_PASSWORDare generated,DATABASE_URLandS3_SECRET_KEYmatch them- The first-run wizard at
/setuphas been completed - A persistent data volume is mounted at
/data— without a named volume or bind mount, data is lost when the container is recreated - Port 3000 is accessible or proxied (Unraid: set Network Type to
bridge, map Host Port 3000) - If using a reverse proxy (Nginx, Traefik, Caddy): proxy to port 3000, set
proxy_set_header X-Forwarded-Proto https - SMTP is configured if you want password-reset emails
MAX_UPLOAD_SIZE_MBis set to at least as large as your intended max video file size (values above 8192 are capped by the internal Nginx in the AIO container)- Review the legal pages at
/impressum,/datenschutz, and/agb— fill them in at/admin/pages
Example docker-compose (Non-Unraid)
services:
play:
image: ghcr.io/itsweber-official/itsweber-play:main
container_name: itsweber-play
restart: unless-stopped
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: "<same value as MINIO_ROOT_PASSWORD>"
INITIAL_ADMIN_EMAIL: admin@example.com
NEXT_PUBLIC_APP_NAME: My Video Platform
MAX_UPLOAD_SIZE_MB: 8192
volumes:
play-data: