Skip to content

Installation

Skila edited this page Aug 21, 2026 · 11 revisions

Installation

The one-click installer installs Docker if needed, writes /opt/sounddock, pulls the published image, and starts SoundDock. You do not need to clone the repo.

Published image: ghcr.io/skila1/sounddock:latest

Discord application (only if you want Discord sign-in)

  1. Create an app at the Discord Developer Portal.

  2. Under OAuth2 → Redirects, add:

    {PUBLIC_URL}/api/v1/auth/discord/callback

    Examples: http://127.0.0.1:8080/api/v1/auth/discord/callback or https://music.example.com/api/v1/auth/discord/callback

  3. Scope: identify. If you later whitelist a server or role in Admin, users will also grant guilds and guilds.members.read.

  4. Copy the Client ID and Client Secret.

  5. Optionally copy your Discord user ID (Developer Mode, right-click your avatar, Copy User ID) for SD_ADMIN_DISCORD_ID.

One-click

export SD_IMAGE=ghcr.io/skila1/sounddock:latest
curl -fsSL https://raw.githubusercontent.com/Skila1/SoundDock/main/install.sh | sudo bash

You will be asked for:

Prompt What to enter
Public URL The URL you will open in a browser
Host library folder Folder on the machine mounted at /libraries (default /opt/sounddock/libraries)
Enable Discord sign-in Y (default) or n to skip Discord entirely, including Discord admin
Discord client ID / secret Required only if Discord is on
Admin Discord user ID Optional snowflake(s). Applied as Administrator on every start
Native Discord bot worker Asked only if Discord is on. y to enable it (see Extras)
Cloudflare Tunnel token Paste a token, or leave blank

Master key and database password are generated for you. SD_DISCORD_ENABLED is written true or false.

First sign-in

  • Discord on: Continue with Discord. You can also use a username and password if an administrator created one.
  • Discord off: create the first administrator in the web UI, then sign in with that account.

Who may register with Discord

In Admin → Discord, two independent toggles:

  • Require Discord server (server ID)
  • Require Discord role (role ID in that server)

New Discord accounts must pass the enabled checks. Existing accounts and IDs in SD_ADMIN_DISCORD_ID can always sign in. Invite the bot to the server if you require a role.

Commands

Keep install.sh (or download it again). Default install prefix is /opt/sounddock (SD_PREFIX to change).

sudo bash install.sh status
sudo bash install.sh logs
sudo bash install.sh update
sudo bash install.sh doctor
sudo bash install.sh uninstall          # keeps /opt/sounddock/data
sudo bash install.sh uninstall --purge  # deletes data and volumes

Compose without the installer

Copy docker-compose.yml and .env.example to .env. Set SD_IMAGE=ghcr.io/skila1/sounddock:latest. For Discord, set SD_DISCORD_ENABLED=true and the client values. For local admin only, set SD_DISCORD_ENABLED=false.

docker compose pull
docker compose up -d

Run from source

PostgreSQL 16 is required. FFmpeg is optional (transcode and Discord audio).

cp .env.example .env
# set POSTGRES_PASSWORD, SD_MASTER_KEY
# optional: SD_DISCORD_ENABLED, SD_DISCORD_CLIENT_ID, SD_DISCORD_CLIENT_SECRET, SD_ADMIN_DISCORD_ID
docker compose up -d --build

Or: build the web app (cd web && npm install && npm run build), then go run ./cmd/sounddock all.

Clone this wiki locally