All apps · 0 apps
KaraokeDock
Docker app from haggardj2-karaokedock's Repository
Overview
Readme
View on GitHubKaraokeDock on Unraid
This guide covers installing KaraokeDock on Unraid from Community Applications, setting up PostgreSQL, and connecting the app container to the database.
What you need
- Unraid with Community Applications installed
- A PostgreSQL container
- A share or folder for karaoke tracks
- Optional folders for downloaded tracks and break music
- Persistent writable folders for downloads, uploaded player images, and exported playlists
Recommended shares and folders
Create a share such as karaoke, then create these folders:
/mnt/user/karaoke/Karaoke Tracks
/mnt/user/karaoke/downloads
/mnt/user/karaoke/Break Music
/mnt/user/appdata/postgresql
/mnt/user/appdata/karaokedock/images
/mnt/user/appdata/karaokedock/playlists
Recommended use:
| Host path | Container path | Access | Purpose |
|---|---|---|---|
/mnt/user/karaoke/Karaoke Tracks |
/media/karaoke |
Read-only | Local karaoke library |
/mnt/user/karaoke/downloads |
/media/downloads |
Read/write | Downloaded/imported tracks |
/mnt/user/karaoke/Break Music |
/media/breakmusic |
Read-only | Break music |
/mnt/user/appdata/karaokedock/images |
/media/images |
Read/write | Uploaded player backgrounds |
/mnt/user/appdata/karaokedock/playlists |
/media/playlists |
Read/write | Break-music M3U exports |
Singer profiles, login links, queue/history, settings, and saved playlist definitions are stored in PostgreSQL. Back up the database as well as writable media folders before upgrading. The application runs database migrations on startup.
Install PostgreSQL
- Open Apps in Unraid.
- Search for a PostgreSQL container, such as
postgres,postgresql, orpostgresql_alpine. - Install it with a persistent appdata path.
Use values like:
| Setting | Example |
|---|---|
| Container name | postgresql_alpine |
| Host port | 5432 |
| Container port | 5432 |
| Data path | /mnt/user/appdata/postgresql |
| Database | karaoke |
| User | karaoke |
| Password | Choose a strong password |
For many PostgreSQL templates, the environment variables are:
POSTGRES_DB=karaoke
POSTGRES_USER=karaoke
POSTGRES_PASSWORD=your_strong_password
Start the PostgreSQL container and confirm it stays running before installing KaraokeDock.
Database networking options
Use one of these connection methods.
Option A: Connect by Unraid server IP
This works with normal bridge networking as long as the PostgreSQL port is published on the host.
Example:
DB_HOST=192.168.1.50
DB_PORT=5432
Replace 192.168.1.50 with your Unraid server IP.
Option B: Connect by PostgreSQL container name
Use this if KaraokeDock and PostgreSQL are on the same user-defined Docker network and container DNS is available.
Example:
DB_HOST=postgresql_alpine
DB_PORT=5432
The template leaves DB_HOST blank deliberately: choose the correct address for your network. The default bridge network does not provide container-name DNS. Select the shared user-defined network for both containers in Unraid; if your setup uses Extra Parameters, use --network=NETWORK_NAME. Verify the running containers' network membership rather than assuming a container name will resolve.
Install KaraokeDock from Community Applications
- Open Apps in Unraid.
- Search for KaraokeDock.
- Install the app.
- Fill in the required paths and variables.
The container image is:
haggardj2/karaokedock:latest
KaraokeDock template settings
Required port
| Setting | Value |
|---|---|
| WebUI Port | 5173 |
The Web UI opens at:
http://UNRAID_IP:5173/admin
Storage paths
| Template field | Container path | Example host path |
|---|---|---|
| Karaoke Tracks | /media/karaoke |
/mnt/user/karaoke/Karaoke Tracks |
| Downloads | /media/downloads |
/mnt/user/karaoke/downloads |
| Break Music | /media/breakmusic |
/mnt/user/karaoke/Break Music |
| Uploaded Images | /media/images |
/mnt/user/appdata/karaokedock/images |
| Exported Playlists | /media/playlists |
/mnt/user/appdata/karaokedock/playlists |
Break Music is optional. The other mappings are required by the template. Existing installations should add the image and playlist mappings explicitly when updating their saved Unraid template. If Admin overrides either internal directory, map that directory too.
Required database variables
| Template field | Variable | Example |
|---|---|---|
| Database Host | DB_HOST |
192.168.1.50 or postgresql_alpine |
| Database Port | DB_PORT |
5432 |
| Database Name | DB_NAME |
karaoke |
| Database User | DB_USER |
karaoke |
| Database Password | DB_PASSWORD |
Your PostgreSQL password |
Web URL and origins
Set these to the URL users will actually open.
For LAN-only access:
WEB_APP_URL=http://192.168.1.50:5173
ORIGIN=http://192.168.1.50:5173,http://localhost:5173,http://127.0.0.1:5173
TRUST_PROXY=false
If using a reverse proxy:
WEB_APP_URL=https://karaoke.example.com
ORIGIN=https://karaoke.example.com,http://192.168.1.50:5173
TRUST_PROXY=1
ORIGIN is comma-separated. Include every browser URL that will access the app so HTTP requests and WebSockets work correctly.
The template leaves WEB_APP_URL and ORIGIN blank so you supply real browser-facing origins instead of accidentally using localhost. Do not add /admin, /host, or other paths. Google/Facebook sign-in and installation of the Host PWA require trusted HTTPS (except localhost for development).
TRUST_PROXY defaults to false for direct access. Behind a reverse proxy, use the trusted proxy IP/CIDR or the correct hop count for your deployment; 1 assumes one trusted proxy hop. Ensure the proxy forwards WebSockets and prevent clients from bypassing it when relying on forwarded headers.
Optional performance setting
MEDIA_PROBE_CONCURRENCY controls how many media files are probed at once during scanning.
Suggested values:
| Server CPU | Suggested value |
|---|---|
| 4-core | 8 to 12 |
| 6-core | 12 to 16 |
| 8+ cores | 16 to 24 |
Leave it blank to let KaraokeDock auto-pick a value.
The advanced Media Scan Interval (ms) setting defaults to 900000 (15 minutes). Enable periodic media library scan in Admin separately; changing the interval alone does not enable scanning. The first enabled pass reconciles the library, and subsequent passes scan changed folders. Failed scans remain pending for retry.
First startup
- Start PostgreSQL.
- Start KaraokeDock.
- Initial password is randomly generated. Check logs within the KaraokeDock container for the password.
- Open:
http://UNRAID_IP:5173/admin
- Add
/media/karaokeas a local library in Admin, and/media/breakmusicas a break-music folder if used. Use container paths, not Unraid host paths. - Run a library scan from the Admin page.
- Open the Host page:
http://UNRAID_IP:5173/host
- Open the Player page on the display machine:
http://UNRAID_IP:5173/player
Guests use:
http://UNRAID_IP:5173/
Project and support
PostgreSQL connection troubleshooting
KaraokeDock cannot connect to PostgreSQL
Check:
- PostgreSQL container is running.
DB_HOSTis correct.DB_PORTmatches the published PostgreSQL host port when using the Unraid IP, or the internal service port when using container-name DNS.DB_NAME,DB_USER, andDB_PASSWORDmatch the PostgreSQL container settings.- If using a container name for
DB_HOST, both containers are on the same user-defined Docker network.
If unsure, use the Unraid server IP for DB_HOST.
Database authentication failed
The password in KaraokeDock must match the PostgreSQL user's password. If you change POSTGRES_PASSWORD after the database has already initialized, many PostgreSQL containers do not automatically update the existing database user's password. Update the password inside PostgreSQL or recreate the database appdata if you are starting over.
Web page loads but queue updates do not
Check ORIGIN. It must include the exact URL used in the browser, including protocol and port.
Examples:
http://192.168.1.50:5173
https://karaoke.example.com
Media scan finds no files
Check:
- The host path points to the correct Unraid share/folder.
- The Karaoke Tracks path is mounted to
/media/karaoke. - The files are in supported karaoke formats.
- The path is readable by the container.
Forgot Login
Open a console to your Unraid server
# Run password reset helper:
docker exec -it KaraokeDock npm run reset-credentials
# Defaults to username "admin" and generates a secure password if --password is omitted.
docker exec -it KaraokeDock npm run reset-credentials -- --password supersecret
# Or set a specific username/password:
docker exec -it KaraokeDock npm run reset-credentials -- --username admin --password supersecret
Categories
Download Statistics
Related apps
Explore more like this
Explore allDetails
haggardj2/karaokedock:latestRuntime arguments
- Web UI
http://[IP]:[PORT:5173]/admin- Network
bridge- Shell
bash- Privileged
- false
Template configuration
Host port for the web interface, API, and WebSocket connections. Only one app port is needed.
- Target
- 5173
- Default
- 5173
- Value
- 5173
Karaoke media, mounted read-only. Add /media/karaoke as a library in Admin. Supports MP4, ZIP CDG+MP3, and loose CDG+MP3 pairs.
- Target
- /media/karaoke
- Default
- /mnt/user/karaoke/Karaoke Tracks
Persistent writable folder for downloaded/imported tracks. Must be writable by the container.
- Target
- /media/downloads
- Default
- /mnt/user/karaoke/downloads
Optional break music, mounted read-only. Add /media/breakmusic as a break-music folder in Admin.
- Target
- /media/breakmusic
- Default
- /mnt/user/karaoke/Break Music
Persistent writable storage for uploaded player background images. Keep this mapping when recreating or upgrading the container.
- Target
- /media/images
- Default
- /mnt/user/appdata/karaokedock/images
Persistent writable storage for break-music M3U exports. Saved playlist definitions and ordering remain in PostgreSQL.
- Target
- /media/playlists
- Default
- /mnt/user/appdata/karaokedock/playlists
Required: Unraid server IP on default bridge networking, or PostgreSQL container name only when both containers share a user-defined Docker network.
- Target
- DB_HOST
Use PostgreSQL's published host port when DB_HOST is the Unraid IP. Use its internal service port (usually 5432) when connecting by container name.
- Target
- DB_PORT
- Default
- 5432
- Value
- 5432
Existing PostgreSQL database. Startup applies schema migrations; the database user must be allowed to create tables and required extensions.
- Target
- DB_NAME
- Default
- karaoke
- Value
- karaoke
PostgreSQL login for the KaraokeDock database.
- Target
- DB_USER
- Default
- karaoke
- Value
- karaoke
Required: password for the PostgreSQL user. Enter the actual password, not a URL-encoded value.
- Target
- DB_PASSWORD
Required: browser-facing origin, e.g. http://192.168.1.50:5173 or https://karaoke.example.com. No /host or /admin suffix. Use trusted HTTPS for social sign-in and PWA installation.
- Target
- WEB_APP_URL
Required: exact browser origins separated by commas, including scheme and port. Include WEB_APP_URL and any LAN URL used. Do not use paths or a wildcard.
- Target
- ORIGIN
Optional parallel metadata probes. Blank selects automatically based on CPU count (10-24). Suggested: 4 cores 8-12, 6 cores 12-16, 8+ cores 16-24. Lower if CPU or storage is overloaded.
- Target
- MEDIA_PROBE_CONCURRENCY
Delay between periodic media-library scans in milliseconds; 900000 is 15 minutes. Enable periodic media scanning in Admin separately. Must be a positive integer.
- Target
- BACKGROUND_MEDIA_SCAN_INTERVAL_MS
- Default
- 900000
- Value
- 900000
Root media path inside the container. Keep /media with the supplied path mappings.
- Target
- MEDIA_ROOT
- Default
- /media
- Value
- /media
Internal upload directory; must match the writable Uploaded Images mapping.
- Target
- IMAGE_UPLOADS_DIR
- Default
- /media/images
- Value
- /media/images
Default internal M3U export directory. If overridden in Admin, that folder must also have a persistent writable mapping.
- Target
- BREAK_MUSIC_PLAYLISTS_FOLDER
- Default
- /media/playlists
- Value
- /media/playlists
Use false for direct LAN access. For a reverse proxy, configure trusted proxy IPs/CIDRs or the correct hop count (often 1). Restrict direct access when trusting forwarded headers.
- Target
- TRUST_PROXY
- Default
- false
- Value
- false