# MANUAL TÉCNICO - HEALTHCHECKS E SCRIPTS AUTOMATIZADOS NO DOCKER

**Código:** ITGINF 0011/26 | **Classificação:** RESTRITO
**Responsável:** João Pedro Toledo Gonçalves | **Data:** {{DATA_ATUAL}}

## 1. HISTÓRICO DE REVISÃO

> ⚠️ **REGRA DE OURO:**
> 1. **Autor:** João Pedro Toledo Gonçalves.
> 2. **Descrição:** Criação do documento.

| Data | Versão | Descrição | Autor |
| :--- | :--- | :--- | :--- |
| {{DATA_ATUAL}} | 1.0 | Criação Inicial | João Pedro Toledo Gonçalves |

## 2. OBJETIVO
Implementar verificações de saúde (Healthchecks) para auto-cura de aplicações e configurar tarefas agendadas (Cron) de forma compatível com conteineres.

## 3. PRÉ-REQUISITOS
- [ ] Conhecimento de Dockerfile e Docker Compose.

## 4. PASSO A PASSO (EXECUÇÃO)

**Etapa 1: Definindo HEALTHCHECK no Dockerfile**
> ℹ️ **NOTA:** O Docker executa esse comando periodicamente. Se falhar X vezes, marca o container como `unhealthy`.

1.  Edite seu `Dockerfile`.
2.  Adicione a instrução (exemplo para web server):

```dockerfile
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
  CMD curl -f http://localhost/ || exit 1
```

**Etapa 2: Definindo HEALTHCHECK no Compose**
1.  No `docker-compose.yml`, você pode sobrescrever ou definir:

```yaml
version: '3.8'
services:
  web:
    image: nginx
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost"]
      interval: 1m30s
      timeout: 10s
      retries: 3
```

**Etapa 3: Scripts Agendados (Cron)**
> ⚠️ **IMPORTANTE:** Conteineres devem ter UM processo principal. Rodar `cron` junto com `apache` no mesmo container é má prática ("Fat Container").

**Abordagem A: Container Dedicado (Sidecar)**
1.  Crie um container pequeno (Alpine) só para rodar o script e sair.
2.  Agende a execução desse container pelo `cron` do **HOST**.

    ```bash
    # No crontab do HOST (crontab -e)
    # Roda backup do banco postgres todo dia as 03:00
    0 3 * * * docker exec meu-postgres pg_dumpall > /backups/db.sql
    ```

**Abordagem B: Ofelia (Job Scheduler for Docker)**
1.  Use uma imagem especializada que escuta events do Docker.
    ```yaml
    services:
      ofelia:
        image: mcuadros/ofelia:latest
        depends_on:
          - web
        command: daemon --docker
        volumes:
          - /var/run/docker.sock:/var/run/docker.sock
    
      web:
        image: my-app
        labels:
          ofelia.enabled: "true"
          ofelia.job-exec.datecron.schedule: "@every 10s"
          ofelia.job-exec.datecron.command: "echo 'Backup process...'"
    ```

## 5. SOLUÇÃO DE PROBLEMAS (TROUBLESHOOTING)

**Problema 1: Container sempre em `starting`**
*   **Causa:** O healthcheck nunca passa com sucesso.
*   **Solução:**
    1.  Rode o comando do healthcheck manualmente: `docker exec -it [ID] curl ...`.
    2.  Verifique se o `curl`/`wget` está instalado na imagem.

**Problema 2: Cron dentro do container não roda**
*   **Causa:** Variáveis de ambiente não passam automaticamente para o cron.
*   **Solução:** Sempre use caminhos absolutos nos scripts e carregue as variáveis se necessário.

## 6. VALIDAÇÃO FINAL
- [ ] `docker ps` mostra status `(healthy)`?
- [ ] O comando agendado foi executado no horário previsto?
