Auch verfügbar in: DE Deutsch

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_URL and NEXT_PUBLIC_SITE_URL are set to the exact public URL (including https://) — wrong values break CORS and auth
  • AUTH_SECRET, POSTGRES_PASSWORD and MINIO_ROOT_PASSWORD are generated, DATABASE_URL and S3_SECRET_KEY match them
  • The first-run wizard at /setup has 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_MB is 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: