Auto-héberger ses podcasts?
Guide d'installation de Castopod
Je vous propose aujourd’hui un article un peu spécial, puisque c’est un article invité écrit par and0uille ! Elle nous explique en détail comment installer sa propre instance castopod. Si vous voulez voir le résultat avant de vous lancer, vous pouvez jeter un oeil au podcast SpaceSheep.
Table des matières
- Introduction
- Pré-requis
- Configurer le serveur MariaDB
- Configurer Apache
- Terminer l’installation dans l’installeur web
- Troubleshooting
- Vrac : Supprimer un podcast en CLI
- Conclusion
Introduction
Le projet Castopod, bien qu’encore en version Alpha, permet déjà à ses utilisateurs et utilisatrices d’auto-héberger leurs podcasts dans le fediverse (et c’est chouette).
C'était la solution toute trouvée pour héberger les premiers essais de @Moutmout@framapiaf.org à qui je donne un coup de main.
Une documentation d’installation existe sur le Gitlab de Castopod, mais j’ai eu envie la rendre un peu plus accessible en proposant ici une version très détaillée qui aidera certain.e.s j’espère à mettre leur instance sur pied (en attendant que castopod se fasse chatoniser ?)
J’utilise ici un serveur Debian 11 avec :
- Apache 2.4.48
- MariaDB 10.5.11
- PHP 8.1
- Castopod v1.0.0-alpha.70 (31/08/2021)
Pré-requis
Installer les paquets de base requis :
$ sudo apt update && sudo apt upgrade -y
$ sudo apt install apache2 mariadb-server certbot apt-transport-https \
lsb-release ca-certificates curl wget unzip
Installer php8.1, qui est pour le moment seulement disponible dans le dépot sid/unstable de Debian. On fera l’installation de PHP 8.1 depuis le dépot de Ondřej Surý :
$ sudo wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg
$ echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | sudo tee -a /etc/apt/sources.list.d/php.list
$ sudo apt update && sudo apt upgrade
$ sudo apt install php8.1 php8.1-common php-json php8.1-gd php8.1-mbstring \
php8.1-curl php8.1-xml php8.1-intl libapache2-mod-php8.1 php8.1-mysql
(optionnel) Génération de certificat auto-signé
⚡ ⚡ Ne pas utiliser cette méthode en production. Les certificats générés ici ne seront pas jugés “de confiance” par les navigateurs de vos auditeurs et auditrices ! Préférez par exemple Let’s Encrypt. Pour celles et ceux qui préféreront Let’s Encrypt, sautez cette section et passez directement à la configuration de MariaDB, on générera le certificat du serveur avec certbot plus tard.
Renseigner votre nom de domaine dans /etc/hosts, par exemple :
$ echo "127.0.0.1 castopod.local" | sudo tee -a /etc/hosts
Générer le certificat et la clé correspondant à ce domaine (inspiré de cet article) :
$ openssl req -x509 -out castopod.local.crt -keyout castopod.local.key \
-newkey rsa:4096 -nodes -sha256 \
-subj '/CN=castopod.local' -extensions EXT -config <( \
printf "[dn]\nCN=castopod.local\n[req]\ndistinguished_name = dn\n[EXT]\nsubjectAltName=DNS:castopod.local\nkeyUsage=digitalSignature\nextendedKeyUsage=serverAuth")
Déplacer le certificat et la clé privée aux endroits suivants par exemple :
$ sudo mv castopod.local.crt /etc/ssl/certs/
$ sudo mv castopod.local.key /etc/ssl/private/
Configurer le serveur MariaDB
Démarrer le service et l’activer au démarrage :
$ sudo systemctl start mariadb
$ sudo systemctl enable mariadb
Executer le script mysql_secure_installation fourni par MariaDB qui permet d’améliorer un petit peu la sécurité de notre serveur de base de données :
$ sudo mysql_secure_installation
Lors de cette étape, définir un mot de passe pour root (il est vide initialement) et laisser les autres choix par défaut.
Créer la base de données et l’utilisateur dédié à Castopod :
$ sudo mysql -u root -p
MariaDB [(none)]> CREATE DATABASE castopod_db;
MariaDB [(none)]> CREATE USER 'castopod_user'@localhost IDENTIFIED BY 'password1';
MariaDB [(none)]> GRANT CREATE, ALTER, DELETE, EXECUTE, INDEX, INSERT, SELECT, UPDATE ON castopod_db.* TO 'castopod_user'@localhost;
MariaDB [(none)]> FLUSH PRIVILEGES;
Penser à bien changer le mot de passe ci-dessus et à le garder dans un coin…
Configurer Apache
-
Télécharger le dernier zip de Castopod, par exemple à ce jour :
$ wget https://code.podlibre.org/podlibre/castopod-host/uploads/d979ccf46d8426ccdbb838d460698f7d/castopod-host-1.0.0-alpha.70.zip
⚡ ⚡ Attention, il faut télécharger l’archive nommée “Castopod Host package” et pas le “Source Code”, disponible au même endroit.
-
Extraire le code Castopod et le copier à la racine du serveur web :
$ unzip castopod-host-1.0.0-alpha.70.zip $ sudo cp -r castopod-host /var/www/html/castopod
-
Donner les permissions appropriées au répertoire :
$ sudo chown -R www-data:www-data /var/www/html/castopod
-
Hote virtuel Apache
-
Si on a choisi d’installer Castopod avec un certificat auto-signé pour faire quelques tests (non recommandé en production), on créer un hôte virtuel Apache comme le suivant. Attention à bien remplacer les chemins des certificats (options SSLCertificate…) :
$ cat /etc/apache2/sites-available/castopod.example.conf <IfModule mod_ssl.c> <VirtualHost _default_:443> ServerAdmin webmaster@localhost ServerName castopod ServerAlias castopod.local DocumentRoot /var/www/html/castopod/public LogLevel info ssl:warn ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined # SSL Engine Switch: # Enable/Disable SSL for this virtual host. SSLEngine on SSLCertificateFile /etc/ssl/certs/castopod.local.crt SSLCertificateKeyFile /etc/ssl/private/castopod.local.key <Directory /var/www/html/castopod/public> Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all </Directory> </VirtualHost> </IfModule>
On active l’hote virtuel tout juste créé :
$ sudo a2ensite castopod.example.conf $ sudo systemctl reload apache2
-
Si on a choisi d’installer Castopod avec un certificat Let’s Encrypt on créer un hôte virtuel Apache comme le suivant :
$ cat /etc/apache2/sites-available/castopod.example.conf <VirtualHost *:80> ServerName castopod.example.com DocumentRoot /var/www/html/castopod/public DirectoryIndex index.php index.html ErrorLog /var/log/apache2/error-castopod.log CustomLog /var/log/apache2/access-castopod.log common <Directory /var/www/html/castopod/public> Options Indexes FollowSymLinks AllowOverride All Require all granted </Directory> </VirtualHost>
On active l’hote virtuel tout juste créé :
$ sudo a2ensite castopod-test.example.conf $ sudo systemctl reload apache2
Puis on fait appel a Certbot pour la génération du certificat et l’adaptation de l’hote virtuel Apache :
$ sudo certbot --apache
Certbot va poser quelques questions : selectionner le domaine correspondant à votre installation de Castopod et activer la redirection automatique vers HTTPS.
Certbot a installé le certificat et la clé associée dans
/etc/letsencrypt/live/castopod.example.com
. Il a également créé un hote virtuel Apache (avec HTTPs activé) et modifié l’hote virtuel Apache original (qu’on avait créé plus tôt) pour que nos utilisateurs et utilisatrices soient redirigées automatiquement vers la version en HTTPs. Il n’y a donc rien de plus à faire ! Voici la tete de l’hote Apache créé par certbot :$ cat /etc/apache2/sites-available/castopod.example-le-ssl.conf <IfModule mod_ssl.c> <VirtualHost *:443> ServerName castopod.example.com DocumentRoot /var/www/html/castopod/public DirectoryIndex index.php index.html ErrorLog /var/log/apache2/error-castopod.log CustomLog /var/log/apache2/access-castopod.log common <Directory /var/www/html/castopod/public> Options Indexes FollowSymLinks AllowOverride All Require all granted </Directory> SSLCertificateFile /etc/letsencrypt/live/castopod.example.com/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/castopod.example.com/privkey.pem Include /etc/letsencrypt/options-ssl-apache.conf </VirtualHost> </IfModule>
-
-
Activer les modules Apache nécéssaires :
$ sudo a2enmod ssl rewrite
-
Vérifier que les extensions php nécéssaires sont bien activées :
$ php -m
On doit voir notamment curl, gd, intl, mbstring et mysqli dans la liste.
-
Vérifier que la version de PHP utilisée est bien la 8.0 ou supérieure :
$ php -i | grep -i "PHP Version"
-
Relancer apache et activer le démarrage au boot :
$ sudo systemctl restart apache2 $ sudo systemctl enable apache2
Terminer l’installation dans l’installeur web
Se rendre à l’adresse du serveur : https://castopod.local/cp-install
par
exemple (nom de domaine défini dans les hôte virtuels Apache).
NB : Il est recommandé de modifier les valeurs par défaut de Admin gateway et Auth Gateway.
Troubleshooting
Quelle est la version de PHP utilisée ?
Avec la commande php --ini
on peut déterminer :
- La version de PHP utilisée : doit être au moins la version 8.0 pour Castopod v1.0.0 alpha 70
- La liste des extensions PHP activées : voir la liste des modules nécéssaires dans la documentation.
- Le chemin du fichier de configuration : utile si on veut ajuster la liste des extensions activées.
Logs Apache
On peut ajuster la verbosité dans le fichier de configuration du virtual host :
/etc/apache2/sites-available/castopod.example.conf
(ou variante avec HTTPs).
On avait au départ : LogLevel info ssl:warn
qu’on peut transformer en
LogLevel debug ssl:warn
dans ce fichier.
Ne pas oublier de recharger Apache après modification.
Les logs sont ensuite consultables par exemple dans /var/log/apache2/error.log
Logs Castopod
On peut aussi augmenter la verbosité des logs Castopod. C’est utile si on tombe par exemple sur une erreur comme “We seem to have hit a snag. Please try again later.” dans le navigateur au moment de l’installation.
- Consulter les logs ici :
/var/www/html/castopod/writable/logs/
- Ajuster la verbosité dans
/var/www/html/castopod/.env
Par exemple, ajouter au fichier la ligne suivante :
logger.threshold = 8
Ici on met Castopod en mode debug, mais on peut ajuster avec les valeurs suivantes :
- 0 = Disables logging, Error logging TURNED OFF
- 1 = Emergency Messages - System is unusable
- 2 = Alert Messages - Action Must Be Taken Immediately
- 3 = Critical Messages - Application component unavailable, unexpected exception.
- 4 = Runtime Errors - Don’t need immediate action, but should be monitored.
- 5 = Warnings - Exceptional occurrences that are not errors.
- 6 = Notices - Normal but significant events.
- 7 = Info - Interesting events, like user logging in, etc.
- 8 = Debug - Detailed debug information.
- 9 = All Messages
Vrac : Supprimer un podcast en CLI
Il y a quelques temps, il n'était pas encore possible de supprimer un podcast via l’interface web de castopod, je m’en étais sorti de cette façon (et donc je laisse ça là pour mémoire, mais sans garantie que ce soit toujours utile) :
-
Supprimer l’entrée dans la base de données
SELECT id,name from cp_podcasts; DELETE from cp_podcasts WHERE name="Astrosheep" ;
-
Vider le cache :
$ sudo rm /var/www/html/castopod-host/writable/cache/*
Conclusion
Je retourne écouter des podcasts. J’espère que tout ça en aura aidé certain.e.s !