How to Install (Docker) — Spotycast
This page covers the Docker deployment, then shows how to manually run the Free or Premium installer binaries shipped inside the container to stream Spotify to Roon via Liquidsoap → Icecast.
1) Deploy the Docker Compose stack Portainer Stack / Docker Manager
Important: deploying the Docker Compose stack does not install Free or Premium
(for now). It only deploys the container (GUI + required environment). You will enable Free/Premium manually in step 2 or 3.
Prerequisites
- A Linux host with Docker + Docker Compose plugin installed.
- Portainer (Stacks) or your Docker Manager UI capable of deploying a Compose file.
- Network access to the host for:
- noVNC / VNC (optional GUI management)
- Icecast (audio endpoint for Roon)
Recommended ports (example)
Keep them consistent with your current setup. Below is a common baseline (adapt as needed).
# SSH into container (optional)
2222:22
# VNC / noVNC (optional)
5901:5901
6080:6080
# Icecast HTTP
28000:8000
Docker Compose file (template)
Paste this in Portainer → Stacks → Add stack → Web editor, or in your Docker Manager “Compose / Stack” editor.
services:
spotycast:
image: chourmovs/debian13-vnc-novnc-ssh:latest
container_name: spotycast
restart: unless-stopped
ports:
- "2222:22" # SSH
- "5901:5901" # VNC
- "6080:6080" # noVNC (web)
- "28000:8000" # Icecast
environment:
# Optional non-root user
USERNAME: "debian"
USER_UID: "1000"
USER_GID: "1000"
# Credentials (CHANGE THESE)
SSH_PASSWORD: "CHANGE_ME"
VNC_PASSWORD: "CHANGE_ME"
ROOT_PASSWORD: "CHANGE_ME"
ALLOW_ROOT_SSH: "yes"
# noVNC display
VNC_GEOMETRY: "1600x900"
VNC_DEPTH: "24"
volumes:
- /etc/localtime:/etc/localtime:ro
Portainer (Stack) deployment:
- Stacks → Add stack
- Name:
spotycast - Paste the compose YAML
- Deploy the stack
CLI deployment (optional):
mkdir -p spotycast && cd spotycast
nano docker-compose.yml
docker compose up -d
docker compose ps
Open the container GUI (noVNC)
- Open:
http://<HOST>:6080/vnc.html - Log in with your noVNC password (if configured by your image)
- Launch LXTerminal (or the terminal available in your desktop session)
2) Install / Enable the Free version manual binary launch
Current behavior: the Free installer binary is already present in
/root/binaries inside the container and is executable. You just have to run it manually from LXTerminal.
Run the Free installer binary
- Open LXTerminal inside the container GUI session.
- Run:
cd /root/binaries
./spotifyd-free
What the Free installer does (high level)
- Configures the audio pipeline (Spotify playback → PulseAudio → Liquidsoap → Icecast).
- Starts the required services inside the container.
- Exposes Icecast mountpoints once streaming is active.
Quick validation
- Open Icecast:
http://<HOST>:28000 - Check mountpoints and that playback is stable.
3) Install / Enable the Premium version after purchase
Upgrade note: if you previously enabled the Free version, uninstall/disable it first to avoid conflicts
(duplicate services, ports, or overlapping configs).
Step 3.1 — Disable / uninstall Free (if installed)
Use your Free uninstall mechanism if you provide one. If you don’t yet ship it, stop the Free services before continuing.
# Run
# cd /root/binaries && ./spotifyd-free --cmd uninstall
Step 3.2 — Run the Premium installer binary
Current behavior: the Premium installer binary is already present in
/root/binaries inside the container and is executable. You run it manually from LXTerminal.
cd /root/binaries
./spotifyd-premium
Activation
- When prompted, paste your license key (format typically:
SPOT-XXXX-XXXX-XXXX). - The installer validates the key, fetches the Premium payload, and install all needed.
- Unlike free version, you will need to launch spotyfy desktop by running the command “spotycast-start-spotify” in your terminal .
- Before you go, you’ll need to login to your spotify and choice lossless quality in the settings .
Post-install checks
- Icecast UI:
http://<HOST>:28000 - Mountpoints visible and stable, audio flowing.
# Optional diagnostics inside container
tail -n 200 /var/log/spotify-roon-bridge/liquidsoap.stderr.log || true
tail -n 200 /var/log/spotify-roon-bridge/icecast2.stderr.log || true
tail -n 200 /var/log/spotify-roon-bridge/pulseaudio.stderr.log || true




