# 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"?
