Troubleshooting
Inhalt
Common issues and how to resolve them. Start with the container logs in all cases:
docker logs itsweber-play
Container won't start
Symptom: Container exits immediately or stays in a restart loop.
Common causes and fixes:
-
Port 3000 already in use — Another process or container is bound to port 3000.
# Find what's using port 3000 lsof -i :3000 # macOS / Linux netstat -ano | findstr :3000 # WindowsEither stop the conflicting process or map ITSWEBER Play to a different host port (e.g.
-p 8080:3000). -
Data volume permission error — The
/datadirectory inside the container is not writable. Check that the volume or bind-mount path is writable.init-dirsruns as root and hands/data/postgresto thepostgresuser. -
Missing required env vars —
AUTH_SECRET,DATABASE_URL,MINIO_ROOT_USER/MINIO_ROOT_PASSWORDorS3_ACCESS_KEY/S3_SECRET_KEYnot set. Typical log lines areAUTH_SECRET fehltorMINIO_ROOT_PASSWORD fehlt.
First-run wizard not appearing
Symptom: Navigating to the instance shows the normal interface instead of the setup wizard.
Causes:
-
Wizard already completed — The wizard was already finished on this volume (
SiteSettings.setupCompleted). After that,/setupredirects to the home page. To reset: stop the container, delete or replace the volume, and restart. -
API not reachable yet — Right after start the middleware cannot fetch
setup.statusfrom the API and shows the normal page instead of redirecting. Wait a few seconds and open/setupdirectly.
Videos stuck in processing
Symptom: A video stays in PENDING or PROCESSING status and never becomes LIVE.
Fix:
docker logs itsweber-play | grep worker
docker logs itsweber-play | grep -i "transcode\|ffmpeg\|probe"
Common causes:
- FFmpeg crashed — Source file may be corrupted or in an unsupported container format. Check for
ffmpeg: errorlines in the output. - Disk full — The worker has no space to write HLS segments. See Out of disk space.
- Worker process died — If the s6 supervisor didn't restart it, restart the container. BullMQ jobs are persistent and will resume.
There is no admin function to re-queue a job, and there is no uploading status. Failed videos end up as FAILED with the error text in failureReason.
Upload fails immediately
Symptom: The upload progress bar appears but the upload fails within seconds, often with a 413 error.
Cause: The file size exceeds the configured limit.
Fix:
- Check the current limit:
docker inspect itsweber-play | grep MAX_UPLOAD_SIZE_MB - The default is
8192(8 GB). Lower values take effect directly, higher values are capped by the internal Nginx of the AIO container, which is fixed atclient_max_body_size 8g. - Restart the container so the API reads the new value. Nginx is not reconfigured from it.
If you are running ITSWEBER Play behind an additional reverse proxy (Traefik, Caddy, external Nginx), that proxy's own body size limit may also need to be raised.
Can't log in after fresh install
Symptom: You registered an account but cannot access admin, or get a 403 after login.
Cause: The account was not auto-promoted to Admin because INITIAL_ADMIN_EMAIL was not set, or the registered email does not exactly match the value (check for typos, trailing spaces).
Fix:
- Verify the env var is set correctly:
docker inspect itsweber-play | grep INITIAL_ADMIN_EMAIL - If the var is correct but the account was already created before it was set, promote manually via Prisma Studio or a direct DB query:
UPDATE "User" SET role = 'ADMIN' WHERE email = 'you@example.com';
Theme changes not appearing
Symptom: You saved a theme change in the admin panel but the site still shows the old colors.
Causes and fixes:
- Browser cache — The most common cause. Hard refresh:
Ctrl + Shift + R(Windows/Linux) orCmd + Shift + R(macOS). Or open DevTools → Network → check "Disable cache", then reload. - Event stream not connected — Live updates use Server-Sent Events on
/api/theme/events. If the connection dropped or a reverse proxy buffers the stream, reload the page to re-establish it and re-fetch the current theme. - Custom CSS rejected or broken — Saves containing forbidden constructs (
@import,expression(),</style>and others) are rejected with an error. There is no syntax check, so broken CSS is saved and simply has no effect.
Video playback issues
Symptom: Videos don't play, or play on the instance but not when shared — HLS errors in the browser console.
Common causes:
-
S3 URL is wrong — The player loads HLS from
NEXT_PUBLIC_S3_PUBLIC_URL/S3_PUBLIC_URL(in the browser from<origin>/s3). If these point to an unreachable host, the segment requests fail. Fix: in the all-in-one container keep both values at/s3, setPUBLIC_URLto the exact public URL (e.g.https://play.example.com), then restart the container. -
HLS CORS errors — The repo contains no MinIO CORS configuration. In the all-in-one container the browser loads everything same-origin via
/s3/, so CORS only matters if MinIO is served under its own domain. -
No signed URLs — HLS files are served unsigned from the public-read bucket
play-videos, so expiring URLs are not a cause.
Admin promoted wrong user
Symptom: You accidentally gave Admin or Moderator role to the wrong account.
Fix via admin panel:
- Go to
/admin/users - Find the user by email
- Click their role badge and select Viewer (or the correct role) to demote them
Fix via Prisma Studio (if locked out of admin):
docker exec -it itsweber-play psql -U play -d itsweber_play -c "SELECT email, role FROM \"User\";"
Prisma Studio inside the container is not reachable from outside (port 5555 is not published), so use psql and change the role field with the SQL below.
Fix via direct SQL:
UPDATE "User" SET role = 'VIEWER' WHERE email = 'wrong@example.com';
Out of disk space
Symptom: Uploads fail, transcoding stops mid-way, or the container crashes with I/O errors.
Check current usage:
docker exec itsweber-play df -h /data
docker exec itsweber-play du -sh /data/minio/*
Free up space:
- Delete unused source files in
play-raw/(original uploads are retained post-transcode; trim no longer works for that video afterwards) - Deleting videos in the admin panel only removes the DB record, the MinIO objects stay and have to be cleaned up separately
- Archive old HLS segments to external storage
To change the data directory location on Unraid, edit the container's Volume mapping in the Docker tab and point it to a larger share.
Database migration errors
Symptom: Container logs show Migration failed or the API fails to start with a Prisma error.
Check migration status:
docker exec itsweber-play sh -c "cd /app/packages/db && pnpm exec prisma migrate status --schema prisma/schema.prisma"
Common fixes:
-
Pending migrations — If you updated the container image and the DB is behind: the container's init sequence runs
prisma migrate deployautomatically on start. If it failed, check the logs for the specific SQL error. -
Drift detected — If the database schema differs from the migration history (e.g. from a manual SQL change): resolve the drift before applying new migrations. Do not use
prisma migrate resetin production — it deletes all data. -
Manual reset (development only):
# WARNING: destroys all data in the database docker exec itsweber-play sh -c "cd /app/packages/db && pnpm exec prisma migrate reset --force --schema prisma/schema.prisma"
If you are unsure, take a database backup before attempting any migration recovery steps:
docker exec -u postgres itsweber-play pg_dump -Fc itsweber_play > backup-$(date +%F).dump
Still stuck?
- Check the full logs:
docker logs itsweber-play 2>&1 | tail -200 - Open an issue on GitHub: github.com/ITSWEBER-OFFICIAL/itsweber-play/issues