From ac66eb5e9ae35dbbe0f94eddfdb9b7005ca975e9 Mon Sep 17 00:00:00 2001 From: Marco Costa Date: Thu, 17 Sep 2026 21:00:09 -0300 Subject: [PATCH] docs(readme): add setup and configuration guide for backup automation Add comprehensive documentation covering SSH key generation, environment variable configuration, cron scheduling, and log file management for the automated backup system on Debian 12. --- README.md | 141 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 141 insertions(+) create mode 100644 README.md 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`.