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/')