Funkwhale is a modern, self-hosted, free and open-source music server.
docker run \
--name=funkwhale \
-e FUNKWHALE_HOSTNAME=<yourdomain.funkwhale> \
-e NESTED_PROXY=0 \
-v </path/to/data>:/data \
-v </path/to/path>:/music:ro \
-p 3030:80 \
thetarkus/funkwhale
-e PUID
- Optional user ID for volume ownership.-e PGID
- Optional group ID for volume ownership.-e FUNKWHALE_HOSTNAME
- Hostname of your Funkwhale instance.-e NESTED_PROXY
- Set to 1 when container is behind a reverse proxy.-v /data
- Volume to save media files and database.-v /music
- Path to your music.-p 3030:80
- Access Funkwhale on port 3030.
Creation of the container will take a minute or two. The commands in the sections below will not work until the initialization is complete. For any subsequent runs (assuming you are re-using the /data
volume), there will be no wait time.
On the creation of your container, you will need to create an account. Running the following command will prompt you for a username, email, and password for your new account.
docker exec -it funkwhale manage createsuperuser
all this does is run /usr/local/bin/manage createsuperuser
on the docker
if you are running on synology docker, in the funkwhale docker window go to Terminal, click the drop-down arrow by create and enter /bin/sh
in the terminal prompt, enter /usr/local/bin/manage createsuperuser
To import your music, open your Funkwhale instance in your browser and find the libraries page under "Add content" and create a library. Click the "details" button on your newly created library and get the library ID from the URL bar. It will look similar to the format of: b8756c0d-839b-461f-b334-583983dc9ead
.
Set the LIBRARY_ID
environment variable (or replace it inside of the command) with your library ID, then run the command below.
# For file structures similar to ./Artist/Album/Track.mp3
docker exec -it funkwhale manage import_files $LIBRARY_ID "/music/**/**/*.mp3" --in-place --async
For more information see the Funkwhale docs on importing music.
In more involved deployments, you may have a reverse proxy in front of the container.
If it is the case, add the -e NESTED_PROXY=1
flag to the docker run command, or ensure
NESTED_PROXY=1
is available in the container environment.
This image is built and pushed automatically on funkwhale/all-in-one
, for all Funkwhale releases and for the development version as well (using the develop
tag).
If you want to build it manually, you can run the following:
image_name='mycustomimage' # choose a name for the image
version='develop' # replace 'develop' with any tag or branch name
arch='amd64' # set your cpu architecture
# download Funkwhale front and api artifacts and nginx configuration
./scripts/download-artifact.sh src/ $version build_front
./scripts/download-artifact.sh src/ $version build_api
./scripts/download-nginx-template.sh src/ $version
docker build --build-arg $arch -t $image_name:$version .