Funkwhale (Serveur musical)
Environnement
- Conteneur LXC Proxmox
- Ubuntu 20.04
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/