Spotizerr is an amazing self-hosted web service that let's you download and search for music from Deezer and Spotify.
While i do not recomend to use it, as it's against those services ToS, it seems to be working pretty well at least if you have a premium account.
Sporizerr is provided as a docker image that can be easily run with rootless podman. Due to this, it's important to properly setup credentials and storage locations.
As usual, create a dedicated user and associate it to the media group so that downloaded files will be accessible to the other media services:
useradd -d /data/daemons/spotizerr -m spotizerr -g media mkdir /data/Media/spotizerr mkdir /data/Media/spotizerr/downloads mkdir /var/log/spotizerr chown spotizerr:media /var/log/spotizerr su - spotizerr wget https://raw.githubusercontent.com/Xoconoch/spotizerr/refs/heads/main/docker-compose.yml
Now edit the default docker compose to adapt it to your needs. You can follow my docker compose:
name: spotizerr services: spotizerr: volumes: - /data/daemons/spotizerr:/app/data - /data/daemons/spotizerr/config:/app/config - /data/Media/spotizerr/downloads:/app/downloads - /var/log/spotizerr:/app/logs ports: - 7171:7171 image: cooldockerizer93/spotizerr container_name: spotizerr-app environment: # - PUID=1000 # podman rootless needs PUID=0, or removed like this # - PGID=1000 # podman rootless needs PGID=0, or removed like this - UMASK=0002 # allow all users in media group to access music downloaded by spotizerr - REDIS_HOST=redis - REDIS_PORT=6379 - REDIS_DB=0 - REDIS_URL=redis://redis:6379/0 - REDIS_BACKEND=redis://redis:6379/0 - EXPLICIT_FILTER=false # Set to true to filter out explicit content depends_on: - redis networks: - spotizerr-net redis: image: redis:alpine container_name: spotizerr-redis volumes: - redis-data:/data command: redis-server --appendonly yes networks: - spotizerr-net volumes: redis-data: driver: local networks: spotizerr-net: {}
PUID and PGID sohuld be omitted or set to 0, because i am using rootless podman and not docker. This ensure that the user running the container is actually the spotizerr user, which is what we want.
Now pull the image:
podman compose pull
Spotizerr seems to be working only on subdomain and not on subpath. I assume you have spotizerr.mydomain.com. See the F) The Reverse Proxy concept for more details.
server { server_name spotizerr.mydomain.com; listen 443 ssl; listen 8443 ssl; http2 on; access_log /var/log/nginx/spotizerr.mydomain.com_access_log main; error_log /var/log/nginx/spotizerr.mydomain.com_error_log info; include "com.mydomain/authelia_location.conf"; location / { include "com.mydomain/authelia_proxy.conf"; include "com.mydomain/authelia_authrequest.conf"; proxy_pass http://127.0.0.1:7171/; proxy_set_header Connection $http_connection; proxy_set_header Upgrade $http_upgrade; } include org.gardiol/certbot.conf; } Please note that Spotizerr does not provide **any** authentication or protection: you **must** put your SSO (see [[selfhost:sso|here]]) and HTTPS on top of it using the reverse proxy as in the above config example.
Setup Spotizerr require a few steps:
Spotify has a serious rate limiting, so i strongly suggest you also setup a Deezer account.
See this page for the specific instructions.
Note: you must enable “real time downloading” in settings to reduce API rate limiting from Spotify.
You need to setup and run librespot-auth. The instructions are quite simple and can be run anywhere, not necessarily on the server itself:
it clone --depth 1 https://github.com/dspearson/librespot-auth.git cargo build --release # Alternatively, using podman: "podman run --rm -v "$(pwd)/librespot-auth":/app -w /app rust:latest cargo build --release" ./librespot-auth/target/release/librespot-auth --name "mySpotifyAccount1" --class=computer
On Gentoo you should have cargo by default (it's part of rust) so you don't need to run a container for that.
The above command will create a file called credentials.json, similar to the following:
{"username": "my username" "auth_type": 1 "auth_data": "a long string"}
Now open Spotizerr, go to the settings (the whell icon in the lower left corner) and add the Spotify account:
At this point, go to Spotify developer console and login with your user. Create a new app, use the following data:
Save, and copy both ClientID and ClientSecret strings. You need togo to Spotizerr page and add the two strings in your Spotify account API configuration.
That's it! You can start searching and downloading stuff.
Open your browser, login to Deezer. Open the developer console (see your browser instructions… i suggest you use Firefox for this) go to the storage tab and copy the ARL cookie text string under the deezer.com domain.
Go to Spotizerr config, add a new Deezer account and paste the ARL cookie text string. You can give any name you want to the account.
To start it, and set it up on boot, as usual follow my indications Using Containers on Gentoo, so link the user-containers init script:
ln -s /etc/init.d/user-containers /etc/init.d/user-containers.spotizerr
and create the following config file:
USER=spotizerr DESCRIPTION="Spotify donwloader"
Add the service to the default runlevel and start it now:
/etc/init.d/user-containers.spotizerr start rc-update user-containers.spotizerr
Add log rotation to Spotizerr logs. Drop the following under /etc/logrotate.d:
/var/log/spotizerr/* { missingok notifempty }