Quoting the main documentation page:
- Funkwhale is a self-hosted, modern, free and open-source music server, heavily inspired by Grooveshark.
Instances can be federated with the ActivityPub protocol.
Installation from AUR
Install the AUR package.
Follow instructions for the Arch installation at . This will install all the components in
Follow instructions for the Docker installation at .
The following sections assume that Funkwhale was installed from AUR, for a manual installation, change the folders appropriately.
Make sure your
/etc/hosts file is setup correctly. The Funkwhale server is running on
127.0.0.2 with alias
funkwhale.local, not to conflict with existing web applications already configured on
127.0.0.1, but this can be changed.
/etc/hosts file should look something like the following,
#<ip-address> <hostname.domain.org> <hostname> 127.0.0.1 localhost ::1 localhost 127.0.0.2 funkwhale.local
See upstream documentation.
A template Apache configuration file is provided in
/etc/webapps/funkwhale/apache-funkwhale.conf. It configures the Funkwhale instance to be accessible at
The folder names should be change to fit your installation. More explanation on which lines need to be modified is provided in .
Copy the template to the apache configuration folder,
$ cp /etc/webapps/funkwhale/apache-funkwhale.conf /etc/httpd/conf/extra/funkwhale.conf
Next, edit the Apache configuration file and add the following:
For the changes to be applied, you need to restart
httpd.service (Apache) using systemd.
Here we follow the official documentation: 
Connect to the PostgreSQL command line using the
postgres user to create the
funkwhale user and the database.
$ sudo -u postgres psql
postgres=# CREATE DATABASE "funkwhale" postgres=# WITH ENCODING 'utf8'; postgres=# CREATE USER funkwhale; postgres=# GRANT ALL PRIVILEGES ON DATABASE funkwhale TO funkwhale; postgres=# \c funkwhale; postgres=# CREATE EXTENSION "unaccent";
The last two lines load the
unaccent extension, which is needed for funkwhale to work.
There is no particular configuration for Redis.
Funkwhale should be run as the
funkwhale user. It is automatically created by the AUR package, if you followed the manual installation, create it with,
$ useradd -r -d /srv/funkwhale -m funkwhale -c "Funkwhale music server -s /sbin/nologin"
To work, Funkwhale needs several environment variables to be present, these should be defined in the environment file
There is a template at
/etc/webapps/funkwhale/env.template, copy it and modify it to fit your installation.
$ cp /etc/webapps/funkwhale/env.template /etc/webapps/funkwhale/config/.env
FUNKWHALE_HOSTNAME variable should correspond to the hostname in
DJANGO_ALLOWED_HOSTS needs also to match the address where the funkwhale instance will be reached.
You should generate a unique
DJANGO_SECRET_KEY and change the paths accordingly to your installation.
Next, the folder where Funkwhale will store the users data should be created in
/srv/funkwhale. It should be owned by the
$ mkdir /srv/funkwhale $ chown funkwhale:funkwhale /srv/funkwhale
The next commands should be run as the
funkwhale user. Create sub-folders,
$ sudo -u funkwhale -H bash
[funkwhale]$ cd /srv/funkwhale [funkwhale]$ mkdir -p data/static data/media data/music
funkwhaleuser with the environment variables loaded, you can use the following command-line after logging in:
[funkwhale]$ export $(cat /etc/webapps/funkwhale/config/.env
For convenience, you can copy this line to /srv/funkwhale/.bashrc (or whichever shell you are using), so it is loaded automatically everytime you log in.
You need to initialize the database before launching the application,
$ sudo -u funkwhale -H bash
[funkwhale]$ python /usr/share/webapps/funkwhale/api/manage.py migrate
Then create a superuser for your Funkwhale instance,
[funkwhale]$ python /usr/share/webapps/funkwhale/api/manage.py createsuperuser
You also need to collect the static files for the webapp,
[funkwhale]$ python /usr/share/webapps/funkwhale/api/manage.py collectstatic
Upstream provides systemd services that are already installed by the AUR package.
To start the instance, just start
This starts three services, you can check their status with:
$ systemctl status funkwhale-\*
Apache logs for funkwhale are available,
$ tail -f /var/log/httpd/funkwhale/error.log