Como administrador de um servidor Mastodon, você precisa de uma estratégia de backup confiável para proteger dados de usuários, arquivos de mídia e configurações. Exportações manuais consomem tempo e estão sujeitas a erros humanos, especialmente ao gerenciar uma instância em crescimento. Este artigo explica como configurar um cron job automatizado que executa uma exportação do Mastodon em um agendamento, criando backups regulares sem intervenção manual. Você aprenderá os comandos específicos, scripts e etapas de agendamento necessários para automatizar o processo de exportação em um servidor Linux.
Principais Conclusões: Backup Automatizado do Mastodon via Cron
- tootctl media remove –days=30: Remove mídia em cache com mais de 30 dias para reduzir o uso de disco antes da exportação.
- pg_dump mastodon_production: Exporta o banco de dados PostgreSQL para um arquivo SQL compactado para recuperação completa dos dados.
- crontab -e com 0 3 : Agenda o script de backup para ser executado diariamente às 3:00 AM, horário local do servidor.
O que o Cron Job de Exportação do Mastodon Faz e Por Que Você Precisa Dele
O cron job de exportação do Mastodon automatiza o processo de backup dos dados da sua instância, incluindo o banco de dados PostgreSQL, arquivos de mídia enviados pelos usuários armazenados no sistema de arquivos e arquivos de configuração como .env.production. Sem um backup automatizado, você corre o risco de perder todas as contas de usuários, postagens, seguidores, mídias e configurações do servidor se houver falha de hardware, corrupção de dados ou um incidente de segurança. Um cron job executa um script shell em intervalos definidos, geralmente diariamente, para criar arquivos compactados dos dados críticos e, opcionalmente, enviá-los para um local de armazenamento remoto, como um bucket S3 ou outro servidor.
Os componentes principais copiados por esse processo são:
- Dump do banco de dados PostgreSQL: Contém todas as contas de usuários, postagens, relacionamentos e metadados.
- Diretório de arquivos de mídia: Contém imagens, vídeos e emojis personalizados enviados pelos usuários, armazenados em
/home/mastodon/live/public/system. - Arquivos de configuração: O arquivo
.env.productione quaisquer arquivos personalizados do Nginx ou systemd.
Antes de configurar o cron job, você deve ter acesso SSH ao seu servidor Mastodon, privilégios sudo ou root e a capacidade de editar arquivos no diretório home do usuário mastodon. Você também precisa conhecer as credenciais do banco de dados, que estão armazenadas no arquivo .env.production. O script de backup será executado como o usuário mastodon para garantir permissões adequadas aos arquivos.
Passos para Criar e Agendar o Cron Job de Backup
Siga estes passos para criar um script de backup e agendá-lo com cron. Todos os comandos são executados no servidor Mastodon via SSH, salvo indicação contrária.
- Crie o diretório de backup
Faça login no servidor Mastodon. Mude para o usuário mastodon comsudo -i -u mastodon. Crie um diretório para armazenar os scripts de backup e a saída:mkdir -p ~/backups. Esse diretório conterá tanto o script shell quanto os arquivos de backup compactados. - Escreva o script shell de backup
Crie um novo arquivo chamado~/backups/mastodon-backup.shusando um editor de texto como nano:nano ~/backups/mastodon-backup.sh. Cole o conteúdo do script a seguir, ajustando os caminhos e o nome do banco de dados conforme necessário para sua instância:#!/bin/bash # Variáveis BACKUP_DIR="/home/mastodon/backups" TIMESTAMP=$(date +"%Y%m%d_%H%M%S") DB_NAME="mastodon_production" DB_USER="mastodon" MEDIA_DIR="/home/mastodon/live/public/system" # Cria o diretório de backup se não existir mkdir -p "$BACKUP_DIR" # Despeja o banco de dados PostgreSQL pg_dump -U "$DB_USER" -d "$DB_NAME" --format=custom --file="$BACKUP_DIR/mastodon_db_$TIMESTAMP.dump" # Compacta os arquivos de mídia tar -czf "$BACKUP_DIR/mastodon_media_$TIMESTAMP.tar.gz" -C "$MEDIA_DIR" . # Compacta os arquivos de configuração tar -czf "$BACKUP_DIR/mastodon_config_$TIMESTAMP.tar.gz" -C /home/mastodon/live .env.production # Remove backups mais antigos que 7 dias find "$BACKUP_DIR" -name "mastodon_" -type f -mtime +7 -delete echo "Backup concluído em $TIMESTAMP"Salve o arquivo e saia do nano.
- Torne o script executável
Executechmod +x ~/backups/mastodon-backup.shpara permitir que o script seja executado. - Teste o script manualmente
Executebash ~/backups/mastodon-backup.shpara verificar se ele é executado sem erros. Verifique o diretório~/backupspara os arquivos gerados:ls -la ~/backups. Você deve ver três arquivos com timestamps em seus nomes. - Abra a tabela cron para o usuário mastodon
Ainda como usuário mastodon, executecrontab -e. Se solicitado, selecione seu editor de texto preferido (nano é recomendado). - Adicione a entrada do cron job
Adicione a seguinte linha ao final do arquivo crontab para executar o backup diariamente às 3:00 AM:0 3 /bin/bash /home/mastodon/backups/mastodon-backup.sh
Salve o arquivo e saia. O daemon cron carregará automaticamente a nova programação. - Verifique se o cron job está ativo
Executecrontab -lpara listar os cron jobs ativos. Você deve ver a linha que acabou de adicionar. Verifique os logs do sistema comgrep CRON /var/log/syslogapós o horário agendado para confirmar que o job foi executado com sucesso.
Erros Comuns e Limitações ao Automatizar Backups
Script de backup falha com permissão negada ao banco de dados PostgreSQL
O usuário mastodon deve ter permissões adequadas no PostgreSQL para executar pg_dump. Por padrão, o usuário mastodon é criado como superusuário PostgreSQL durante a instalação. Se você alterou o usuário do banco de dados, atualize a variável DB_USER no script e garanta que esse usuário tenha acesso de leitura ao banco de dados. Teste o comando pg_dump -U mastodon -d mastodon_production --format=custom --file=/tmp/test.dump manualmente para verificar.
Cron job é executado, mas nenhum arquivo de backup aparece
Isso geralmente significa que o script encontrou um erro que não foi capturado na saída. Modifique a linha do cron job para redirecionar a saída para um arquivo de log para depuração. Altere a linha para:0 3 /bin/bash /home/mastodon/backups/mastodon-backup.sh >> /home/mastodon/backups/cron.log 2>&1
Aguarde a próxima execução ou acione manualmente, depois verifique cron.log para mensagens de erro.
Backups consomem muito espaço em disco
O script inclui um comando de limpeza que exclui backups mais antigos que 7 dias. Ajuste o valor +7 para um número diferente de dias se precisar de retenção mais longa. Por exemplo, +14 mantém backups por duas semanas. Monitore o uso do disco com df -h para garantir que o diretório de backup não encha o sistema de arquivos.
Backup do diretório de mídia é muito grande
Os arquivos de mídia do Mastodon podem consumir gigabytes de espaço em disco. Antes de executar o script de backup, considere executar tootctl media remove --days=30 para excluir mídia em cache com mais de 30 dias. Este comando é seguro para executar antes do backup porque remove apenas mídia que foi armazenada em cache de instâncias remotas, não conteúdo enviado pelo usuário. Adicione este comando ao script de backup antes da linha de compactação de mídia para reduzir o tamanho do backup.
Exportação Manual vs Backup Automatizado por Cron
| Item | Exportação Manual | Backup Automatizado por Cron |
|---|---|---|
| Frequência | Sob demanda, muitas vezes esquecida | Agendada, executa sem falhas |
| Consistência | Sujeita a erro humano e etapas ignoradas | Processo idêntico toda vez |
| Escopo dos dados | Pode perder arquivos de configuração ou mídia | Banco de dados completo, mídia e configuração |
| Velocidade de recuperação | Requer localizar e restaurar arquivos manualmente | Arquivos de backup organizados e prontos para restaurar |
| Gerenciamento de espaço em disco | Sem limpeza automática | Exclusão automática de backups antigos |
Com o cron job sendo executado diariamente, sua instância Mastodon agora tem uma rotina de backup consistente e automatizada. Você pode estender o script para enviar os arquivos de backup para um servidor remoto ou armazenamento em nuvem usando rsync ou aws s3 cp. Para maior segurança, criptografe o dump do banco de dados com gpg antes de transferi-lo para fora do servidor. Teste um processo de restauração completo pelo menos uma vez, importando um backup em uma instância de teste para confirmar que os dados são recuperáveis.