docs: backlog de pendências (inclui isolar scoreodonto_dev) + valida CI rootless
build-and-push / build (push) Successful in 1m47s
build-and-push / deploy (push) Has been skipped

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
VPS 4 Builder
2026-06-16 11:08:59 +02:00
parent a89eed3ba6
commit 96b857e408
+74
View File
@@ -0,0 +1,74 @@
# Pendências & Tarefas a Fazer — ScoreOdonto
> Backlog operacional/infra após as 6 etapas de CI/CD (16/jun/2026). Ordenado por prioridade.
> Contexto da infra em `arquitetura.md`; fluxo de deploy em `deploy.md`; verdade atual em `VERDADE-HOJE.md`.
---
## 🔴 P0 — Estrutural
### 1. Isolar o banco `scoreodonto_dev` (dev parar de usar o banco de produção)
**Problema:** dev (VPS4) e produção (VPS1) apontam para o **mesmo** banco `scoreodonto` na VPS3. Qualquer teste em `dev.scoreodonto.com` escreve no dado real. É a maior dívida estrutural restante.
**Bloqueador descoberto (16/jun/2026):** o role `scoreodonto_user` **não pode criar banco** (`CREATEDB=false`, `SUPER=false`) e **não há shell na VPS3** (`deploy@10.99.0.3` recusa a chave). → Precisa de **ação do operador com acesso superuser** ao Postgres da VPS3 (usuário `postgres`), OU conceder a permissão: `ALTER ROLE scoreodonto_user CREATEDB;`.
**Passos:**
1. **(operador/superuser na VPS3)** Criar o banco:
`CREATE DATABASE scoreodonto_dev OWNER scoreodonto_user;`
2. **Popular com cópia da produção** (dados realistas p/ dev):
- Já existe dump recente em `/home/deploy/backups/scoreodonto_*.dump` (VPS4, formato `-Fc`).
- Restaurar: `pg_restore -d "postgresql://scoreodonto_user:<senha>@10.99.0.3:5432/scoreodonto_dev" --no-owner /caminho/scoreodonto_*.dump`
(ou via container: `docker run --rm -v <dump>:/b.dump -e PGPASSWORD=… postgres:18 pg_restore -h 10.99.0.3 -U scoreodonto_user -d scoreodonto_dev --no-owner /b.dump`).
3. **Apontar SÓ o dev para `scoreodonto_dev`** (sem tocar na prod):
- No `docker-compose.yml`, parametrizar: `DATABASE_URL=…@10.99.0.3:5432/${SCOREODONTO_DB:-scoreodonto}?schema=public` (default mantém a prod intacta).
- Na VPS4, criar `.env` (gitignored, dev-only) com `SCOREODONTO_DB=scoreodonto_dev`.
- Rebuild + recreate do backend de dev.
4. **Verificar:** `dev.scoreodonto.com/api/version` sobe; conferir que escrita em dev cai em `scoreodonto_dev` e **não** em `scoreodonto` (contagens divergem após um teste).
5. **(privacidade)** Avaliar anonimizar dados sensíveis de pacientes no `scoreodonto_dev`.
**Ganho:** dev deixa de poder corromper o dado de produção; fim da “única rede de segurança é o backup”.
---
## 🟠 P1 — Segurança
### 2. Rotacionar o token do Gitea exposto no chat
O token usado nos `docker login` (VPS4 e VPS1) e na descoberta foi colado no chat → comprometido. **Revogar no Gitea** (Configurações → Aplicações) e gerar um novo. Os logins já estão no keystore do Docker; só re-logar quando o token for trocado.
### 3. Criar o secret `REGISTRY_TOKEN` no repo
Adicionar em `git.clube67.com` → repo → Settings → Actions → Secrets um token (escopo `write:package`/`read:package`). Hoje o workflow funciona com a credencial do host como fallback; o secret deixa o CI independente disso.
### 4. Tirar credenciais em texto puro do `docker-compose.yml`
O `DATABASE_URL` e `DRAGONFLY_URL` têm **senha em texto puro** versionada no repo. Mover para `.env`/secrets (e idealmente rotacionar as senhas). Dívida de segurança pré-existente.
---
## 🟡 P2 — Operacional / Cosmético
### 5. Retenção/limpeza de imagens no registry
O registry vai acumular imagens (`:vX.Y.Z`, `:<commit>`, `:latest`) a cada deploy. Definir política de retenção (ex.: manter N últimas + releases) — a VPS3 tem disco finito. Avaliar limpeza automática.
### 6. Limpar a árvore git suja da VPS1
O repo em `/home/deploy/stack/scoreodonto.com` na VPS1 está **sujo** (vários `.md` e `.dockerignore` deletados, HEAD antigo `19dbbae`). Não afeta o deploy (que usa imagem), mas convém reconciliar/limpar para não confundir.
### 7. Ruído de attestation no registry
O BuildKit publica manifests de *provenance/attestation* que aparecem como “tags” `sha256:…` no registry. Inócuo; desligar com `provenance=false`/`--provenance=false` no build se incomodar.
### 8. Padronizar o case da versão (V vs v)
A CI mostra `v1.0.14` (minúsculo, por `tr 'V' 'v'`); builds manuais mostram `V1.0.14`. Cosmético — alinhar para um padrão único.
### 9. Backup automatizado do banco
Hoje o `pg_dump` é manual (via container `postgres:18`). Agendar backup periódico do `scoreodonto` (e, após P0, do `scoreodonto_dev`) com retenção. Evolução: WAL archiving / PITR.
---
## 🔵 Futuro (visão de produto — fora do escopo de infra)
Itens herdados do mapa de produto, ainda não implementados:
- **Score Professional** (motor de pontuação) — não existe.
- **Estoque**, **Teleatendimento**.
- Entidade formal **Pessoa × Empresa**.
- Monitoramento/observabilidade (Grafana já existe na stack — integrar métricas do ScoreOdonto).
---
_Atualizar este arquivo conforme as pendências forem resolvidas. As 6 etapas de CI/CD (documentação, versão visível, registry, pipeline, deploy por tag) estão **concluídas** — ver `deploy.md`._