Klienti XMPP

Tento chatovací modul je založen na protokolu XMPP, známém také jako Jabber. Proto je možné se k chatům připojit pomocí klientského softwaru XMPP. To může být užitečné například pro usnadnění moderátorských operací.

Uživatelskou dokumentaci související s těmito funkcemi naleznete na stránce uživatelská dokumentace.

Info

Povolení těchto funkcí vyžaduje změny konfigurace na serveru a v záznamech DNS. To není možné konfigurovat pouze z rozhraní Peertube a vyžaduje to základní systémové některé základní systémové administrátorské dovednosti.

Přihlášení k účtu Peertube

Varování

Tato funkce zatím není k dispozici a objeví se v některé z budoucích verzí zásuvného modulu.

Připojení pomocí externího účtu XMPP

Chcete-li tuto funkci povolit, musíte nastavit svůj server a záznamy DNS tak, aby klienti XMPP mohli najít Prosody server, který tento zásuvný modul interně používá, a získat k němu přístup.

Nastavení zásuvného modulu

Začněte tím, že přejdete do nastavení pluginu livechat své instance a povolíte nastavení “Povolit připojení k místnosti pomocí externích účtů XMPP”. Zaškrtnutím tohoto nastavení se níže zobrazí nová nastavení.

Především pole “Prosody server to server port”. To je ve výchozím nastavení 5269, což je standardní port pro tuto službu. Můžete jej však změnit na jiný port, pokud je na vašem serveru již používán.

V dalším poli “Síťová rozhraní serveru” můžete zadat, na kterých síťových rozhraních má server naslouchat. Výchozí hodnota “*, ::” znamená, že se má naslouchat na všech IP adresách. Pokud si přejete naslouchat pouze na určitých IP adresách, můžete tyto hodnoty změnit. Syntaxe je vysvětlena vedle nastavení.

Nastavení “Složka certifikátu” můžete ponechat prázdné. V takovém případě bude zásuvný modul automaticky generovat certifikáty podepsané vlastním podpisem. Některé servery XMPP se mohou v závislosti na své konfiguraci odmítnout připojit. V takovém případě zde můžete uvést cestu na serveru, do které je třeba umístit certifikáty, které má modul používat. Je na vás, abyste je vygenerovali a obnovili. Další informace naleznete níže.

Firewall

Na bráně firewall musíte otevřít nakonfigurovaný port (ve výchozím nastavení 5269).

Pokud používáte Docker pro svůj Peertube, je třeba upravit soubor docker-compose.yml tak, aby byl otevřen port 5269 kontejneru peertube, aby se k němu mohl připojit vnější svět.

DNS

Je třeba přidat záznamy DNS umožňující vzdáleným serverům najít komponenty “room.your_instance.tld” a “external.your_instance.tld”.

Nejjednodušší je přidat záznamy SRV pro “room” a “external” subdoménu:

  • název záznamu: _xmpp-server._tcp.room.your_instance.tld. (nahraďte “your_instance.tld” uri vaší instance)

  • TTL: 3600

  • class: IN

  • SRV: 0

  • priority: 0

  • weight: 5

  • port: 5269 (přizpůsobte, pokud jste změnili výchozí port)

  • cíl: your_instance.tld. (nahraďte uri vaší instance)

  • název záznamu: _xmpp-server._tcp.external.your_instance.tld. (nahraďte “your_instance.tld” uri vaší instance)

  • TTL: 3600

  • class: IN

  • SRV: 0

  • priority: 0

  • weight: 5

  • port: 5269 (přizpůsobte, pokud jste změnili výchozí port)

  • cíl: your_instance.tld. (nahraďte uri vaší instance)

Dejte pozor, abyste za “your_instance.tld” ponechali tečku.

Při kontrole záznamů příkazem dig byste měli získat podobný výsledek:

$ 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.

Pokud nepoužíváte standardní port 5269, musíte také přidat záznam SRV pro _xmpp-server._tcp.your_instance.tld. (stejně jako výše, jen bez předpony room.). Tento záznam můžete samozřejmě přidat i v případě, že používáte standardní port. Bude to také fungovat.

Použití důvěryhodných certifikátů

Certifikáty s vlastním podpisem, které tento zásuvný modul ve výchozím nastavení používá, mohou být některými servery XMPP z bezpečnostních důvodů odmítnuty.

Je možné používat certifikáty ověřené certifikační autoritou. To však vyžaduje pokročilé znalosti správy systému. Vzhledem k množství možných případů použití zde skutečně není možné zdokumentovat všechny situace. Tato dokumentace proto pouze vysvětlí cíl, kterého je třeba dosáhnout, a uvede příklad, který bude vhodný pouze pro “základní” situaci (ruční instalace Peertube pomocí letsencrypt). Pokud se nacházíte v jiné situaci (instalace Dockeru, certifikáty podepsané jinou autoritou atd…), budete si muset tento postup přizpůsobit sami.

Základní princip

Je na vás, abyste vygenerovali platné certifikáty pro domény vase_instance.tld a room.your_instance.tld. Můžete použít jakoukoli metodu podporovanou Prosody.

Tyto certifikáty pak musíte umístit do složky, která bude přístupná uživateli peertube, a tuto složku zadat v nastavení pluginu “Certificate folder”.

Tip

Pokud chcete k importu certifikátů použít nástroj ProsodyCtl, je tento nástroj k dispozici (po spuštění Peertube) pomocí následujícího příkazu (upravte cestu k datové složce Peertube a nahraďte “xxx” argumenty, které chcete předat prosodyctl): sudo -u peertube /var/www/peertube/storage/plugins/data/peertube-plugin-livechat/prosodyAppImage/squashfs-root/AppRun prosodyctl --config /var/www/peertube/storage/plugins/data/peertube-plugin-livechat/prosody/prosody.cfg.lua xxx

Zásuvný modul bude jednou denně kontrolovat, zda v této složce nebyly změněny nějaké soubory, a v případě potřeby znovu načte aplikaci Prosody.

Metoda pro jednoduchý případ

Předpokládáme, že vaše instalace Peertube je “klasická” (bez použití Dockeru) a že certifikáty jsou generovány nástrojem letsencrypt pomocí nástroje certbot.

Nejprve musíme vytvořit certifikát pro subdoménu room.your_instance.tld : to je uri komponenty MUC (chatovací místnosti XMPP). I když jsou spojení navázána na vaše_instance.tld, budeme potřebovat platný certifikát pro tuto subdoménu.

Začněte tedy nastavením položky DNS pro room.your_instance.tld, která ukazuje na váš server. Můžete použít položku CNAME (nebo položku A a položku AAAA).

Dále použijeme nginx (již nainstalovaný pro Peertube) k vygenerování certifikátu certbot. Vytvoříme nový web. Do souboru /etc/nginx/site-available/room.peertube přidejte:

server {
  listen 80;
  listen [::]:80;
  server_name room.your_instance.tld;

  location /.well-known/acme-challenge/ {
    default_type "text/plain";
    root /var/www/certbot;
  }
  location / { return 301 https://your_instance.tld; }
}

Poté web povolte:

ln -s /etc/nginx/sites-available/room.peertube /etc/nginx/sites-enabled/
systemc reload nginx

Poté připravíme složku, do které budeme později importovat certifikáty. Předpokládáme, že zásuvný modul již máte aktivní. Vytvoříme následující složku (pokud již neexistuje) s uživatelem peertube, abychom se ujistili, že nedojde k problémům s právy:

sudo -u peertube mkdir /var/www/peertube/storage/plugins/data/peertube-plugin-livechat/prosody/certs

Nyní je třeba tuto složku nakonfigurovat v nastavení zásuvného modulu v parametru “Složky certifikátů”. Je důležité to provést nyní, jinak skript pro import certifikátů vloží certifikáty do nesprávné složky.

Nakonfigurujeme certbot tak, aby vygenerované certifikáty importoval do složky Prosody. Můžeme použít nástroj ProsodyCtl přibalený v zásuvném modulu.

Poznámka: aby byl zásuvný modul k dispozici, musí být alespoň jednou spuštěn.

Vytvoříme soubor /etc/letsencrypt/renewal-hooks/deploy/prosody.sh obsahující:

#!/usr/bin/env 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.your_instance.tld your_instance.tld /etc/letsencrypt/live

Poté požádáme o vygenerování certifikátu:

certbot -d room.videos.john-livingston.fr

Pokud vám certbot nabídne několik způsobů generování certifikátu, vyberte možnost “nginx”.

Nyní byste měli najít certifikáty v nakonfigurované složce.

Poznámka: při prvním použití je nutné znovu načíst aplikaci Prosody. Nejjednodušší způsob, jak to udělat, je restartovat Peertube.

Metoda pro řešení Docker

Tato metoda funguje s oficiálně podporovaným Docker guide od PeerTube.

Nejprve vytvořte položku DNS pro room.your_instance.tld, která bude ukazovat na váš server. Můžete použít položku CNAME (nebo položku A a položku AAAA). To je nutné, aby aplikace Let’s Encrypt ověřila doménu pro generování certifikátu.

Zadejte adresář, ve kterém se nachází váš soubor docker-compose.yml.

Otevřete shell v kontejneru certbot:

docker exec -it certbot /bin/sh

Spusťte certbot:

certbot

Zobrazí se řada výzev. Jako typ ověření zadejte 2:

How would you like to authenticate with the ACME CA?
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2

Zadejte název domény 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

Zadejte adresář, do kterého webový server PeerTube doručuje požadavky na Let’s Encrypt, /var/www/certbot:

Input the webroot for <room.your_instance.tld>: (Enter 'c' to cancel): /var/www/certbot

Měli byste vidět následující výstup:

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

Spusťte níže uvedený příkaz uvnitř kontejneru certbot, abyste skupině peertube poskytli přístup ke čtení nových certifikátů a soukromých klíčů. Poznámka: Tímto způsobem budou soubory přístupné ke čtení také skupině s id 999 v hostitelském systému. Před spuštěním tohoto příkazu zkontrolujte skupiny ve svém systému a vyhodnoťte to jako riziko.

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 {} \;

Ukončení kontejneru certbot:

exit

Upravte soubor docker-compose.yml a změňte řádek entrypoint pod službou certbot na následující. Je to stejné jako výše, ale má se to provádět automaticky po každém obnovení certifikátu.

  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;"

Pokračujte v úpravě souboru docker-compose.yml a přidejte svazek certifikátů certbot do kontejneru peertube. Mělo by to vypadat nějak takto:

  volumes:
    - ./docker-volume/certbot/conf:/etc/letsencrypt

Restartujte služby:

docker-compose down; docker-comopse up -d

V nastavení pluginu livechat v administraci PeerTube nastavte adresář certifikátu na následující hodnotu:

/etc/letsencrypt/live

Uložte nastavení zásuvného modulu a ověřte, zda Prosody vidí certifikáty:

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

Odstraňování potíží

Pokud se vám to nedaří, můžete použít diagnostický nástroj (tlačítko je v horní části stránky s nastavením zásuvného modulu) a podívat se na část “Kontrola Prosody”.