Sistema automatizado para backup de arquivos no Amazon S3 com notificações via Telegram.
Um sistema robusto e completo para backup automatizado de arquivos e diretórios para AWS S3, com notificações via Telegram e validação de integridade avançada.
- Backup automatizado com agendamento via cron
- Notificações em tempo real via Telegram
- Validação de integridade completa com verificação de hash
- Arquivamento inteligente com controle de profundidade de divisão
- Gestão de logs com rotação automática
- Interface de linha de comando amigável
- Configuração flexível via arquivo JSON
- Suporte a múltiplas pastas com configurações individuais
- Classes de armazenamento S3 personalizáveis (incluindo Deep Archive)
O sistema é composto por quatro componentes principais:
backup_script.sh- Script bash para execução do backup e upload para S3backup_scheduler.py- Orquestrador Python com validação e notificaçõescron_setup.sh- Script de configuração automática do cronconfig.json- Arquivo de configuração centralizada
- Linux (testado em Ubuntu/Debian)
- Python 3.7+
- Bash 4.0+
rcloneconfigurado com credenciais AWS S3parallel(GNU parallel)tar,gzip,md5sum
- AWS S3: Bucket configurado com rclone
- Telegram Bot: Token e Chat ID para notificações
git clone https://github.com/lucasrodrigues85/backup-aws.git
cd backup-awsrclone config
# Siga as instruções para configurar um remote chamado "AmazonS3"# Ubuntu/Debian
sudo apt update
sudo apt install python3 python3-pip python3-venv parallel
# CentOS/RHEL
sudo yum install python3 python3-pip parallelcp config.json.example config.json
nano config.jsonchmod +x cron_setup.sh
./cron_setup.sh{
"telegram": {
"token": "SEU_TOKEN_DO_TELEGRAM",
"chat_id": "SEU_CHAT_ID"
},
"s3": {
"bucket": "nome-do-seu-bucket",
"storage_class": "DEEP_ARCHIVE"
},
"backup": {
"script_path": "/caminho/para/backup_script.sh",
"temp_dir": "/tmp",
"max_size_gb": 1024
},
"folders": [
{
"name": "config",
"path": "/mnt/storage/config",
"split_depth": 1,
"enabled": true
}
],
"logging": {
"level": "INFO",
"keep_logs_days": 30
},
"validation": {
"enabled": true,
"keep_local_copy": false,
"deep_validation": true
}
}Controla como os diretórios são divididos em arquivos separados:
0: Backup da pasta inteira como um único arquivo1: Cada subpasta vira um arquivo separado2: Cada subpasta de subpasta vira um arquivo separado
Exemplo para /storage/user1:
- Depth 0:
user1.tar.gz(tudo junto) - Depth 1:
user1/documents.tar.gz,user1/photos.tar.gz, etc. - Depth 2:
user1/documents/2024.tar.gz,user1/photos/vacation.tar.gz, etc.
STANDARD: Acesso frequenteSTANDARD_IA: Acesso infrequenteGLACIER: Arquivo de longo prazoDEEP_ARCHIVE: Arquivo de muito longo prazo (mais barato)
# Executar todos os backups
python3 backup_scheduler.py
# Executar apenas uma pasta específica
python3 backup_scheduler.py --folder config
# Modo dry-run (teste sem executar)
python3 backup_scheduler.py --dry-run
# Usar arquivo de configuração alternativo
python3 backup_scheduler.py --config /path/to/other/config.jsonO script cron_setup.sh configura automaticamente o cron para executar todo domingo às 3h da manhã.
# Ver cron jobs atuais
crontab -l
# Editar manualmente
crontab -e
# Ver logs do cron
tail -f logs/cron.loglogs/
├── backup_20241205.log # Log diário detalhado
├── cron.log # Log do cron job
└── crontab_backup_*.txt # Backups do crontab
# Logs em tempo real
tail -f logs/backup_$(date +%Y%m%d).log
# Status do serviço cron
systemctl status cron
# Últimas execuções
grep "Processo finalizado" logs/backup_*.log | tail -5O sistema oferece múltiplas camadas de validação:
- Hash MD5 de todos os arquivos antes do backup
- Verificação de integridade do arquivo tar.gz
- Contagem de arquivos entre original e backup
- Validação profunda opcional com extração e comparação
- Verificação S3 após upload
"validation": {
"enabled": true, // Ativa validação básica
"keep_local_copy": false, // Mantém cópia local para validação
"deep_validation": true // Extrai e compara arquivo por arquivo
}- Converse com @BotFather
- Crie um novo bot:
/newbot - Copie o token fornecido
- Adicione o bot a um chat e obtenha o Chat ID
- ✅ Início do processo de backup
- 🔄 Início de cada pasta individual
- ✅ Sucesso de cada backup
- ❌ Falhas com detalhes do erro
- 📊 Relatório final com estatísticas
chmod +x backup_script.sh backup_scheduler.py cron_setup.shrclone config show
# Se vazio, execute: rclone config{
"backup": {
"temp_dir": "/mnt/storage/temp" // Use outro diretório
}
}- Verifique se o bot foi adicionado ao chat
- Confirme o Chat ID correto
- Teste:
curl -X GET "https://api.telegram.org/bot<TOKEN>/getUpdates"
# Ativar modo verbose
python3 backup_scheduler.py --verbose
# Ver configuração carregada
python3 backup_scheduler.py --dry-run- Ajuste
max_size_gbconforme seu caso - Use
split_depthapropriado para evitar arquivos muito grandes - Configure
keep_local_copy: falsepara economizar espaço - Use
DEEP_ARCHIVEpara custos menores
- Desative
deep_validationse confiar na validação básica - Use SSD para
temp_dir - Configure
upload_concurrencyno rclone
Para restaurar um backup:
# Baixar arquivo específico
rclone copy AmazonS3:seu-bucket/backup-name/pasta.tar.gz ./
# Extrair
tar -xzf pasta.tar.gz
# Ou restaurar diretamente
rclone copy AmazonS3:seu-bucket/backup-name/ ./restore/ --include "*.tar.gz"Contribuições são bem-vindas! Por favor:
- Fork o projeto
- Crie uma branch para sua feature (
git checkout -b feature/nova-funcionalidade) - Commit suas mudanças (
git commit -am 'Adiciona nova funcionalidade') - Push para a branch (
git push origin feature/nova-funcionalidade) - Abra um Pull Request
Este projeto está licenciado sob a Licença MIT - veja o arquivo LICENSE para detalhes.
- rclone - Ferramenta fantástica para sincronização em nuvem
- GNU Parallel - Processamento paralelo eficiente
- python-telegram-bot - API do Telegram para Python
Se este projeto foi útil para você, considere me pagar um café! ☕
Sua contribuição ajuda a manter o projeto ativo e desenvolver novas funcionalidades.
PIX: 5ba71767-62af-4116-8cd4-119fcfe35e54 (chave aleatória)
Muito obrigado pelo seu apoio! 🚀