Como Criar um Relay Personalizado para Mastodon com o Projeto Activity-Relay
🔍 WiseChecker

Como Criar um Relay Personalizado para Mastodon com o Projeto Activity-Relay

Relays do Mastodon permitem que instâncias compartilhem postagens públicas de um servidor para muitos outros, sem que cada servidor precise seguir manualmente cada usuário. Sem um relay, cada administrador de instância precisa assinar usuários remotos individualmente, o que se torna inviável conforme a federação cresce. O projeto Activity-Relay oferece uma solução open-source e auto-hospedada que atua como um hub central para encaminhar timelines públicas. Este artigo explica como implantar o Activity-Relay em um servidor Linux, configurá-lo com sua instância Mastodon e gerenciar assinaturas de relay de forma eficaz.

Principais Pontos: Implantando o Activity-Relay para Federação no Mastodon

  • Projeto Activity-Relay no GitHub: Uma aplicação Node.js que retransmite postagens públicas de instâncias Mastodon inscritas para todos os outros assinantes.
  • Pré-requisitos do servidor: Um VPS Linux com Node.js 16+, PostgreSQL 12+ e um nome de domínio apontado para o IP do servidor.
  • Formato da URL de assinatura do relay: https://relay.seudominio.com/inbox — usado por administradores de instância para inscrever seu servidor.

ADVERTISEMENT

O que o Activity-Relay Faz e Por Que Você Precisa Dele

Activity-Relay é um servidor Node.js leve que implementa o padrão de relay do ActivityPub. Quando uma instância envia uma postagem pública para o relay, o relay encaminha essa postagem para todas as outras instâncias inscritas. Isso elimina a necessidade de administradores de instância seguirem manualmente usuários em dezenas de servidores remotos.

O relay não armazena postagens permanentemente. Ele atua como um encaminhador sem estado. Cada postagem é recebida, verificada quanto à validade e enviada a todos os assinantes. O relay também gerencia solicitações de assinatura e remoção por meio das atividades padrão do ActivityPub Follow e Undo.

Antes de começar, você precisa de um servidor Linux (Ubuntu 22.04 LTS recomendado) com pelo menos 1 GB de RAM e 10 GB de armazenamento. Você deve ter acesso root ou sudo. Também precisa de um nome de domínio que aponte para o endereço IP do servidor. Um proxy reverso como Nginx é necessário para terminação TLS.

Guia Passo a Passo para Construir e Executar o Activity-Relay

  1. Prepare o ambiente do servidor
    Conecte-se ao seu servidor via SSH. Atualize a lista de pacotes e instale Node.js 16 ou posterior, npm e PostgreSQL. Execute: sudo apt update && sudo apt upgrade -y. Em seguida, instale o Node.js a partir do NodeSource: curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash - seguido por sudo apt install -y nodejs. Instale o PostgreSQL: sudo apt install postgresql postgresql-contrib -y. Verifique a versão do Node.js: node --version deve retornar v16.x ou superior.
  2. Crie o banco de dados e o usuário PostgreSQL
    Mude para o usuário postgres: sudo -i -u postgres. Crie um usuário de banco de dados para o relay: createuser relayuser -P. Digite uma senha forte quando solicitado. Crie o banco de dados: createdb relaydb -O relayuser. Saia do shell postgres: exit. Teste a conexão: psql -U relayuser -d relaydb -h localhost e digite a senha. Digite \q para sair.
  3. Clone o repositório Activity-Relay
    Navegue até um diretório onde deseja que o código do relay fique, como /opt: cd /opt. Clone o repositório oficial: git clone https://github.com/trwnh/activity-relay.git. Entre no diretório clonado: cd activity-relay. Instale as dependências npm: npm install. Isso pode levar alguns minutos.
  4. Configure o arquivo de ambiente do relay
    Copie o arquivo de ambiente de exemplo: cp .env.example .env. Abra o arquivo .env com um editor de texto: nano .env. Defina os seguintes valores:
    DOMAIN=relay.seudominio.com
    DATABASE_URL=postgres://relayuser:suasenha@localhost:5432/relaydb
    PORT=3000
    NODE_ENV=production
    Substitua relay.seudominio.com pelo seu domínio real. Substitua suasenha pela senha que você definiu para o usuário PostgreSQL. Salve e saia.
  5. Inicialize o esquema do banco de dados
    Execute o comando de migração do banco de dados: npm run migrate. Isso cria as tabelas necessárias no banco relaydb. Se você vir erros, verifique novamente a DATABASE_URL no seu arquivo .env. O script de migração usa knex.js internamente.
  6. Execute o servidor relay
    Inicie o relay para teste: npm start. O servidor escuta na porta 3000. Pressione Ctrl+C para parar. Para produção, use um gerenciador de processos como pm2: npm install -g pm2. Em seguida, inicie o relay com pm2: pm2 start npm --name "activity-relay" -- start. Salve a lista de processos do pm2: pm2 save. Habilite o pm2 para iniciar na inicialização: pm2 startup e siga o comando exibido.
  7. Configure o Nginx como proxy reverso com TLS
    Instale o Nginx: sudo apt install nginx -y. Crie uma nova configuração de site: sudo nano /etc/nginx/sites-available/relay. Adicione o seguinte conteúdo:
    server {
        listen 80;
        server_name relay.seudominio.com;
        return 301 https://$server_name$request_uri;
    }
    
    server {
        listen 443 ssl http2;
        server_name relay.seudominio.com;
    
        ssl_certificate /etc/letsencrypt/live/relay.seudominio.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/relay.seudominio.com/privkey.pem;
    
        location / {
            proxy_pass http://127.0.0.1:3000;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    }

    Habilite o site: sudo ln -s /etc/nginx/sites-available/relay /etc/nginx/sites-enabled/. Teste a configuração: sudo nginx -t. Obtenha um certificado TLS usando Certbot: sudo apt install certbot python3-certbot-nginx -y e execute sudo certbot --nginx -d relay.seudominio.com. Siga as instruções. Recarregue o Nginx: sudo systemctl reload nginx.

  8. Configure o firewall e teste o relay
    Permita tráfego HTTPS: sudo ufw allow 443/tcp. Também permita SSH: sudo ufw allow 22/tcp. Habilite o firewall: sudo ufw enable. Agora abra um navegador e visite https://relay.seudominio.com. Você deve ver uma resposta JSON com {"message":"ActivityRelay running"}. Isso confirma que o relay está operacional.
  9. Inscreva uma instância Mastodon no seu relay
    Faça login na sua instância Mastodon como administrador. Vá em Preferências > Administração > Relays. Clique no botão Adicionar relay. Digite a URL da caixa de entrada do relay: https://relay.seudominio.com/inbox. Clique em Salvar. A instância envia uma solicitação Follow para o relay. Após alguns segundos, o status do relay mostra Habilitado. Repita este passo para quaisquer outras instâncias que você gerencia.

ADVERTISEMENT

Problemas Comuns de Configuração e Como Evitá-los

Relay Mostra Status “Pendente” Após Adicionar

Se o status do relay no Mastodon permanecer Pendente, o relay não recebeu a atividade Follow. Verifique os logs do relay: pm2 logs activity-relay. Causas comuns incluem um DOMAIN ausente ou incorreto no arquivo .env, um firewall bloqueando a porta 443, ou o Nginx não encaminhando a solicitação corretamente. Verifique se relay.seudominio.com resolve para o IP do servidor. Também certifique-se de que a instância Mastodon consegue alcançar o relay pela internet.

Postagens Não Estão Sendo Encaminhadas para Todos os Assinantes

Quando uma instância envia uma postagem, o relay a encaminha para todos os assinantes. Se algumas instâncias não receberem postagens, verifique se essas instâncias têm uma assinatura de relay ativa. O relay não armazena mensagens, portanto, se uma instância ficou temporariamente offline, ela perde as postagens. O relay também não encaminha postagens para instâncias que bloqueiam a instância de origem. Revise os logs de moderação do Mastodon na instância assinante.

Servidor Relay Falha Sob Carga Pesada

Activity-Relay é single-threaded. Se muitas instâncias assinarem e o tráfego aumentar, o servidor pode ficar sem memória. Aumente a RAM do servidor para pelo menos 2 GB. Você também pode limitar o número de conexões simultâneas adicionando proxy_buffering off; no bloco location do Nginx. Monitore o uso de recursos com htop e configure rotação de logs para os logs do pm2.

Activity-Relay vs Recurso de Relay Integrado do Mastodon

Item Activity-Relay (Auto-Hospedado) Relay Integrado do Mastodon
Implantação Requer um servidor Node.js separado Gerenciado dentro da aplicação Mastodon
Personalização Controle total sobre código e configurações Limitado às opções da interface de administração
Desempenho Recursos dedicados, sem impacto no Mastodon Compartilha recursos com o processo do Mastodon
Gerenciamento de assinaturas Manual via API ou interface de administração Integrado ao painel de administração do Mastodon
Manutenção Você cuida de atualizações e disponibilidade Atualizado junto com o Mastodon

Seu relay agora está ativo e aceitando assinaturas de qualquer instância Mastodon. Para adicionar mais instâncias, repita o passo de assinatura. Você também pode remover um relay clicando em Excluir no painel de administração de relays do Mastodon. Para gerenciamento avançado, o projeto Activity-Relay fornece um endpoint de API em /api/v1/relays para listar assinantes e verificar o status do relay.

ADVERTISEMENT