Ce module de tchat repose sur le protocole XMPP, aussi connu sous le nom de Jabber. Il est donc possible de se connecter aux tchats en utilisant des logiciels clients XMPP. Cela peut par exemple être utile pour faciliter les opérations de modération.
Pour la documentation utilisateur⋅rice associé à ces fonctionnalités, veuillez vous référer à la page de documentation utilisateur⋅rice.
L’activation de ces fonctionnalités demande des changements de configuration sur le serveur, et sur les enregistrements DNS. Il n’est pas possible de les activer uniquement depuis l’interface de Peertube, et cela demande d’avoir quelques compétences basiques d’admin système.
Cette fonctionnalité n’est pas encore disponible, et viendra dans une prochaine version du plugin.
Pour activer cette fonctionnalité, il va falloir paraméter votre serveur et vos enregistrements DNS, de sorte que les clients XMPP puissent trouver et accéder au serveur Prosody que ce plugin utilise en interne.
Commencez par aller dans les paramètres du plugin livechat de votre instance, puis activez le paramètre «Autoriser les connexions aux salons via des comptes XMPP externes». En cochant celui-ci, de nouveaux champs apparaissent en dessous.
Tout d’abord, le champs «Port Prosody serveur vers serveur». Celui-ci prend par défaut la valeur 5269, qui est le port standard pour ce service. Vous pouvez toutefois changer pour un autre port, si celui-ci est déjà utilisé sur votre serveur.
Ensuite, le champs «Interfaces réseau pour les connexions serveur vers serveur» vous permet d’indiquer sur quelles interfaces réseau le serveur doit écouter. La valeur par défaut «*, ::» indique d’écouter sur toutes les addresses IP. Vous pouvez changer ces valeurs, si vous souhaiter n’écouter que sur certaines IP. La syntaxe est expliquée à coté du champs.
Pour le champs «Dossiers des certificats», vous pouvez le laisser vide. Dans ce cas là, le plugin va générer automatiquement des certificats auto-signés. Il se pourrait que certains serveurs XMPP refusent de se connecter, cela dépendant de leur paramétrage. Dans ce cas, vous pouvez indiquer ici un chemin sur le serveur, dans lequel vous placerez des certificats à utiliser par le module. Charge à vous de les générer et de les renouveller. Voir plus loin pour une explication plus détaillée.
Vous devez ouvrir le port configuré (5269 par défaut) sur votre pare-feu.
Si vous utilisez Docker pour votre Peertube, il faut modifier le fichier
docker-compose.yml
pour ouvrir le port 5269 du conteneur peertube
au
monde extérieur.
You need to add DNS records allowing remote servers to find “room.your_instance.tld” and “external.your_instance.tld” components.
The easiest way to do this is to add SRV records for the “room” and “external” subdomain:
nom de l’enregistrement : _xmpp-server._tcp.room.votre_instance.tld. (remplacez «votre_instance.tld» par la valeur adéquate)
TTL: 3600
class: IN
SRV: 0
priority: 0
weight: 5
port: 5269 (adaptez si vous avez changé le port)
target: votre_instance.tld. (remplacez par la valeur adéquate)
record name: _xmpp-server._tcp.external.your_instance.tld. (replace «your_instance.tld» by your instance uri)
TTL: 3600
class: IN
SRV: 0
priority: 0
weight: 5
port: 5269 (adaptez si vous avez changé le port)
target: votre_instance.tld. (remplacez par la valeur adéquate)
Attention à bien conserver le point après «votre_instance.tld».
Using the dig
command to check your records, you should get a result
similar to this:
$ dig +short _xmpp-server._tcp.room.videos.john-livingston.fr. SRV
0 5 5269 videos.john-livingston.fr.
$ dig +short _xmpp-server._tcp.external.videos.john-livingston.fr. SRV
0 5 5269 videos.john-livingston.fr.
Si vous n’utilisez pas le port standard 5269
, vous devez ajouter un
autre enregistrement SRV pour _xmpp-server._tcp.votre_instance.tld.
(pareil que précédemment, mais en enlevant le préfixe room.
). Bien sûr,
vous pouvez l’ajouter même si vous utilisez le port standard. Cela
fonctionnera également.
Les certificats auto-signés que le plugin utilise par défaut peuvent ne pas convenir à tous les serveurs distants. En effet, ceux-ci peuvent les refuser pour raison de sécurité.
Il est possible d’utiliser des certificats validés par une autorité de certification. Cependant cela demande des connaissances d’administration système avancées. En effet, devant la multitude de cas possibles, il est impossible de documenter ici toutes les situations. La présente documentation va donc se contenter de vous expliquer le but à atteindre, et donner un example qui ne conviendra qu’à une situation «basique» (installation manuelle de Peertube, avec utilisation de letsencrypt). Si vous êtes dans une autre situation (installation Docker, certificats signés par une autre autorité, etc…), il vous faudra adapter la démarche.
À vous de générer des certificats valides pour les domaines
votre_instance.tld
et room.votre_instance.tld
. Vous pouvez utiliser
n’importe quelle méthode supportées par
Prosody.
Vous devez ensuite placer ces certificats dans un dossier qui sera
accessible au user peertube
, puis indiquer ce dossier dans le paramètre du
plugin «Dossiers des certificats».
Si vous voulez utiliser l’utilitaire ProsodyCtl (pour importer des
certificats letsencrypts, générer des certificats, etc…), cet utilitaire
est disponible (une fois Peertube démarré) en utilisant la commande qui suit
(en adaptant le chemin vers votre dossier data Peertube, et en remplaçant
«xxx» par les arguments que vous souhaitez passer à prosodyctl) : sudo -u peertube /var/www/peertube/storage/plugins/data/peertube-plugin-livechat/prosodyAppImage/squashfs-root/AppRun prosodyctl xxx
Le plugin va vérifier une fois par jour si des fichiers ont été modifiés dans ce dossier, et recharger Prosody le cas échéant.
Nous supposons ici que votre installation de Peertube est «classique» (pas d’utilisation de Docker), et que les certificats sont générés par letsencrypt, en utilisant l’outils certbot.
Tout d’abord, on va devoir créer un certificat pour le sous-domain
room.votre_instance.tld
: c’est l’uri du composant MUC (salons de
discussion XMPP). Même si les connections se font sur votre_instance.tld
,
il va nous falloir un certificat valide pour ce sous-domaine.
Commencez donc par paramétrer une entrée DNS pour room.votre_instance.tld
,
qui pointe sur votre serveur. Vous pouvez tout à fait faire une entrée CNAME
(ou une entrée A et une entrée AAAA).
Ensuite, nous allons utiliser nginx (déjà installé pour votre Peertube) pour
générer le certificat certbot. On va créer un nouveau site. Dans le fichier
/etc/nginx/site-available/room.peertube
, ajoutez :
server {
listen 80;
listen [::]:80;
server_name room.votre_instance.tld;
location /.well-known/acme-challenge/ {
default_type "text/plain";
root /var/www/certbot;
}
location / { return 301 https://votre_instance.tld; }
}
Ensuite on active ce site :
ln -s /etc/nginx/sites-available/room.peertube /etc/nginx/sites-enabled/
systemc reload nginx
On prépare ensuite le dossier dans lequel on va plus tard importer les
certificats. On suppose ici que vous avez déjà le plugin actif. On va créer
le dossier suivant (s’il n’existe pas déjà), avec le user peertube
pour
être sûr qu’il n’y a pas de problème de droits :
sudo -u peertube mkdir /var/www/peertube/storage/plugins/data/peertube-plugin-livechat/prosody/certs
Il faut maintenant configurer ce dossier dans les paramètres du plugin, pour «Dossiers des certificats». C’est important de le faire avant la suite, sinon le script d’import des certificats va les placer au mauvais endroit.
On va configurer certbot pour qu’il importe les certificats générés dans le dossier de Prosody. On va pouvoir utiliser l’utilistaire ProsodyCtl packagé dans le plugin.
Note : pour qu’il soit disponible, il faut que le plugin ai démarré au moins une fois.
On va créer un fichier /etc/letsencrypt/renewal-hooks/deploy/prosody.sh
contenant :
#!/bin/sh
/var/www/peertube/storage/plugins/data/peertube-plugin-livechat/prosodyAppImage/squashfs-root/AppRun prosodyctl \
--root \
--config /var/www/peertube/storage/plugins/data/peertube-plugin-livechat/prosody/prosody.cfg.lua \
cert import \
room.votre_instance.tld votre_instance.tld /etc/letsencrypt/live
Puis on demande à générer le certificat :
certbot -d room.videos.john-livingston.fr
Si certbot vous propose plusieurs méthodes pour générer le certificat, choisissez «nginx».
Normalement vous devriez maintenant trouver les certificats dans le dossier configuré.
Note : la première fois que vous faites tout ça, il va falloir recharger Prosody. Le plus simple pour cela est de redémarrer Peertube.
Cette méthode marche avec le guide Docker officiel de Peertube.
Tout d’abord, assurez-vous de créer une entrée DNS pour
room.your_instance.tld
, qui pointe vers votre serveur. Vous pouvez
utiliser une entrée CNAME (ou une entrée A et une entrée AAAA). Ceci est
nécessaire pour que Let’s Encrypt valide le domaine pour la génération du
certificat.
Entrez le répertoire où se trouve votre fichier docker-compose.yml
.
Ouvrez un shell dans le conteneur certbot :
docker exec -it certbot /bin/sh
Lancez certbot :
certbot
Une série d’invites vous sera présentée. Entrez 2
pour le type
d’authentification :
How would you like to authenticate with the ACME CA?
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2
Enter the domain name room.your_instance.tld
:
Please enter the domain name(s) you would like on your certificate (comma and/or space separated) (Enter 'c' to cancel): room.your_instance.tld
Enter the directory where the PeerTube webserver serves requests for Let’s
Encrypt, /var/www/certbot
:
Input the webroot for <room.your_instance.tld>: (Enter 'c' to cancel): /var/www/certbot
Vous devriez obtenir un résultat semblable à celui qui suit :
Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/room.your_instance.tld/fullchain.pem
Key is saved at: /etc/letsencrypt/live/room.your_instance.tld/privkey.pem
Exécutez la commande suivante à l’intérieur du conteneur certbot pour donner un accès en lecture aux nouveaux certificats et clés privées au groupe peertube. Note : Cette commande rendra également les fichiers accessibles en lecture au groupe dont l’identifiant est 999 sur le système hôte. Vérifiez les groupes sur votre système pour évaluer le risque avant d’exécuter cette commande.
chown -R root:999 /etc/letsencrypt/live; \
chmod 750 /etc/letsencrypt/live; \
chown -R root:999 /etc/letsencrypt/archive; \
chmod 750 /etc/letsencrypt/archive; \
find /etc/letsencrypt/ -name 'privkey*' -exec chmod 0640 {} \;
Sortez du conteneur certbot :
exit
Modifiez votre fichier docker-compose.yml
, en changeant la ligne
entrypoint
sous le service certbot
par ce qui suit. C’est la même chose
que ci-dessus, mais elle doit être exécutée automatiquement après chaque
renouvellement de certificat.
entrypoint: /bin/sh -c "trap exit TERM; while :; do certbot renew --webroot -w /var/www/certbot; chown -R root:999 /etc/letsencrypt/live; chmod 750 /etc/letsencrypt/live; chown -R root:999 /etc/letsencrypt/archive; chmod 750 /etc/letsencrypt/archive; find /etc/letsencrypt/ -name 'privkey*' -exec chmod 0640 {} +; sleep 12h & wait $${!}; done;"
En continuant à modifier docker-compose.yml
, ajoutez le volume certbot
dans le conteneur peertube. Il devrait ressembler à ceci :
volumes:
- ./docker-volume/certbot/conf:/etc/letsencrypt
Redémarrez vos services :
docker-compose down; docker-comopse up -d
Dans les paramètres du plugin livechat à partir des paramètres d’administration de PeerTube, définissez le répertoire des certificats comme suit :
/etc/letsencrypt/live
Sauvegardez les paramètres du plugin et vérifiez que Prosody peut voir les certificats :
docker-compose exec -u peertube \
peertube \
/data/plugins/data/peertube-plugin-livechat/prosodyAppImage/squashfs-root/AppRun \
prosodyctl \
--config /data/plugins/data/peertube-plugin-livechat/prosody/prosody.cfg.lua \
check certs
Si cela ne fonctionne pas, vous pouvez utiliser l’outils de diagnostic (un bouton se trouve en haut de la page des paramètres du plugin), et notamment regarder ce que dit la section «Prosody check».