# RUNBOOK — Conecta (produção)

**Domínio:** https://conecta.restor.app.br  
**Timezone:** America/Belem  
**Stack:** Laravel 11 + Inertia/Vue · Postgres/Redis (Docker app) · Evolution API 2.3.7

---

## 1. Checklist go-live

- [x] HTTPS Let’s Encrypt (`certbot.timer` ativo)
- [x] Redirect HTTP → HTTPS
- [x] `APP_ENV=production` e `APP_DEBUG=false`
- [x] Cookie de sessão seguro (`SESSION_SECURE_COOKIE=true`)
- [x] Fila Redis + `queue:work` via cron/`flock`
- [x] `schedule:run` a cada minuto
- [x] Backup diário Postgres (retenção 14 dias)
- [x] Monitoramento leve a cada 5 minutos
- [x] Health: `GET /up`

**Admin padrão:** `admin@conecta.restor.app.br` (senha no seeder / gerenciador de segredos — trocar após go-live se ainda não trocada).

---

## 2. Serviços

| Serviço | Como checar |
|---------|-------------|
| App Apache | `systemctl status apache2` |
| Postgres app | `docker ps \| rg conecta_postgres` · porta `127.0.0.1:5433` |
| Redis app | `docker ps \| rg conecta_redis` · porta `127.0.0.1:6380` |
| Evolution | `docker ps \| rg evolution_api` · proxy `/evolution-api` |
| Fila | `pgrep -af 'queue:work redis'` |
| Schedule | `php artisan schedule:list` |

Subir app DB/cache:

```bash
cd /var/www/html/api/laravel && docker compose up -d
```

Evolution (pasta própria):

```bash
cd /var/www/html/api/evolution && docker compose up -d
```

---

## 3. Jobs agendados (Belém)

| Horário | Job |
|---------|-----|
| a cada minuto | `schedule:run` + worker de fila |
| 01:15 | métricas diárias |
| 01:45 | Índice de Mobilização |
| seg 02:15 | relatório semanal PDF em `storage/app/reports/` |
| 02:40 | backup Postgres |
| */5 | monitor |

---

## 4. Backup e restore

**Backup manual**

```bash
/var/www/html/api/laravel/deploy/backup-daily.sh
ls -lh /var/backups/conecta/
```

**Restore** (destrutivo)

```bash
/var/www/html/api/laravel/deploy/restore-backup.sh /var/backups/conecta/conecta_YYYYMMDD_HHMMSS.tar.gz
cd /var/www/html/api/laravel
sudo -u www-data php artisan migrate --force
sudo -u www-data php artisan config:cache
```

Arquivos em `/var/backups/conecta/` — retenção padrão **14 dias**.

---

## 5. Deploy de código

```bash
cd /var/www/html/api/laravel
# pull / sync do código
composer install --no-dev --optimize-autoloader
npm ci && npm run build
sudo -u www-data php artisan migrate --force
sudo -u www-data php artisan config:cache
sudo -u www-data php artisan route:cache
sudo -u www-data php artisan view:cache
# reinicia worker (max-time do flock cuida; ou mate o processo)
pkill -f 'artisan queue:work redis' || true
```

Testes rápidos:

```bash
./deploy/smoke-test.sh
```

---

## 6. Monitoramento e logs

| Item | Caminho |
|------|---------|
| Monitor | `storage/logs/monitor.log` |
| Alerta ativo | `/tmp/conecta-monitor-alert` (existe só se falhou) |
| Schedule | `storage/logs/schedule.log` |
| Fila | `storage/logs/queue.log` |
| Laravel | `storage/logs/laravel.log` |
| Apache | `/var/log/apache2/conecta-*.log` |

Checagem manual:

```bash
/var/www/html/api/laravel/deploy/monitor.sh; echo exit:$?
curl -fsS https://conecta.restor.app.br/up
```

---

## 7. Incidentes comuns

**Fila parada**  
Sintoma: envios WhatsApp / webhooks ficam pendentes.  
Ação: ver `queue.log`; matar lock órfão `rm -f /tmp/conecta-queue.lock`; aguardar próximo minuto do cron.

**Evolution desconectada**  
Painel → WhatsApp → sincronizar / ler QR. Webhook deve apontar para  
`https://conecta.restor.app.br/webhooks/evolution` com header `X-Conecta-Webhook-Secret`.

**SSL próximo do vencimento**  
`sudo certbot renew` · timer `certbot.timer` deve estar `active`.

**Disco cheio**  
Limpar `/var/backups/conecta` antigos e `storage/logs/*.log` grandes.

**Manutenção**

```bash
cd /var/www/html/api/laravel
sudo -u www-data php artisan down
# ... manutenção ...
sudo -u www-data php artisan up
```

---

## 8. Segurança (lembrar)

- Não commitar `.env` nem dumps.
- Trocar senha admin após primeiro acesso em produção.
- Postgres/Redis só em `127.0.0.1` (não expor publicamente).
- Webhook Evolution exige secret.
- LGPD: só `wa_id_hash` — sem telefone em claro no app.

---

## 9. Contatos operacionais

Preencher: responsável infra · responsável produto · canal de alerta.
