Differences
This shows you the differences between two versions of the page.
| Next revision | Previous revision | ||
| services:spotizerr [2025/03/25 07:23] – created willy | services:spotizerr [2025/10/15 06:53] (current) – [Reverse Proxy] willy | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| ====== Spotizerr ====== | ====== Spotizerr ====== | ||
| - | [[https:// | ||
| + | **UPDATE:** //As of October 2025, due to being abandoned, a few critical bugs in latest release 4 caused it to malfunction. You need to downgrade to 3.3.0 which works fine, but it's a bit less polished.// | ||
| + | |||
| + | **UPDATE:** //As of August 2025, Spotizerr GitHub account has been taken down by a DMCA request from Spotify. While this sucks, the goodness of Open Source means that Spotizerr lives along and has been moved to a new repository. I have updated all the links in this page to reflect that. If you are migrating from an existing install from GitHub, be aware that a few changes are required. Review your docker compose according to the one in this page.// | ||
| + | |||
| + | [[https:// | ||
| + | |||
| + | 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. | ||
| ===== Installation ===== | ===== Installation ===== | ||
| + | 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: | ||
| <code bash> | <code bash> | ||
| useradd -d / | useradd -d / | ||
| mkdir / | mkdir / | ||
| - | mkdir / | ||
| - | mkdir / | ||
| mkdir / | mkdir / | ||
| mkdir / | mkdir / | ||
| - | chown spotizerr: | ||
| chown spotizerr: | chown spotizerr: | ||
| su - spotizerr | su - spotizerr | ||
| - | wget https://raw.githubusercontent.com/Xoconoch/spotizerr/refs/heads/ | + | wget https://lavaforge.org/spotizerr/spotizerr/raw/branch/ |
| </ | </ | ||
| - | + | Now edit the default docker compose to adapt it to your needs. You can follow my docker compose: | |
| - | + | <file - docker-compose.yml> | |
| - | <file - docker-compose.yaml> | + | |
| name: spotizerr | name: spotizerr | ||
| - | |||
| services: | services: | ||
| spotizerr: | spotizerr: | ||
| volumes: | volumes: | ||
| - | - /data/Media/spotizerr/creds:/app/creds | + | - /data/daemons/ |
| - | - /data/Media/ | + | - /data/daemons/ |
| - / | - / | ||
| - / | - / | ||
| ports: | ports: | ||
| - 7171:7171 | - 7171:7171 | ||
| - | image: cooldockerizer93/ | + | |
| + | | ||
| container_name: | container_name: | ||
| environment: | environment: | ||
| - | # - PUID=1000 | + | # - PUID=1000 |
| - | # - PGID=1000 | + | # - PGID=1000 |
| - | - UMASK=0002 # Optional: Sets the default file permissions for newly created files within the container. | + | - UMASK=0002 |
| - REDIS_HOST=redis | - REDIS_HOST=redis | ||
| - REDIS_PORT=6379 | - REDIS_PORT=6379 | ||
| Line 67: | Line 72: | ||
| spotizerr-net: | 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 // | ||
| + | |||
| + | Now pull the image: | ||
| + | <code bash> | ||
| + | podman compose pull | ||
| + | </ | ||
| + | |||
| + | If you get an error starting up Spotizerr that says //Missing ' | ||
| + | < | ||
| + | " | ||
| + | </ | ||
| + | |||
| + | 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 {}. | ||
| + | |||
| + | ===== Reverse Proxy ===== | ||
| + | |||
| + | Spotizerr seems to be working only on subdomain and not on subpath. I assume you have **spotizerr.mydomain.com**. See the [[selfhost: | ||
| + | |||
| + | <file - spotizerr.conf> | ||
| + | server { | ||
| + | server_name spotizerr.mydomain.com; | ||
| + | listen 443 ssl; | ||
| + | http2 on; | ||
| + | |||
| + | access_log / | ||
| + | error_log / | ||
| + | |||
| + | location / { | ||
| + | proxy_pass http:// | ||
| + | proxy_set_header Connection $http_connection; | ||
| + | proxy_set_header Upgrade $http_upgrade; | ||
| + | } | ||
| + | |||
| + | include com.mydomain/ | ||
| + | } | ||
| + | |||
| + | server { | ||
| + | server_name spotizerr.mydomain.com; | ||
| + | listen 443 ssl; | ||
| + | http2 on; | ||
| + | |||
| + | access_log / | ||
| + | error_log / | ||
| + | |||
| + | include " | ||
| + | |||
| + | location / { | ||
| + | include " | ||
| + | include " | ||
| + | proxy_pass http:// | ||
| + | proxy_set_header Connection $http_connection; | ||
| + | proxy_set_header Upgrade $http_upgrade; | ||
| + | } | ||
| + | |||
| + | include com.mydomain/ | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | Please note that Spotizerr does not provide **any** authentication or protection: you **must** put your SSO (see [[selfhost: | ||
| + | |||
| + | |||
| + | ===== Configuration ===== | ||
| + | |||
| + | Setup Spotizerr require a few steps: | ||
| + | * Setup spotify login | ||
| + | * Enable spotify API | ||
| + | * Setup deezer ARL token | ||
| + | |||
| + | Spotify has a serious rate limiting, so i strongly suggest you also setup a Deezer account. | ||
| + | |||
| + | See [[https:// | ||
| + | |||
| + | **Note:** you //must// enable "real time downloading" | ||
| + | |||
| + | === Step 1: authenticate with 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: | ||
| + | <code bash> | ||
| + | it clone --depth 1 https:// | ||
| + | cargo build --release | ||
| + | # Alternatively, | ||
| + | ./ | ||
| + | </ | ||
| + | |||
| + | 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 // | ||
| + | < | ||
| + | {" | ||
| + | </ | ||
| + | |||
| + | Now open Spotizerr, go to the settings (the whell icon in the lower left corner) and add the Spotify account: | ||
| + | * name: whatever you want | ||
| + | * username: copy "my username" | ||
| + | * credentials: | ||
| + | |||
| + | === Step 2: link Spotify API === | ||
| + | |||
| + | At this point, go to [[https:// | ||
| + | * app name: something that make sense for you | ||
| + | * app description: | ||
| + | * website: not needed, leave blank | ||
| + | * redirect URI: https:// | ||
| + | * API/SDK: i checked them all, that is probably not needed YMMV | ||
| + | * i unrestand and agree: check, of course | ||
| + | |||
| + | 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. | ||
| + | |||
| + | === Step 3: setup Deezer === | ||
| + | |||
| + | 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 // | ||
| + | |||
| + | 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. | ||
| + | |||
| + | |||
| + | ===== Autostart ===== | ||
| + | |||
| + | |||
| + | To start it, and set it up on boot, as usual follow my indications [[gentoo: | ||
| + | < | ||
| + | ln -s / | ||
| + | </ | ||
| + | |||
| + | and create the following config file: | ||
| + | <file - user-containers.spotizerr> | ||
| + | USER=spotizerr | ||
| + | DESCRIPTION=" | ||
| + | </ | ||
| + | |||
| + | Add the service to the default runlevel and start it now: | ||
| + | <code bash> | ||
| + | / | ||
| + | rc-update | ||
| + | </ | ||
| + | |||
| + | |||
| + | ===== Logrotate ===== | ||
| + | |||
| + | Add log rotation to Spotizerr logs. Drop the following under **/ | ||
| + | <file - spotizer> | ||
| + | / | ||
| + | missingok | ||
| + | notifempty | ||
| + | } | ||
| + | </ | ||
| + | |||