PanikDB - gestion radio

Synchronisation entre panikdb et panikweb sur des serveurs différents

Une configuration classique est d’avoir panikdb installé sur le réseau local de la radio, ce qui permet par exemple un chargement très rapide des sons, et d’avoir panikweb installé sur un serveur dans un datacenter, qui n’aura pas les limites de bande passante d’un serveur local.

Il s’agit alors d’avoir une procédure pour régulièrement transférer les sons chargés en local vers le serveur distant.

MĂ©thode simple et globale

Le plus simple est de transférer (presque) tout, ça peut être fait avec un script exécuté régulièrement par cron (par exemple toutes les 5 minutes),

#! /bin/bash

REMOTE=panik@serveur-distant:/srv/www.radiopanik.org/panikweb/

if mkdir /run/panikdb/lock-sync-media &> /dev/null; then
trap 'rm -rf /run/panikdb/locks-sync-media' EXIT
cd /srv/panikdb/panikdb
rsync -ra --exclude=nonstop \
--exclude=pige \
--exclude=playlists \
--exclude=upload \
--exclude=sounds.orig \
--exclude='ytdl' \
--exclude='*.tmp.mp3' \
--exclude='*.tmp.ogg' \
--exclude='*.wav' \
--exclude='*.flac' \
media \
$REMOTE
rsync -ra --delete \
media/pige \
$REMOTE/media/
fi

Méthode sélective, avec héberbement partagé

Le problème de la méthode simple est qu’absolument tous les fichiers sont transférés et qu’à un moment l’espace disque sur le serveur hébergé peut venir à manquer et c’est moins facile et plus ou moins coûteux d’y ajouter un disque. Comme on peut se dire que ce sont surtout les fichiers récents qui sont surtout téléchargés, on peut couper la poire en deux : les fichiers récents sur le serveur distant, les autres sur le serveur local.

Le script donnĂ© ci-dessus doit ĂŞtre modifiĂ© pour ne plus synchroniser les fichiers audio du rĂ©pertoire sounds (mais continuer Ă  le copier, pour avoir l’arborescence de rĂ©pertoires et les fichiers contenant les formes d’ondes),  et appeler la commande upload-sounds avec les paramètres adĂ©quats :

#! /bin/bash

REMOTE=panik@serveur-distant:/var/lib/panikweb/

if mkdir /run/panikdb/lock-sync-media &> /dev/null; then
trap 'rm -rf /run/panikdb/locks-sync-media' EXIT
cd /srv/panikdb/panikdb
rsync -ra --exclude=nonstop \
--exclude=pige \
--exclude=playlists \
--exclude=upload \
--exclude=sounds \
--exclude=sounds.orig \
--exclude='ytdl' \
--exclude='*.tmp.mp3' \
--exclude='*.tmp.ogg' \
--exclude='*.wav' \
--exclude='*.flac' \
media \
$REMOTE
rsync -ra \
--exclude='*.mp3' \
--exclude='*.ogg' \

media/sounds \
$REMOTE/media/

rsync -ra --delete \
media/pige \
$REMOTE/media/
panikdb-manage upload-sounds --newer=30d
fi

Et la pareille sur le serveur, pour supprimer les fichiers qui auaient plus de 30 jours.

Pour que la commande upload-sounds fonctionne, il faut lui renseigner où envoyer les fichiers, il s’agit d’ajouter dans /etc/panikdb/settings.d/upload.py (par exemple),

WEBSITE_MEDIA_SOUNDS_SYNC_BASE = 'panik@serveur-distant:/var/lib/panikweb/media/'

Il faut ensuite fournir à panikweb la configuration qui permettra d’utiliser les fichiers locaux quand ils sont disponibles, et d’envoyer côté panikdb quand ça n’est pas le cas. Dans la configuration nginx ça passe par l’ajout de trois sections :

        location /remote_media {
internal;
proxy_pass https://panikdb.xxx/media/;
proxy_limit_rate 2000k;
}

location /local_media {
internal;
alias /var/lib/panikweb/media;
}

location ~ ^/media/sounds/(.+)$ {
proxy_pass http://unix:/run/panikweb/panikweb.sock;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
}

location ~ ^/media/(.+)$ {
root /;
try_files /var/lib/panikweb/media/$1 =404;
}

Et dans /etc/panikweb/settings.d/offsite.py, l’information sur les chemins distants et locaux à utiliser :

OFFSITE_MEDIA_SOUNDS = ('/local_media/', '/remote_media/')


Dernière modification : 5 janvier 2024, 13:49