Files
marcocosta10000 a5a34548db docs: update backup automation documentation with SSH key auth details
- Clarify SFTP uses SSH key authentication instead of password
- Generalize destination server user description to be more flexible
- Improve SSH key setup instructions with clearer step-by-step guidance
- Update test command output message for better clarity
- Simplify section headers and remove redundant logs section
2026-09-18 07:45:49 -03:00

138 lines
3.1 KiB
Markdown

# 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 (autenticação por chave SSH)
- 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 com permissão de escrita no diretório de destino.
## Configuração
### 1. Chave SSH
Gere um par de chaves no servidor de origem e copie a chave pública para o servidor de destino:
```bash
ssh-keygen -t ed25519 -N "" -f ~/.ssh/id_ed25519
ssh-copy-id -i ~/.ssh/id_ed25519.pub marco@170.231.184.32
```
Teste a conexão (não deve pedir senha):
```bash
ssh -i ~/.ssh/id_ed25519 marco@170.231.184.32 "echo CONEXÃO 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
- **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` |