Spotify like

Spotify like

Je cherchais depuis un moment une alternative libre à Spotify. J’ai finalement opté pour Funkwhale

Installation

Dans le prolongement du post sur Traefik, je vous propose aujourd’hui de déployer une instance Funkwhale avec Docker. Je pars du docker-compose.yml proposé dans la doc officielle et j’apporte quelques modifications:

  • utilisation de named volumes au lieu de bind mount
  • directive de expose au lieu de ports (inutile d’exposer un port sur la machine hôte)
  • utilisation du réseau dédié à Traefik

Info

En l’absence de directive container_name, docker-compose va nommer les conteneurs en <basedir>_<service-name>_<inc>, dans cette exemple ça donne: funkwhale_funkwale_1

 1version: "3"
 2services:
 3  funkwhale:
 4    container_name: funkwhale
 5    restart: unless-stopped
 6    image: funkwhale/all-in-one:latest
 7    env_file: .env
 8    networks:
 9      - traefik_lan
10    volumes:
11      - app:/data
12    expose:
13      - "80"
14    labels:
15      - "traefik.enable=true"
16      - "traefik.docker.network=traefik_lan"
17      - "traefik.http.routers.funkwhalenotls.rule=Host(`music.domain.tld`)"
18      - "traefik.http.routers.funkwhalenotls.entrypoints=webinsecure"
19      - "traefik.http.routers.funkwhalenotls.middlewares=tlsredir@file"
20      - "traefik.http.routers.funkwhale.rule=Host(`music.domain.tld`)"
21      - "traefik.http.routers.funkwhale.entrypoints=websecure"
22      - "traefik.http.routers.funkwhale.tls=true"
23      - "traefik.http.routers.funkwhale.tls.certresolver=letsencrypt"
24
25networks:
26  traefik_lan:
27    external: true
28
29volumes:
30 app:

Note

Cette configuration ne permet pas d’importer de la music depuis un répertoire local de la machine hôte -> voir doc si cette posibilité vous intéresse.

Il ne reste plus qu’a personnaliser le fichier d’environnement avec votre FQDN:

 1touch .env
 2chmod 600 .env
 3cat > .env << EOF
 4# Replace 'your.funkwhale.example' with your actual domain
 5FUNKWHALE_HOSTNAME=your.funkwhale.example
 6# Protocol may also be: http
 7FUNKWHALE_PROTOCOL=https
 8# This limits the upload size
 9NGINX_MAX_BODY_SIZE=100M
10# Bind to localhost
11FUNKWHALE_API_IP=127.0.0.1
12# Container port you want to expose on the host
13FUNKWHALE_API_PORT=5000
14# Generate and store a secure secret key for your instance
15DJANGO_SECRET_KEY=$(openssl rand -hex 45)
16# Remove this if you expose the container directly on ports 80/443
17NESTED_PROXY=1
18EOF

Sources, docs…