manuais-e-documentacao-itguys/documentacao zammad/Nivel_3_man_zammad_maintena...

107 lines
3.7 KiB
Markdown

# MANUAL TÉCNICO - MANUTENÇÃO, BACKUP E RESTORE - ZAMMAD
**Código:** ITGENG 0003/26 | **Classificação:** CRÍTICO
**Responsável:** João Pedro Toledo Gonçalves | **Data:** {{DATA_ATUAL}}
## 1. HISTÓRICO DE REVISÃO
| Data | Versão | Descrição | Autor |
| :--- | :--- | :--- | :--- |
| {{DATA_ATUAL}} | 1.0 | Criação Inicial | João Pedro Toledo Gonçalves |
## 2. OBJETIVO
Garantir a continuidade do negócio através de rotinas de Backup, procedimentos de Atualização e Plano de Restore (Disaster Recovery).
## 3. PRÉ-REQUISITOS
* [ ] Acesso Root ao servidor.
* [ ] Downtime agendado (para Restore).
## 4. PASSO A PASSO (EXECUÇÃO)
### Etapa 1: Rotina de Backup (Docker)
O Zammad via Docker não tem backup automático nativo no cron do host, você deve criar um script.
1. Crie o script `/opt/zammad-docker-compose/backup.sh`:
```bash
#!/bin/bash
cd /opt/zammad-docker-compose
docker compose exec zammad-railsserver /usr/local/bin/zammad-backup
# Os arquivos ficarão em /var/tmp/zammad (dentro do volume)
# Mova para o host:
timestamp=$(date +%Y-%m-%d)
docker cp $(docker compose ps -q zammad-railsserver):/var/tmp/zammad_backup_${timestamp}.tar.gz /mnt/backup/
```
2. Adicione ao Crontab (`crontab -e`):
```bash
0 2 * * * /opt/zammad-docker-compose/backup.sh
```
### Etapa 2: Rotina de Backup (Pacote)
Instalações via pacote já possuem script nativo.
1. Edite a config:
```bash
zammad run rails r "Setting.set('backup_dir', '/mnt/backup_externo')"
```
2. Verifique o Cron:
```bash
/etc/cron.d/zammad
```
### Etapa 3: Procedimento de Restore
⚠️ **PERIGO:** Isso apaga os dados atuais.
**Para Docker:**
1. Pare o serviço: `docker compose stop`.
2. Limpe o banco (se necessário) ou suba um ambiente limpo.
3. Coloque o arquivo `.tar.gz` do backup na pasta mapeada.
4. Execute:
```bash
docker compose exec zammad-railsserver /usr/local/bin/zammad-restore /path/to/backup_file
```
5. Reinicie: `docker compose start`.
### Etapa 4: Atualização de Versão (Update)
**Docker:**
1. Edite o `.env` ou `docker-compose.yml` mudando a Tag da versão (ex: `6.1` para `6.2`).
2. Pull e Up:
```bash
docker compose pull
docker compose up -d
```
* O container cuidará das migrações de banco (db:migrate).
## 5. SOLUÇÃO DE PROBLEMAS (TROUBLESHOOTING)
!!! warning "Pânico: Restore Falhou"
O backup não sobe ou o sistema quebrou após update.
**Problema 1: Versão do PostgreSQL incompatível no Restore**
* **Erro:** `pg_restore: [archiver] unsupported version (1.14) of input file`.
* **Causa:** Você fez backup num Postgres 15 e tentou restaurar num Postgres 12.
* **Solução:** O ambiente de destino DEVE ter a mesma versão ou superior do Banco de Dados. Atualize o Docker do Postgres.
**Problema 2: "Migrations Pending" após Update**
* **Sintoma:** Tela de "Maintenance" eterna.
* **Solução:** Force a migração manual:
```bash
docker compose exec zammad-railsserver rails db:migrate
docker compose restart
```
**Problema 3: Disco cheio durante Backup**
* **Causa:** O directorio `/var/tmp` lotou.
* **Solução:** Configure o `backup_dir` para um mountpoint externo (NFS/S3) ou limpe backups antigos (> 7 dias).
## 6. DADOS TÉCNICOS
| Componente | Local Padrão (Pacote) | Nota |
| :--- | :--- | :--- |
| **Arquivos** | `/opt/zammad` | Código fonte e assets. |
| **Banco** | `/var/lib/postgresql` | Dados críticos. |
| **Storage** | `/opt/zammad/storage` | Anexos de tickets (se local). |
## 7. VALIDAÇÃO FINAL
- [ ] O arquivo de backup `.tar.gz` é gerado diariamente e tem tamanho coerente (> 10MB)?
- [ ] O script de restore finalizou com "Restore completed successfully"?