Funkwhale
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.
Contents
Installation
Funkwhale requires a reverse proxy ([1]), so nginx or Apache needs to be installed.
It also needs a configured PostgreSQL database and a Redis cache server. See #Configuration and the respective pages for information.
Installation from AUR
Install the funkwhaleAUR package.
Manual install
Follow instructions for the Arch installation at [2]. This will install all the components in /srv/funkwhale
.
Docker install
Follow instructions for the Docker installation at [3].
Configuration
The following sections assume that Funkwhale was installed from AUR, for a manual installation, change the folders appropriately.
It also assume that you are using Funkwhale on a local network. See the official documentation for making it accessible outside, especially for the certificates using Certbot.
Host config
Make sure your /etc/hosts
file is setup correctly. The Funkwhale server is running on 127.0.0.1
with alias funkwhale.local
, but this can be changed.
Your /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.1 funkwhale.local
Configure nginx
See upstream documentation.
Configure apache
A template Apache configuration file is provided in /etc/webapps/funkwhale/apache-funkwhale.conf
. It configures the Funkwhale instance to be accessible at https://funkwhale.local
.
The folder names should be change to fit your installation. More explanation on which lines need to be modified is provided in [4].
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:
# /etc/httpd/conf/httpd.conf
Include conf/extra/funkwhale.conf
For the changes to be applied, you need to restart httpd.service
(Apache) using systemd.
Configure PostgreSQL
Here we follow the official documentation: [5]
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.
Configure Redis
There is no particular configuration for Redis.
Initialization
Setup
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"
Next, the folder where Funkwhale will store the users data should be created in /srv/funkwhale
. It should be owned by the funkwhale
user,
$ mkdir /srv/funkwhale $ chown funkwhale:funkwhale /srv/funkwhale
To work, Funkwhale needs several environment variables to be present, these should be defined in the environment file /srv/funkwhale/config/env
.
There is a template at /etc/webapps/funkwhale/env.template
, copy it and modify it to fit your installation.
$ mkdir /srv/funkwhale/config $ cp /etc/webapps/funkwhale/env.template /srv/funkwhale/config/env $ chown -R funkwhale:funkwhale /srv/funkwhale/config
The FUNKWHALE_HOSTNAME
variable should correspond to the hostname in /etc/hosts
. 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.
Log in as funkwhale user
The next commands should be run as the funkwhale
user. Create sub-folders for api files and to store the music,
$ sudo -u funkwhale -H bash
[funkwhale]$ cd /srv/funkwhale [funkwhale]$ mkdir -p api data/static data/media data/music
funkwhale
user with the environment variables loaded, you can use the following command-line after logging in:
[funkwhale]$ export $(cat /srv/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.
Database setup
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
Version upgrade
All the command should be entered as funkwhale
user. Stop the funkwhale.service
before upgrading.
The static files have to be collected again,
[funkwhale]$ python /usr/share/webapps/funkwhale/api/manage.py collectstatic --no-input
Then apply database migrations,
[funkwhale]$ python /usr/share/webapps/funkwhale/api/manage.py migrate
The funkwhale.service
can be started again.
Usage
Upstream provides systemd services that are already installed by the AUR package.
To start the instance, just start funkwhale.service
.
This starts three services, you can check their status with:
$ systemctl status funkwhale-\*
Troubleshooting
Proxy logs
Apache logs for funkwhale are available,
$ tail -f /var/log/httpd/funkwhale/error.log