diff --git a/README.md b/README.md new file mode 100644 index 0000000..17e20ee --- /dev/null +++ b/README.md @@ -0,0 +1,141 @@ +# Backup Automático — Servidor Debian 12 + +Backup automatizado de diretórios e bancos de dados MariaDB com envio via SFTP para servidor remoto. + +## O que faz + +- Dump de todos os bancos de dados MariaDB (exceto internos do sistema) +- Cópia dos diretórios `/var/www`, `/etc/nginx/sites-available` e `/opt` +- Compactação em `.tar.gz` com nome datado +- Envio via SFTP para servidor remoto +- Limpeza automática de backups antigos (retenção configurável) + +## Pré-requisitos + +No servidor de origem: + +```bash +apt-get install mariadb-client openssh-client +``` + +No servidor de destino: SSH ativo na porta 22 e usuário `marco` com permissão de escrita em `/home/marco/backups`. + +## Configuração + +### 1. Chave SSH (sem senha no script) + +No servidor de origem: + +```bash +ssh-keygen -t ed25519 -N "" -f ~/.ssh/id_ed25519 +ssh-copy-id -i ~/.ssh/id_ed25519.pub marco@170.231.184.32 +``` + +Teste: + +```bash +ssh -i ~/.ssh/id_ed25519 marco@170.231.184.32 "echo OK" +``` + +### 2. Arquivo `.env` + +```bash +cp .env.example .env +nano .env +``` + +Conteúdo do `.env`: + +```env +MYSQL_USER="root" +MYSQL_PASS="senha_do_mariadb" +SFTP_HOST="170.231.184.32" +SFTP_USER="marco" +SFTP_DIR="/home/marco/backups" +``` + +Proteja o arquivo: + +```bash +chmod 600 .env +``` + +### 3. Teste manual + +```bash +./backup_automatico.sh +``` + +## Agendamento via cron (execução diária às 01:00) + +### 1. Editar o crontab do root + +```bash +crontab -e +``` + +Na primeira vez, escolha o editor (recomende `nano` — opção 1). + +### 2. Adicionar a entrada + +``` +0 1 * * * /home/marco/BackupAutomatico/backup_automatico.sh >> /var/log/backup_cron.log 2>&1 +``` + +| Campo | Valor | Descrição | +|---|---|---| +| `0` | minuto | no minuto 0 | +| `1` | hora | às 01:00 | +| `*` | dia do mês | todos os dias | +| `*` | mês | todos os meses | +| `*` | dia da semana | todos os dias | + +Salve e saia do editor (no `nano`: `Ctrl+O`, `Enter`, `Ctrl+X`). + +### 3. Verificar se o cron está registrado + +```bash +crontab -l +``` + +Deve exibir a linha adicionada. + +### 4. Verificar se o serviço cron está ativo + +```bash +systemctl status cron +``` + +Se estiver inativo, ative e habilite no boot: + +```bash +systemctl enable --now cron +``` + +### 5. Logs do cron + +- **Logs da execução do backup:** `$LOG_FILE` (padrão: `/var/log/backup_server.log`) +- **Logs do próprio cron:** `/var/log/backup_cron.log` +- **Logs do sistema (syslog):** `journalctl -u cron` + +Para acompanhar o log do cron em tempo real: + +```bash +tail -f /var/log/backup_cron.log +``` + +## Variáveis de configuração + +| Variável | Descrição | Padrão | +|---|---|---| +| `MYSQL_USER` | Usuário do MariaDB | `root` | +| `MYSQL_PASS` | Senha do MariaDB | *(obrigatório)* | +| `SFTP_HOST` | IP/host do servidor de destino | *(obrigatório)* | +| `SFTP_USER` | Usuário SSH no servidor de destino | *(obrigatório)* | +| `SFTP_DIR` | Diretório de destino no servidor remoto | *(obrigatório)* | +| `LOCAL_RETENTION` | Quantos backups locais manter (0 = desativado) | `3` | +| `LOG_FILE` | Caminho do arquivo de log | `/var/log/backup_server.log` | + +## Logs + +Os logs do script ficam em `$LOG_FILE`. Os logs do cron ficam em `/var/log/backup_cron.log`.