Backup e Restauração - Manual Técnico

Backup e Restauração

📚 Sobre este manual: Como fazer backup e restaurar seus sites para não perder dados importantes.

📦 O que fazer backup?

Em um site Python (Flask/Django), você precisa salvar:

⚠️ 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