- 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
138 lines
3.1 KiB
Markdown
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` |
|