O Mastodon armazena seus dados, incluindo publicações, mídias e seguidores, no servidor que você escolheu. Se perder o acesso a esse servidor ou ele for desativado, seus dados podem desaparecer. A exportação manual pela interface web cria um arquivo de backup, mas você precisa baixá-lo toda vez e armazená-lo localmente. Este artigo explica como automatizar esse processo de exportação e enviar o arquivo diretamente para um bucket Amazon S3 usando um script simples e uma tarefa agendada.
A automação usa a API do Mastodon para disparar uma exportação e uma ferramenta de linha de comando para enviar o arquivo resultante ao S3. Você não precisa de habilidades avançadas de programação. Basta ter um token de acesso do Mastodon, uma conta AWS com um bucket S3 e um sistema que possa executar um script em um cronograma. Após a configuração, seu backup será executado sem intervenção manual.
Este guia cobre todo o processo: gerar um token de API do Mastodon, criar um script Python para buscar a exportação, instalar a AWS CLI para o upload e agendar o script no Windows ou Linux. Você também aprenderá a lidar com erros comuns, como tokens expirados ou falhas de upload.
Principais conclusões: Automatizando exportações do Mastodon para o S3
- Token de API do Mastodon em Preferências > Desenvolvimento: Concede ao script acesso para solicitar um arquivo de exportação completo da conta.
- Script Python com a biblioteca requests: Baixa o arquivo de exportação do endpoint da API do Mastodon.
- Comando aws s3 cp da AWS CLI: Envia o arquivo baixado para o seu bucket S3.
- Agendador de Tarefas ou cron: Executa o script semanal ou mensalmente sem entrada manual.
Como funciona a automação da exportação do Mastodon
O Mastodon fornece um endpoint da API REST que dispara uma exportação completa da conta. A exportação inclui seus toots, anexos de mídia, listas, favoritos e dados de seguidores. O servidor gera um arquivo zip e retorna uma URL de download. Você deve autenticar com um token de acesso que tenha o escopo read.
O script de automação envia uma requisição POST para o endpoint de exportação, aguarda a geração do arquivo e então baixa o arquivo. Após o download, o script chama a AWS CLI para copiar o arquivo para o seu bucket S3. O script também faz a limpeza excluindo o arquivo local após o upload bem-sucedido.
Pré-requisitos
Antes de escrever o script, prepare o seguinte:
- Uma conta no Mastodon em qualquer instância. A instância deve suportar acesso à API, o que a maioria das instâncias públicas faz.
- Uma conta AWS com um bucket S3. O bucket deve ter permissões de gravação para o usuário ou função IAM que você usar.
- AWS CLI instalada e configurada na máquina que executará o script. Execute
aws configurepara definir sua chave de acesso, chave secreta e região. - Python 3.6 ou superior com a biblioteca
requestsinstalada. Instale compip install requests.
Passos para criar o script de backup automático
Passo 1: Gerar um token de acesso à API do Mastodon
- Acesse as configurações da sua conta no Mastodon
Clique no ícone de engrenagem na interface web do Mastodon e selecione Preferências. - Navegue até Desenvolvimento
Na barra lateral esquerda, clique em Desenvolvimento. - Crie um novo aplicativo
Clique no botão Novo Aplicativo. - Configure o aplicativo
Digite um nome como “Script de Backup Automático”. Em Escopos, selecione apenas read. Não selecione escopos write ou follow. - Envie e copie o token
Clique em Enviar. Na próxima página, copie o valor de Seu token de acesso. Armazene-o com segurança. Você o adicionará ao script posteriormente.
Passo 2: Escrever o script de backup em Python
Crie um novo arquivo chamado mastodon_backup.py e cole o código a seguir. Substitua os valores de espaço reservado pelos seus próprios.
import requests
import os
import subprocess
from datetime import datetime
# Configuração
MASTODON_INSTANCE = "https://sua-instancia.example" # Substitua pela URL da sua instância
ACCESS_TOKEN = "seu_token_de_acesso_aqui" # Substitua pelo seu token
S3_BUCKET = "s3://seu-nome-de-bucket/backups/" # Substitua pelo caminho do seu bucket
LOCAL_DIR = "/tmp/mastodon_backup" # Diretório temporário para download
# Cria o diretório temporário se não existir
os.makedirs(LOCAL_DIR, exist_ok=True)
# Passo 1: Solicitar exportação
export_url = f"{MASTODON_INSTANCE}/api/v1/exports"
headers = {"Authorization": f"Bearer {ACCESS_TOKEN}"}
response = requests.post(export_url, headers=headers)
if response.status_code != 200:
print(f"Falha ao solicitar exportação: {response.status_code}")
exit(1)
data = response.json()
export_id = data.get("id")
status_url = f"{MASTODON_INSTANCE}/api/v1/exports/{export_id}"
# Passo 2: Aguardar até que a exportação esteja pronta
import time
while True:
status_response = requests.get(status_url, headers=headers)
if status_response.status_code != 200:
print(f"Falha ao verificar status da exportação: {status_response.status_code}")
exit(1)
status_data = status_response.json()
if status_data.get("processed"):
download_url = status_data.get("url")
break
time.sleep(10)
# Passo 3: Baixar o arquivo
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
local_file = os.path.join(LOCAL_DIR, f"mastodon_export_{timestamp}.zip")
print(f"Baixando exportação para {local_file}")
download_response = requests.get(download_url, headers=headers)
with open(local_file, "wb") as f:
f.write(download_response.content)
# Passo 4: Enviar para o S3
print(f"Enviando para {S3_BUCKET}")
result = subprocess.run(["aws", "s3", "cp", local_file, S3_BUCKET], capture_output=True, text=True)
if result.returncode != 0:
print(f"Falha no upload: {result.stderr}")
exit(1)
# Passo 5: Limpar arquivo local
os.remove(local_file)
print("Backup concluído com sucesso")
Passo 3: Testar o script manualmente
- Abra um terminal ou prompt de comando
Navegue até o diretório que contémmastodon_backup.py. - Execute o script
Digitepython mastodon_backup.py. O script solicitará a exportação, baixará e enviará para o S3. Verifique a saída do console em busca de erros. - Verifique o upload
Faça login no Console de Gerenciamento da AWS, abra seu bucket S3 e confirme se o arquivo zip aparece na pastabackups/.
Passo 4: Agendar o script para execução automática
Escolha o método de agendamento para seu sistema operacional.
Windows: Agendador de Tarefas
- Abra o Agendador de Tarefas
Pressione Win+R, digitetaskschd.msce pressione Enter. - Crie uma nova tarefa
Clique em Criar Tarefa no painel Ações. Dê um nome como “Backup Mastodon”. - Defina o gatilho
Vá para a guia Gatilhos e clique em Novo. Defina a frequência como semanal ou mensal. Clique em OK. - Defina a ação
Vá para a guia Ações e clique em Novo. Defina Ação como Iniciar um programa. Em Programa/script, insira o caminho completo parapython.exe. Em Adicionar argumentos, insira o caminho completo paramastodon_backup.py. Clique em OK. - Configure condições
Desmarque Iniciar a tarefa apenas se o computador estiver na alimentação CA se quiser que execute na bateria. Clique em OK para salvar.
Linux: cron
- Abra o editor crontab
Executecrontab -eno terminal. - Adicione uma linha cron
Adicione a seguinte linha para executar o script todo domingo às 3h:0 3 0 /usr/bin/python3 /home/usuario/mastodon_backup.py - Salve e saia
O cron habilitará automaticamente o job.
Problemas comuns e como resolvê-los
API do Mastodon retorna 401 Não Autorizado
O token de acesso está incorreto ou expirou. Gere um novo token em Preferências > Desenvolvimento. Certifique-se de que o token tenha o escopo read. Copie o novo token para o script.
Solicitação de exportação retorna 422 Entidade Não Processável
Sua conta no Mastodon pode ter muitas exportações pendentes. Aguarde 15 minutos e tente novamente. O servidor limita a frequência com que você pode solicitar uma exportação completa. Se o erro persistir, verifique a documentação do limite de taxa da API da instância.
Falha no upload da AWS CLI com Acesso Negado
O usuário ou função IAM usado pela AWS CLI não tem permissão para gravar no bucket S3. Anexe a política AmazonS3FullAccess ao usuário IAM ou use uma política mais restritiva que inclua s3:PutObject no ARN do bucket.
Script é executado, mas nenhum arquivo aparece no S3
Verifique a saída do console em busca de mensagens de erro. O script pode ter falhado durante o download ou upload. Execute o script manualmente com python mastodon_backup.py para ver a saída completa. Verifique se a AWS CLI está configurada com a região e credenciais corretas.
Exportação manual vs backup automatizado para S3: principais diferenças
| Item | Exportação manual via interface web | Script de backup automatizado para S3 |
|---|---|---|
| Método de disparo | Clicar em um botão em Preferências > Exportar | Requisição à API a partir de um script agendado |
| Local de armazenamento | Pasta de download do computador local | Bucket Amazon S3 (nuvem) |
| Frequência | Deve ser feita manualmente a cada vez | Executa em um cronograma (cron ou Agendador de Tarefas) |
| Retenção de arquivos | Depende dos hábitos de backup local do usuário | Mantido automaticamente no S3 com versionamento, se ativado |
| Segurança | Arquivo armazenado no disco local, sem criptografia em repouso por padrão | S3 suporta criptografia do lado do servidor (SSE-S3 ou SSE-KMS) |
Agora você tem um sistema totalmente automatizado que exporta seus dados do Mastodon e os armazena com segurança no Amazon S3. O script é executado em um cronograma definido por você, então nunca precisará lembrar de fazer backup manualmente. Para proteção extra, ative o versionamento do S3 no seu bucket para reter várias cópias de backup. Se você gerencia várias contas no Mastodon, modifique o script para percorrer o token e o caminho do bucket de cada conta.