1
0
mirror of https://github.com/funkypenguin/geek-cookbook/ synced 2025-12-13 17:56:26 +00:00
Files
geek-cookbook/manuscript/recipes/funkwhale.md
David Young d1bdbf5e88 Update titles
Signed-off-by: David Young <davidy@funkypenguin.co.nz>
2022-07-05 17:04:06 +12:00

5.2 KiB

title, description
title description
Install funkwhale with docker-compose / swarm Funkwhale is a decentralized, federated music streaming platform

Funkwhale

Funkwhale is a decentralized, federated, and open music streaming / sharing platform. Think of it as "Mastodon for music".

Funkwhale Screenshot

The idea is that you run a "pod" (just like whales, Funkwhale users gather in pods). A pod is a website running the Funkwhale server software. You join the network by registering an account on a pod (sometimes called "server" or "instance"), which will be your home.

You will be then able to interact with other people regardless of which pod they are using.

--8<-- "recipe-standard-ingredients.md"

Preparation

Setup data locations

First we create a directory to hold our funky data:

mkdir /var/data/funkwhale

Prepare environment

Funkwhale is configured using environment variables. Create /var/data/config/funkwhale/funkwhale.env, by running something like this:

mkdir -p /var/data/config/funkwhale/
cat > /var/data/config/funkwhale/funkwhale.env << EOF
# Replace 'funkwhale.example.com' with your actual domain
FUNKWHALE_HOSTNAME=funkwhale.example.com
# Protocol may also be: http
FUNKWHALE_PROTOCOL=https
# This limits the upload size
NGINX_MAX_BODY_SIZE=100M
# Bind to localhost
FUNKWHALE_API_IP=127.0.0.1
# Container port you want to expose on the host
FUNKWHALE_API_PORT=80
# Generate and store a secure secret key for your instance
DJANGO_SECRET_KEY=$(openssl rand -hex 45)
# Remove this if you expose the container directly on ports 80/443
NESTED_PROXY=1
# adapt to the pid/gid that own /var/data/funkwhale/
PUID=1000
PGID=1000
EOF
# reduce permissions on the .env file since it contains sensitive data
chmod 600 /var/data/funkwhale/funkwhale.env  

Setup Docker Swarm

Create a docker swarm config file in docker-compose syntax (v3) (I store all my config files as /var/data/config/<stack name\>/<stack name\>.yml), something like this:

--8<-- "premix-cta.md"

version: "3.2" # https://docs.docker.com/compose/compose-file/compose-versioning/#version-3

services:
  funkwhale:
    image: funkwhale/all-in-one:1.0.1
    env_file: /var/data/config/funkwhale/funkwhale.env
    volumes:
      - /var/data/funkwhale/:/data/
      - /path/to/your/music/dir:/music:ro
    deploy:
      labels:
        # traefik common
        - "traefik.enable=true"
        - "traefik.docker.network=traefik_public"

        # traefikv1
        - "traefik.frontend.rule=Host:funkwhale.example.com"
        - "traefik.port=80"

        # traefikv2
        - "traefik.http.routers.linx.rule=Host(`funkwhale.example.com`)"
        - "traefik.http.routers.linx.entrypoints=https"
        - "traefik.http.services.linx.loadbalancer.server.port=80" 
    networks:
      - traefik_public

networks:
  traefik_public:
    external: true

Serving

Unleash the Whale! 🐳

Launch the Funkwhale stack by running docker stack deploy funkwhale -c <path -to-docker-compose.yml>, and then watch the container logs using docker stack logs funkywhale_funkywhale<tab-completion-helps>.

You'll know the container is ready when you see an ascii version of the Funkwhale logo, followed by:

[2021-01-27 22:52:24 +0000] [411] [INFO] ASGI 'lifespan' protocol appears unsupported.
[2021-01-27 22:52:24 +0000] [411] [INFO] Application startup complete.

The first time we run Funkwhale, we need to setup the superuser account.

!!! tip If you're running a multi-node swarm, this next step needs to be executed on the node which is currently running Funkwhale. Identify this with docker stack ps funkwhale

Run something like the following:

docker exec -it funkwhale_funkwhale.1.<tab-completion-helps-here\> \
  manage createsuperuser \
  --username admin \
  --email <your admin email address\>

You'll be prompted to enter the admin password - here's some sample output:

root@swarm:~# docker exec -it funkwhale_funkwhale.1.gnx96tfr0lgmx5u3e8x4tkags \
  manage createsuperuser \
  --username admin \
  --email admin@funkypenguin.co.nz
2021-01-27 22:44:01,953 funkwhale_api.config INFO     Running with the following plugins enabled: funkwhale_api.contrib.scrobbler
Password:
Password (again):
Superuser created successfully.
root@swarm:~#

--8<-- "recipe-footer.md"