Backup e Restauração
📚 Sobre este manual: Como fazer backup e restaurar seus sites para não perder dados importantes.
📑 Índice Rápido
📦 O que fazer backup?
Em um site Python (Flask/Django), você precisa salvar:
- Código fonte: Toda a pasta do site
/var/www/meusite/ - Banco de dados: Se usar SQLite, o arquivo
.db - Arquivos de mídia: Uploads de usuários (pasta
media/) - Arquivos .env: Variáveis de ambiente (senhas, chaves)
⚠️ Importante: NÃO faça backup da pasta
venv/ (ambiente virtual). Ela pode ser recriada facilmente.
💾 Backup do Site Completo
Backup de um site específico (excluindo venv):
cd /var/www
tar -czf /backup/meusite_$(date +%Y%m%d_%H%M%S).tar.gz \
--exclude=meusite/venv \
--exclude=meusite/__pycache__ \
meusite/
Backup apenas do código (sem arquivos grandes):
cd /var/www
tar -czf /backup/meusite_code_$(date +%Y%m%d).tar.gz \
--exclude=meusite/venv \
--exclude=meusite/__pycache__ \
--exclude=meusite/static \
--exclude=meusite/media \
meusite/
Backup completo de TODOS os sites:
sudo tar -czf /backup/todos_sites_$(date +%Y%m%d).tar.gz \
--exclude=*/venv \
--exclude=*/__pycache__ \
/var/www/
📌 Explicação:
tar -czf- Cria arquivo compactado (.tar.gz)$(date +%Y%m%d_%H%M%S)- Adiciona data e hora no nome--exclude- Exclui pastas desnecessárias
🗄️ Backup do Banco de Dados
SQLite (arquivo .db):
# Backup do banco SQLite
cp /var/www/meusite/banco_de_dados.db /backup/banco_$(date +%Y%m%d).db
# Backup com compressão
tar -czf /backup/banco_$(date +%Y%m%d).tar.gz /var/www/meusite/banco_de_dados.db
PostgreSQL (se usar):
# Backup do banco PostgreSQL
sudo -u postgres pg_dump nome_do_banco > /backup/banco_$(date +%Y%m%d).sql
# Comprimir
gzip /backup/banco_$(date +%Y%m%d).sql
MySQL/MariaDB (se usar):
# Backup do banco MySQL
mysqldump -u usuario -p nome_banco > /backup/banco_$(date +%Y%m%d).sql
🔄 Restaurar Backup
Restaurar site completo:
# 1. Parar o site
sudo pkill -f "meusite.*gunicorn"
# 2. Fazer backup do estado atual (opcional)
mv /var/www/meusite /var/www/meusite_old
# 3. Extrair o backup
cd /var/www
tar -xzf /backup/meusite_20260328.tar.gz
# 4. Ajustar permissões
sudo chown -R www-data:www-data /var/www/meusite
sudo chmod -R 755 /var/www/meusite
# 5. Recriar ambiente virtual (se necessário)
cd /var/www/meusite
sudo -u www-data python3 -m venv venv
sudo -u www-data venv/bin/pip install -r requirements.txt
# 6. Iniciar o site
sudo -u www-data venv/bin/gunicorn --workers 3 --bind unix:/var/www/meusite/meusite.sock app:app --daemon
Restaurar banco SQLite:
# Parar o site antes
sudo pkill -f "meusite.*gunicorn"
# Restaurar o banco
cp /backup/banco_20260328.db /var/www/meusite/banco_de_dados.db
# Ajustar permissão
sudo chown www-data:www-data /var/www/meusite/banco_de_dados.db
# Reiniciar site
cd /var/www/meusite && sudo -u www-data venv/bin/gunicorn --workers 3 --bind unix:/var/www/meusite/meusite.sock app:app --daemon
⏰ Backup Automático (Crontab)
Para fazer backup todo dia às 3 da manhã:
# Editar crontab
sudo crontab -e
Adicionar as linhas:
# Backup diário dos sites às 3:00
0 3 * * * tar -czf /backup/todos_sites_$(date +\%Y\%m\%d).tar.gz --exclude=*/venv --exclude=*/__pycache__ /var/www/
# Backup diário do banco SQLite às 3:30
30 3 * * * cp /var/www/meusite/banco.db /backup/banco_$(date +\%Y\%m\%d).db
# Backup semanal completo (domingo às 4:00)
0 4 * * 0 tar -czf /backup/backup_completo_$(date +\%Y\%m\%d).tar.gz /var/www/ /etc/nginx/sites-available/ /etc/letsencrypt/
📌 Explicação do crontab:
0 3 * * *- Minuto 0, hora 3, todo dia, todo mês, todo dia da semana\%Y\%m\%d- Data no nome do arquivo (ano-mês-dia)0 4 * * 0- Domingo às 4:00
🧹 Limpar Backups Antigos
Para não ocupar espaço, remova backups com mais de 30 dias:
# Remover backups com mais de 30 dias
find /backup -name "*.tar.gz" -mtime +30 -delete
find /backup -name "*.db" -mtime +30 -delete
find /backup -name "*.sql" -mtime +30 -delete
Adicione no crontab para limpar automaticamente:
# Limpar backups antigos todo dia às 2:00
0 2 * * * find /backup -name "*.tar.gz" -mtime +30 -delete
0 2 * * * find /backup -name "*.db" -mtime +30 -delete
💡 Dicas Importantes
- ✅ Backup fora do servidor: Considere enviar para outro local (Google Drive, AWS S3, outro servidor)
- ✅ Teste seus backups: Periodicamente tente restaurar em um ambiente de teste
- ✅ Documente: Anote onde estão os backups e como restaurar
- ✅ Mantenha pelo menos: Backups diários (7 dias), semanais (4 semanas), mensais (6 meses)
- ✅ .env não esqueça: Backup do arquivo .env separado (contém senhas)
- ✅ Antes de atualizar: Sempre faça backup antes de atualizar código ou dependências
📌 Estrutura de pastas recomendada para backups:
/backup/
├── sites/
│ ├── meusite_20260328.tar.gz
│ └── meusite_20260329.tar.gz
├── bancos/
│ ├── banco_20260328.db
│ └── banco_20260329.db
├── completo/
│ └── completo_20260328.tar.gz
└── logs/
└── backup_20260328.log
⚠️ Comando para enviar backup para Google Drive (rclone):
# Instalar rclone
curl https://rclone.org/install.sh | sudo bash
# Configurar (seguir instruções)
rclone config
# Enviar backup
rclone copy /backup/meusite.tar.gz gdrive:backups/
🎯 Resumo rápido:
# Backup rápido de um site
tar -czf /backup/meusite_$(date +%Y%m%d).tar.gz --exclude=meusite/venv /var/www/meusite
# Listar backups
ls -la /backup/
# Restaurar
tar -xzf /backup/meusite_20260328.tar.gz -C /var/www/
Manual Técnico - Última atualização: Março 2026