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.
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
- 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 porsudo apt install -y nodejs. Instale o PostgreSQL:sudo apt install postgresql postgresql-contrib -y. Verifique a versão do Node.js:node --versiondeve retornar v16.x ou superior. - 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 localhoste digite a senha. Digite\qpara sair. - 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. - 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.comDATABASE_URL=postgres://relayuser:suasenha@localhost:5432/relaydbPORT=3000NODE_ENV=production
Substituarelay.seudominio.compelo seu domínio real. Substituasuasenhapela senha que você definiu para o usuário PostgreSQL. Salve e saia. - 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. - 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 startupe siga o comando exibido. - 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 -ye executesudo certbot --nginx -d relay.seudominio.com. Siga as instruções. Recarregue o Nginx:sudo systemctl reload nginx. - 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 visitehttps://relay.seudominio.com. Você deve ver uma resposta JSON com{"message":"ActivityRelay running"}. Isso confirma que o relay está operacional. - 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.
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.