PanikDB - gestion radio

Installation de panikdb

La plus simple et la seule méthode qui va être détaillée ici est l’installation à base de paquets .deb sur un système Debian à jour (à l’heure actuelle = Debian 12).

Configuration des dépôts

Les différents paquets ne sont pas dans les dépôts officiels, il faut commencer par configurer les dépôts additionnels suivants, par exemple en créant un fichier /etc/apt/sources.list.d/panik.list avec le contenu suivant :

deb https://deb.entrouvert.org/ bookworm main
deb [trusted=yes] https://rdio.space/deb/bookworm/ ./

Le premier dépôt contient certaines dépendances obligatoires, il est configuré avec la clé de signature 27FF12846574F8A0EFFF7A84DF69CC342CCFEC25, qui peut être installée ainsi :

curl https://deb.entrouvert.org/entrouvert.gpg \
> /etc/apt/trusted.gpg.d/entrouvert.gpg

Le second dépôt contient panikdb à proprement dit, il n’est pas configuré avec une clé, de là la nécessité d’y ajouter [trusted=yes].

Après ajout de la configuration et exécution de la commande apt update pour récupérer la liste des paquets, il faut ensuite faire apt install entrouvert-repository puis un nouvel apt update, cela ajoutera la configuration permettant de préférer certains paquets issus des backports Debian.

Installation des paquets

De la manière la plus classique qui soit, l’installation se fait via apt install panikdb, elle doit se terminer en erreur, le service n’arrivant pas à démarrer car la base de données n’est pas encore configurée.

Configuration de la base de données

Après l’installation de PostgreSQL (apt install postgresql), il faut y créer un utilisateur et une base de données, la commande sudo -u postgres psql permet d’ouvrir un shell superutilisateur dans la base de données, l’utilisateur et la base de données se créent alors ainsi:

-- création de l'utilisation de la base de données panikdb
postgres=# CREATE USER panikdb;
CREATE ROLE

# création de la base de données elle-même
postgres=# CREATE DATABASE panikdb WITH OWNER = panikdb
TEMPLATE = template0
LC_COLLATE = 'fr_BE.UTF-8'
LC_CTYPE = 'fr_BE.UTF-8';

CREATE DATABASE

Le nom donnée correspond à celui présent dans la configuration standard, dans le fichier /etc/panikdb/settings.py, les lignes

DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'panikdb',
},
}

Il reste maintenant à créer dans cette base les différentes tables pour les données, cela se fait par la commande :

sudo -u panikdb panikdb-manage migrate

Validation de l’installation

Il y a maintenant possibilité de vérifier que tout s’est bien passé jusqu’à présent en lançant une commande spécifique à panikdb, pour voir ce qui est actuellement programmé à la radio :

# sudo -u panikdb panikdb-manage whatsonair
found episode: None
found emission: None
found nonstop: None

(il n’y a encore rien dans la base de données)

Configuration du serveur web

Le serveur nginx a normalement déjà été installé il reste à le configurer, pour cela il faut créer un fichier /etc/nginx/sites-enabled/panikdb avec le contenu suivant :

server {
listen 80;
server_name nom-de-domaine;
access_log /var/log/nginx/panikdb-access.log combined;
error_log /var/log/nginx/panikdb-error.log;

client_max_body_size 450M;

location /static {
alias /var/lib/panikdb/static;
}
location /media {
alias /var/lib/panikdb/media;
}

location / {
proxy_pass http://unix:/run/panikdb/panikdb.sock;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
}
}

Pour l’installation initiale ça peut rester ainsi, pour une exploitation réelle il faudra y configurer l’accès HTTPS.

Il est nécessaire de préciser aussi au niveau de l’application Django le nom de domaine qui sera utilisé, pour cela il faut déposer un fichier dans le répertoire /etc/panikdb/settings.d/, par exemple /etc/panikdb/settings.d/local.py, avec le nom de domaine choisi :

ALLOWED_HOSTS = ['nom-de-domaine']

Démarrage de l’application

Il reste à démarrer le tout,

systemctl restart panikdb

La commande systemctl status panikdb permet de voir que le service est bien OK,

# systemctl status panikdb
â—Ź panikdb.service - PanikDB
Loaded: loaded (/lib/systemd/system/panikdb.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2022-07-14 11:29:35 CEST; 51s ago
Process: 8066 ExecStartPre=/usr/bin/panikdb-manage migrate --noinput --verbosity 1 (code=exited, status=0/SUCCESS)
Process: 8087 ExecStartPre=/usr/bin/panikdb-manage collectstatic --noinput (code=exited, status=0/SUCCESS)
Main PID: 8107 (uwsgi)
Status: "uWSGI is ready"
Tasks: 11 (limit: 33498)
Memory: 230.1M
CPU: 3.393s
CGroup: /system.slice/panikdb.service
├─8107 panikdb uWSGI master
├─8126 panikdb uWSGI worker 1
├─8128 panikdb uWSGI worker 2
├─8130 panikdb uWSGI worker 3
├─8132 panikdb uWSGI worker 4
└─8134 panikdb uWSGI worker 5

jui 14 11:29:35 server uwsgi[8107]: *** Stats server enabled on /run/panikdb/stats.sock fd: 50 ***
jui 14 11:29:35 server uwsgi[8134]: python tracebacker for worker 5 available on /run/panikdb/py-tracebacker.sock.5
jui 14 11:29:40 server uwsgi[8134]: [pid: 8134|app: 0|req: 1/1] 0.0.0.0 () {42 vars in 650 bytes} [Thu Jul 14 11:29:40 2022] GET / => g

Il est maintenant possible de visiter la page http://nom-de-domaine/ et l’écran de connexion doit apparaître.

Capture d’écran de la page de connexion de PanikDB

Et pour se connecter, il y a un premier compte à créer,

sudo -u panikdb panikdb-manage createsuperuser

Configurations de base

Dans /etc/panikdb/settings.d/local.py (ou tout autre fichier .py de ce répertoire), un paramètre peut être posé pour avoir un titre différent dans l’entête des pages, par exemple :

SITE_TITLE = 'Une autre radio'

Moins accessoire, quelques paramètres peuvent être posés pour dés/activer certaines fonctionnalités,

  • HAS_MEMBERSHIP_SUPPORT, pour la gestion des cotisations des membres,
  • HAS_NEWSLETTERS, pour la gestion de la rĂ©daction et envoi d’une newsletter hebdomadaire,
  • HAS_NONSTOP, pour la gestion de la diffusion automatique,
  • HAS_PIGE, pour la possibilitĂ© de tĂ©lĂ©charger des extraits de la pige d’antenne,
  • HAS_REGIE, pour une page de contrĂ´le pouvant ĂŞtre placĂ©e en Ă©cran d’accueil d’un ordinateur en rĂ©gie,
  • HAS_WIKI, pour le wiki interne

Exemple :

HAS_NEWSLETTERS = False
HAS_NONSTOP = True
HAS_PIGE = False

Configuration pour les courriels

Des messages sont envoyés pour la gestion des comptes (inscription ou « mot de passe perdu ») et pour la récupération des enregistrements de pige, l’adresse d’origine de ces messages peut être configurée via un paramètre DEFAULT_FROM_EMAIL, ex :

DEFAULT_FROM_EMAIL = 'panikdb@example.net'

Pour que les envois puissent fonctionner il faut idéalement avoir un serveur SMTP local, alternativement l’envoi peut se faire via un serveur distant, ça se configure à travers les paramètres EMAIL_HOST, EMAIL_HOST_PASSWORD, etc. (il s’agit de paramètres standards Django, cf leur documentation).


Dernière modification : 21 octobre 2023, 12:41