Funkwhale (Serveur musical)

Environnement

Installation

Installer les dépendances :

apt install -y postgresql postgresql-contrib curl python3-pip python3-venv git unzip libldap2-dev libsasl2-dev gettext-base zlib1g-dev libffi-dev libssl-dev build-essential ffmpeg libjpeg-dev libmagic-dev libpq-dev postgresql-client python3-dev make redis-server

Créer un utilisateur funkwhale et créer le dossier de travail :

sudo useradd -r -s /usr/sbin/nologin -d /srv/funkwhale -m funkwhale
cd /srv/funkwhale
sudo -u funkwhale -H bash
mkdir -p config api data/static data/media data/music front
exit

Configurer la base de données :

sudo -u postgres psql

UPDATE pg_database SET datistemplate = FALSE WHERE datname = 'template1';
DROP DATABASE template1;
CREATE DATABASE template1 WITH TEMPLATE = template0 ENCODING = 'UNICODE';
UPDATE pg_database SET datistemplate = TRUE WHERE datname = 'template1';
\c template1
VACUUM FREEZE;
CREATE DATABASE "funkwhale" WITH ENCODING 'utf8';
CREATE USER funkwhale;
GRANT ALL PRIVILEGES ON DATABASE funkwhale TO funkwhale;
\q

sudo -u funkwhale -H psql
exit

sudo -u postgres psql funkwhale -c 'CREATE EXTENSION "unaccent";'
sudo -u postgres psql funkwhale -c 'CREATE EXTENSION "citext";'

Se connecter sou le compte funkwhale :

sudo -u funkwhale -H bash

Télécharger et décompresser les API et frontend de Funkwhale :

curl -L -o "api-0.21.zip" "https://dev.funkwhale.audio/funkwhale/funkwhale/-/jobs/artifacts/0.21/download?job=build_api"
unzip "api-0.21.zip" -d extracted
mv extracted/api/* api/
rm -rf extracted

curl -L -o "front-0.21.zip" "https://dev.funkwhale.audio/funkwhale/funkwhale/-/jobs/artifacts/0.21/download?job=build_front"
unzip "front-0.21.zip" -d extracted
mv extracted/front .
rm -rf extracted

Installer les dépendances Python :

python3 -m venv /srv/funkwhale/virtualenv
source /srv/funkwhale/virtualenv/bin/activate
pip install wheel
pip install -r api/requirements.txt

Télécharger le fichier d'environnement :

curl -L -o config/.env "https://dev.funkwhale.audio/funkwhale/funkwhale/raw/master/deploy/env.prod.sample"

Générer une clé pour Django :

openssl rand -base64 45
055FpxA9zvJy/LKwpkmmoCARRKgvt1oJhNmRaJQ9zY+qUpft3aBg7jrt12kD
VRJvZrzDYim8YGU9VizaLLvy9gygJ6JTCwsSRD0/0Monkhf5+lzNO6A4uZDF

Modifier les droits du fichier d'environnement :

chmod 600 /srv/funkwhale/config/.env

Éditer le fichier et y ajouter la clé Django et DATABASE_URL et CACHE_URL de PostgreSQL et Redis :

nano /srv/funkwhale/config/.env

    FUNKWHALE_API_IP=ip_du_serveur
    FUNKWHALE_HOSTNAME=funkwhale.domain.lan
    DATABASE_URL=postgresql://funkwhale@:5432/funkwhale
    #CACHE_URL=redis://127.0.0.1:6379/0
    #CACHE_URL=redis:///run/redis/redis.sock?db=0
    #CELERY_BROKER_URL=redis+socket:///run/redis/redis.sock?virtual_host=0
    DJANGO_SECRET_KEY=055FpxA9zvJy/LKwpkmmoCARRKgvt1oJhNmRaJQ9zY+qUpft3aBg7jrt12kD

Créer la structure initiale de la base de données :

python api/manage.py migrate

Créer un compte administrateur :

python api/manage.py createsuperuser

Si nécessaire, changer le mot de passe utilisateur :

python api/manage.py changepassword <utilisateur>

Collecter les assets statiques :

python api/manage.py collectstatic

Utiliser l'utilisateur root :

exit

Télécharger les services systemd :

curl -L -o "/etc/systemd/system/funkwhale.target" "https://dev.funkwhale.audio/funkwhale/funkwhale/raw/0.21/deploy/funkwhale.target"
curl -L -o "/etc/systemd/system/funkwhale-server.service" "https://dev.funkwhale.audio/funkwhale/funkwhale/raw/0.21/deploy/funkwhale-server.service"
curl -L -o "/etc/systemd/system/funkwhale-worker.service" "https://dev.funkwhale.audio/funkwhale/funkwhale/raw/0.21/deploy/funkwhale-worker.service"
curl -L -o "/etc/systemd/system/funkwhale-beat.service" "https://dev.funkwhale.audio/funkwhale/funkwhale/raw/0.21/deploy/funkwhale-beat.service"

Prendre en compte le nouveau services, les activer et les lancer :

systemctl daemon-reload
systemctl start funkwhale.target
systemctl enable funkwhale-server
systemctl enable funkwhale-worker
systemctl enable funkwhale-beat

Editer le fichier /etc/systemd/system/funkwhale-worker.service et supprimer la partie --concurrency=${CELERYD_CONCURRENCY-0} :

nano /etc/systemd/system/funkwhale-worker.service

Vérifier que les services sont démarrés :

systemctl status funkwhale-\*

Installer Nginx :

apt install nginx

Créer le fichier de configuration du reverse-proxy :

cd /tmp

export FUNKWHALE_VERSION="0.21"

curl -L -o /etc/nginx/funkwhale_proxy.conf "https://dev.funkwhale.audio/funkwhale/funkwhale/raw/0.21/deploy/funkwhale_proxy.conf"
curl -L -o /etc/nginx/sites-available/funkwhale.template "https://dev.funkwhale.audio/funkwhale/funkwhale/raw/0.21/deploy/nginx.template"

set -a && source /srv/funkwhale/config/.env && set +a
envsubst "`env | awk -F = '{printf \" $%s\", $$1}'`" < /etc/nginx/sites-available/funkwhale.template > /etc/nginx/sites-available/funkwhale.conf

ln -s /etc/nginx/sites-available/funkwhale.conf /etc/nginx/sites-enabled/