Clientes XMPP

Este módulo de bate-papo é baseado no protocolo XMPP, também conhecido como Jabber. Portanto, é possível conectar-se aos bate-papos usando software cliente XMPP. Isso pode ser útil, por exemplo, para facilitar as operações de moderação.

Para obter a documentação do usuário associada a esses recursos, consulte a página de documentação do usuário.

Info

A ativação desses recursos requer alterações de configuração no servidor e nos registros DNS. Não é possível configurar isso apenas pela interface do Peertube e requer algumas habilidades básicas de administração do sistema.

Entre na sua conta Peertube

Warning

Este recurso ainda não está disponível e estará disponível em uma versão futura do plugin.

Conexão usando uma conta XMPP externa

Para habilitar esse recurso, você precisará configurar seu servidor e registros DNS para que os clientes XMPP possam encontrar e acessar o servidor Prosody que este plugin usa internamente.

Configurações do plugin

Comece acessando as configurações do plugin de chat ao vivo da sua instância e ative a opção “Habilitar conexão com a sala usando contas XMPP externas”. Ao marcar esta opção, as novas configurações serão exibidas abaixo.

Primeiro, o campo “Porta de servidor Prosody para servidor”. O padrão é 5269, que é a porta padrão para este serviço. No entanto, você pode alterar para outra porta, se ela já estiver em uso no seu servidor.

Em seguida, o campo “Interfaces de rede entre servidores” permite especificar em quais interfaces de rede o servidor deve escutar. O valor padrão “*, ::” indica que todos os endereços IP devem ser escutados. Você pode alterar esses valores se desejar escutar apenas determinados endereços IP. A sintaxe é explicada ao lado da configuração.

Para a configuração “Pasta de certificados”, você pode deixá-la vazia. Nesse caso, o plugin gerará automaticamente certificados autoassinados. Alguns servidores XMPP podem se recusar a conectar, dependendo de sua configuração. Nesse caso, você pode indicar aqui um caminho no servidor, no qual deverá colocar os certificados a serem usados pelo módulo. Cabe a você gerá-los e renová-los. Veja abaixo para mais informações.

Firewall

Você deve abrir a porta configurada (5269 por padrão) no seu firewall.

Se você estiver usando o Docker para seu Peertube, precisará modificar o arquivo docker-compose.yml para abrir a porta 5269 do contêiner peertube, para que o mundo externo possa se conectar a ele.

DNS

Você precisa adicionar registros DNS permitindo que servidores remotos encontrem os componentes “room.your_instance.tld” e “external.your_instance.tld”.

A maneira mais fácil de fazer isso é adicionar registros SRV para o “room” e o “external” subdomínio:

  • nome do registro: _xmpp-server._tcp.room.your_instance.tld. (substitua «your_instance.tld» pelo URI da sua instância)

  • TTL: 3600

  • classe: IN

  • SRV: 0

  • prioridade: 0

  • peso: 5

  • porta: 5269 (adaptar se você alterou a porta padrão)

  • alvo: your_instance.tld. (substitua pelo uri da sua instância)

  • nome do registro: _xmpp-server._tcp.external.your_instance.tld. (substitua «your_instance.tld» pelo uri da sua instância)

  • TTL: 3600

  • classe: IN

  • SRV: 0

  • prioridade: 0

  • peso: 5

  • porta: 5269 (adaptar se você alterou a porta padrão)

  • alvo: your_instance.tld. (substitua pelo uri da sua instância)

Tenha cuidado para manter o ponto depois de “your_instance.tld”.

Usando o comando dig para verificar seus registros, você deverá obter um resultado semelhante a este:

$ dig +short _xmpp-server._tcp.room.videos.john-livingston.fr. SRV
0 5 5269 vídeos.john-livingston.fr.

$ dig +short _xmpp-server._tcp.external.videos.john-livingston.fr. SRV
0 5 5269 vídeos.john-livingston.fr.

Se você não estiver usando a porta padrão 5269, também precisará adicionar um registro SRV para _xmpp-server._tcp.your_instance.tld. (o mesmo que acima, mas sem o prefixo room.). É claro que você também pode adicionar este registro se usar a porta padrão. Também funcionará.

Usando certificados confiáveis

Os certificados autoassinados que este plugin usa por padrão podem ser rejeitados por alguns servidores XMPP, por motivos de segurança.

É possível usar certificados validados por uma autoridade certificadora. No entanto, isso requer conhecimentos avançados de administração de sistemas. De fato, devido à multiplicidade de casos de uso possíveis, é impossível documentar todas as situações aqui. Esta documentação, portanto, explicará apenas o objetivo a ser alcançado e fornecerá um exemplo adequado apenas para uma situação “básica” (instalação manual do Peertube, usando letsencrypt). Se você estiver em outra situação (instalação do Docker, certificados assinados por outra autoridade, etc.), terá que adaptar essa abordagem por conta própria.

Princípio básico

Cabe a você gerar certificados válidos para os domínios sua_instância.tld e room.sua_instância.tld. Você pode usar qualquer método suportado pelo Prosody.

Você deve então colocar esses certificados em uma pasta que seja acessível ao usuário peertube e especificar essa pasta na configuração do plugin “Pasta de certificados”.

Tip

Se você quiser usar o utilitário ProsodyCtl para importar certificados, este utilitário estará disponível (após o Peertube ser iniciado) usando o seguinte comando (adaptando o caminho para sua pasta de dados do Peertube e substituindo “xxx” pelos argumentos que você deseja passar para o 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

O plugin verificará uma vez por dia se algum arquivo foi modificado nesta pasta e recarregará o Prosody, se necessário.

Método para o caso simples

Assumimos aqui que sua instalação do Peertube é “clássica” (sem uso do Docker) e que os certificados são gerados pelo letsencrypt, usando a ferramenta certbot.

Primeiramente, precisamos criar um certificado para o subdomínio room.your_instance.tld: este é o URI do componente MUC (salas de bate-papo XMPP). Mesmo que as conexões sejam feitas em your_instance.tld, precisaremos de um certificado válido para este subdomínio.

Comece configurando uma entrada DNS para room.your_instance.tld, que aponta para o seu servidor. Você pode usar uma entrada CNAME (ou uma entrada A e uma entrada AAAA).

Em seguida, usaremos o nginx (já instalado no seu Peertube) para gerar o certificado certbot. Criaremos um novo site. No arquivo /etc/nginx/site-available/room.peertube, adicione:

servidor {
  ouvir 80;
  ouvir [::]:80;
  nome_do_servidor sala.sua_instância.tld;

  localização /.well-known/acme-challenge/ {
    tipo_padrão "texto/simples";
    raiz /var/www/certbot;
  }
  localização / { retornar 301 https://sua_instância.tld; }
}

Em seguida, habilite o site:

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

Em seguida, preparamos a pasta para a qual importaremos os certificados. Presumimos que você já tenha o plugin ativo. Criaremos a seguinte pasta (se ainda não existir), com o usuário peertube, para garantir que não haja problemas de permissão:

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

Agora você precisa configurar esta pasta nas configurações do plugin, no parâmetro “Pastas de certificados”. É importante fazer isso agora, caso contrário, o script de importação de certificados colocará os certificados na pasta errada.

Configuraremos o certbot para importar os certificados gerados para a pasta Prosody. Podemos usar o utilitário ProsodyCtl incluído no plugin.

Observação: para estar disponível, o plugin deve ter sido iniciado pelo menos uma vez.

Criaremos um arquivo /etc/letsencrypt/renewal-hooks/deploy/prosody.sh contendo:

#!/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.sua_instância.tld sua_instância.tld /etc/letsencrypt/live

Então pedimos para gerar o certificado:

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

Se o certbot oferecer vários métodos para gerar o certificado, escolha “nginx”.

Normalmente, agora você deve encontrar os certificados na pasta configurada.

Observação: na primeira vez que fizer isso, você precisará reiniciar o Prosody. A maneira mais fácil de fazer isso é reiniciar o Peertube.

Método para o caso Docker

Este método funciona com o guia Docker oficialmente suportado do PeerTube.

Primeiro, certifique-se de criar uma entrada DNS para room.your_instance.tld, que aponta para o seu servidor. Você pode usar uma entrada CNAME (ou uma entrada A e uma entrada AAAA). Isso é necessário para que o Let’s Encrypt valide o domínio para geração do certificado.

Entre no diretório onde seu arquivo docker-compose.yml está.

Abra um shell no contêiner certbot:

docker exec -it certbot /bin/sh

Execute o certbot:

certbot

Serão apresentadas uma série de prompts. Digite 2 para o tipo de autenticação:

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

Digite o nome de domínio 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

Entre no diretório onde o servidor web PeerTube atende solicitações para o Let’s Encrypt, /var/www/certbot:

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

Você deverá ver uma saída como esta:

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

Execute o comando abaixo dentro do contêiner certbot para conceder acesso de leitura aos novos certificados e chaves privadas do grupo peertube. Observação: Isso também tornará os arquivos legíveis para o grupo com ID 999 no sistema host. Verifique os grupos em seu sistema para avaliar se isso representa um risco antes de executar este comando.

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

Saia do contêiner certbot:

exit

Modifique seu arquivo docker-compose.yml, alterando a linha entrypoint no serviço certbot para o seguinte. É o mesmo que o anterior, mas será executado automaticamente após cada renovação de certificado.

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

Continuando a modificar docker-compose.yml, adicione o volume do certificado certbot ao contêiner peertube. Deve ficar algo assim:

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

Reinicie seus serviços:

docker-compose down; docker-comopse up -d

Nas configurações do plugin de chat ao vivo nas configurações de administração do PeerTube, defina o diretório do certificado como o seguinte:

/etc/letsencrypt/live

Salve as configurações do plugin e verifique se o Prosody pode ver os certificados:

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

Solução de problemas

Se não conseguir fazer funcionar, você pode usar a ferramenta de diagnóstico (há um botão no topo da página de configurações do plugin) e dar uma olhada na seção «Verificação de prosódia».