Had already installed navidrome here: 8 Music

So now it just a matter of moving it over to proxmox

The previous install did not use docker, it installed itself with a systemd service.

We will use docker this time.

They have a tutorial for this here: https://www.navidrome.org/docs/installation/docker/

They give this docker compose file:

services:
  navidrome:
    image: deluan/navidrome:latest
    user: 1000:1000 # should be owner of volumes
    ports:
      - "4533:4533"
    restart: unless-stopped
    environment:
      # Optional: put your config options customization here. Examples:
      ND_SCANSCHEDULE: 1h
      ND_LOGLEVEL: info  
      ND_SESSIONTIMEOUT: 24h
      ND_BASEURL: ""
    volumes:
      - "/path/to/data:/data"
      - "/path/to/your/music/folder:/music:ro"

we will lose all our users this way, but it is fine. I can recreate users.

We need to move over the music, and set a real path for our music and options

services:
  navidrome:
    image: deluan/navidrome:latest
    user: 1000:1000 # should be owner of volumes
    ports:
      - "4533:4533"
    restart: unless-stopped
    environment:
      # Optional: put your config options customization here. Examples:
      ND_SCANSCHEDULE: 1h
      ND_LOGLEVEL: info  
      ND_SESSIONTIMEOUT: 24h
      ND_BASEURL: ""
    volumes:
      - "/home/tommy/navidrome/data:/data"
      - "/home/tommy/slskd/data/downloads:/music:ro"

both those folders are just empty right now, so let’s copy over music.

from the old device i went to my slskd downloads ( /home/tommy/.local/share/slskd/downloads ) and scp’d over * to /home/tommy/slskd/downloads.

scp -r /home/tommy/.local/share/slskd/downloads/* [email protected]:/home/tommy/slskd/data/downloads

once that finished, i ran docker compose up -d

navidrome is now running on port 4533

so I went to 192.168.2.6:4533 and made an admin user

Then I needed to setup lastfm like I did last time, except docker this time

the two relevant environment variables are ND_LASTFM_APIKEY and ND_LASTFM_SECRET as listed here : https://www.navidrome.org/docs/usage/external-integrations/

services:
  navidrome:
    image: deluan/navidrome:latest
    user: 1000:1000 # should be owner of volumes
    ports:
      - "4533:4533"
    restart: unless-stopped
    environment:
      # Optional: put your config options customization here. Examples:
      ND_SCANSCHEDULE: 1h
      ND_LOGLEVEL: info  
      ND_SESSIONTIMEOUT: 24h
      ND_BASEURL: ""
	  ND_LASTFM_APIKEY: ""
	  ND_LASTFM_SECRET: ""
    volumes:
      - "/home/tommy/navidrome/data:/data"
      - "/home/tommy/slskd/data/downloads:/music:ro"

to get that apikey and that secret, i tried to find them in the old server, and failed, so i just re-did the setup process. They should be in your old config.toml, but they werent for me.

You just go to https://www.last.fm/api/account/create, login, leave everything blank except the application name and your email, hit submit. then you are given the apikey and secret.

put those in the docker compose in the relevant locations

then re run docker compose up -d

go to the webui at 192.168.2.6:4533 and play a song. make sure the playing of the song shows up on your lastfm account.

I want to setup gluetun, so that when I setup slskd, all soulseek connections are routed through mullvad

it says for mullvad openvpn you do :

docker run -it --rm --cap-add=NET_ADMIN --device /dev/net/tun \
-e VPN_SERVICE_PROVIDER=mullvad \
-e VPN_TYPE=openvpn -e OPENVPN_USER=1355131650462193 \
-e SERVER_CITIES=amsterdam qmcgaw/gluetun

which converts to this as a docker-compose.yml

version: "3"
services:
  gluetun:
    image: qmcgaw/gluetun
    cap_add:
      - NET_ADMIN
    devices:
      - /dev/net/tun:/dev/net/tun
    environment:
      - VPN_SERVICE_PROVIDER=mullvad
      - VPN_TYPE=openvpn
	  - OPENVPN_USER=1355131650462193
      - SERVER_CITIES=Amsterdam

Change OPENVPN_USER to be your mullavd id Change SERVER_CITIES to be the city you want to target

then run docker compose up -d

you can test this connection with

docker run --rm --network=container:gluetun-gluetun-1 alpine:3.20 sh -c "apk add wget && wget -qO- https://ipinfo.io"

now it is time to setup slskd

I did this the non docker way last time. That was silly of me. I am doing the docker way this time.

They have a quick setup info here: https://github.com/slskd/slskd/?tab=readme-ov-file#quick-start

I will be using docker compose, so, a valid docker compose for slskd would be

version: "2"
services:
  slskd:
    image: slskd/slskd
    container_name: slskd
    ports:
      - "5030:5030"
      - "5031:5031"
      - "50300:50300"
    environment:
      - SLSKD_REMOTE_CONFIGURATION=true
    volumes:
      - /home/tommy/slskd/data:/app
    restart: always

also youd have to make the directory /home/tommy/slskd and /home/tommy/slskd/data

but we want it to route through gluetun, so we combine the two docker compose files into one

# version: "2"
services:
  gluetun:
    image: qmcgaw/gluetun
    cap_add:
      - NET_ADMIN
    devices:
      - /dev/net/tun:/dev/net/tun
    ports:
      - "5030:5030"
      - "5031:5031"
      - "50300:50300"
    environment:
      - VPN_SERVICE_PROVIDER=mullvad
      - VPN_TYPE=openvpn
      - OPENVPN_USER=yourid
      - SERVER_CITIES=Chicago IL
	 restart: always
 
  slskd:
    depends_on:
      - gluetun
    network_mode: "service:gluetun"
    image: slskd/slskd
    container_name: slskd
    environment:
      - SLSKD_REMOTE_CONFIGURATION=true
    volumes:
      - /home/tommy/slskd/data:/app
    restart: always

now we need to grab my old config and transfer that over

scp slskd.yml [email protected]:/home/tommy/slskd/data/

then run docker compose up -d

we can test the networking by getting container id from docker ps for a given container ( e.g. slskd ) then running docker exec -it 4a882c1bb22d sh to get a shell on that container. Then, from there, you can wget -qO- https://ipinfo.io. See if the ip is the same as your normal public ip ( it should not be )

now that we have that setup, check out slskd at 192.168.2.6:5030. Login should be whatever is defined in /home/tommy/slskd/data/slskd.yml

Then I setup cloudflare tunnels to replace the old vncwin tunnels to slskd and navidrome. I also moved these tunnels from my old domain which will soon expire to my new domain.