Add comprehensive documentation covering SSH key generation, environment variable configuration, cron scheduling, and log file management for the automated backup system on Debian 12.
142 lines
3.1 KiB
Markdown
142 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
|
|
- 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`.
|