https://lavaforge.org/spotizerrphoenix/spotizerr-phoenix 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.
Timeline:
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://lavaforge.org/spotizerr/spotizerr/raw/branch/main/docker-compose.yaml
Now edit the default docker compose to adapt it to your needs. You can follow my docker compose:
name: spotizerr-phoenix
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: spotizerrphoenix/spotizerr:latest
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
If you get an error starting up Spotizerr that says Missing 'version' in data/config/main.json. Please update your configuration to 3.3.0., you need to edit your /data/daemons/spotizerr/config/main.json to add the following line:
"version": "3.3.1",
You can add it anywhere, and if the file itself is missing, just create it, but remeber it's a json file, so you will need to wrap that line between {}.
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;
http2 on;
access_log /var/log/nginx/spotizerr.mydomain.com_access_log main;
error_log /var/log/nginx/spotizerr.mydomain.com_error_log info;
location / {
proxy_pass http://127.0.0.1:7171/;
proxy_set_header Connection $http_connection;
proxy_set_header Upgrade $http_upgrade;
}
include com.mydomain/certbot.conf;
}
server {
server_name spotizerr.mydomain.com;
listen 443 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 com.mydomain/certbot.conf;
}
Please note that Spotizerr does not provide any authentication or protection: you must put your SSO (see here) and HTTPS on top of it using the reverse proxy as in the above config example. As usual, i have put SSO on external facing access and no SSO on internal one.
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
}