diff --git a/documentação/STATUS-SEGURANCA-E-PRODUCAO.md b/documentação/STATUS-SEGURANCA-E-PRODUCAO.md index 7dff5ea..d1bfb89 100644 --- a/documentação/STATUS-SEGURANCA-E-PRODUCAO.md +++ b/documentação/STATUS-SEGURANCA-E-PRODUCAO.md @@ -1,8 +1,8 @@ # Status — Segurança & Produção (ScoreOdonto) -> Resumo do que foi feito e do que falta. Atualizado em **19/jun/2026**. -> Produção no ar: **v1.0.18** (`fc00622`). **Todos os commits de código estão LOCAIS (sem `git push`)** — -> exceto a rotação do `JWT_SECRET`, que **já foi aplicada e verificada em produção**. +> Resumo do que foi feito e do que falta. Atualizado em **22/jun/2026**. +> Produção no ar: **v1.0.19** (`715b2dc`) — fila **A** concluída (push → CI → tag → deploy). **Commits +> publicados (`git push` feito).** A rotação do `JWT_SECRET` segue aplicada e verificada em produção. --- @@ -48,20 +48,28 @@ do frontend, via 3 helpers: `requireCapability`, `requireCapabilityRow`, `requir ### 5. Pré-requisito de produção - **`SCOREO_DB_PASS` provisionado na VPS1** (`/home/deploy/stack/scoreodonto.com/.env`, 0600), valores extraídos do container em execução, `.gitignore` da VPS1 ajustado, conexão validada (`SELECT 1` = ok). - **Produção não foi tocada.** + +### 6. Fila A concluída — **PRODUÇÃO EM `v1.0.19`** (22/jun/2026) +- **`git push` do lote** (RBAC 99 rotas + segredos fora do compose/imagem + correções de frontend). +- **CI desbloqueada:** o build falhou na 1ª vez (`SCOREO_DB_PASS` com `:?` quebrava a interpolação do + compose no `docker compose build` do runner) → corrigido com placeholder runtime-only no `build.yml` + (commit `715b2dc`). Build verde → imagens `:715b2dc` (back+front, atômicas) publicadas no registry. +- **Tag `v1.0.19` → `715b2dc`:** job `promote` re-tagueou `:715b2dc` → `:v1.0.19` **sem rebuild** + (digests idênticos conferidos) e rodou `deploy-prod.sh v1.0.19` na VPS1. +- **Backup do banco antes do deploy:** `~/backups/scoreodonto_20260622_0005.dump` na VPS1 (PG18). +- **Verificado em produção:** `/api/version` = `v1.0.19` (`715b2dc`, PROD); `/api/health` = ok + (DB ok, cache ok). DEV (8020) realinhado ao mesmo commit via `./dev-build.sh` (mostra `v1.0.19`). +- **Rollback trivial:** `./deploy-prod.sh v1.0.18` (+ dump do banco, se necessário). --- ## ⏳ O QUE FALTA -### A) Levar o trabalho a produção (fila) -1. **Imagem limpa `v1.0.19`** (remove segredos embutidos na imagem): - `git push` → CI builda `:` com `.dockerignore` → `git tag v1.0.19` → `deploy-prod.sh v1.0.19` → - validar `/api/version` + `/api/health`. **Rollback trivial:** `deploy-prod.sh v1.0.18`. - - Leva junto: RBAC (99 rotas), correções de frontend, etc. +### A) Levar o trabalho a produção (fila) — ✅ CONCLUÍDA +1. ~~**Imagem limpa `v1.0.19`**~~ → **FEITO** (ver "Fila A concluída" acima). Produção em `v1.0.19`/`715b2dc`. 2. **Compose novo na VPS1 (opcional, passo 2b):** `deploy-prod.sh` **não faz `git pull`** → o `docker-compose.yml` da VPS1 segue o antigo. Para tirar a senha hardcoded do compose local, copiar o - novo `docker-compose.yml` (scp) + recreate. O root `.env` já provisionado cobre isso. + novo `docker-compose.yml` (scp) + recreate. O root `.env` já provisionado cobre isso. **Ainda pendente.** ### B) Rotação dos demais segredos (ainda vivos no histórico/artefatos antigos) 3. **Senha do banco** (`scoreodonto_user`) — contida ao scoreodonto; exige refactor já feito no compose + @@ -88,11 +96,12 @@ do frontend, via 3 helpers: `requireCapability`, `requireCapabilityRow`, `requir --- -## Commits locais da sessão (nenhum `push`, exceto JWT já aplicado em prod) -> **13 commits desta sessão** (incluindo este documento) ainda **locais**. O repositório está -> `ahead 14` de `origin/main` — o 14º (`7c5b199 docs(LEIA)`) é anterior a esta sessão. +## Commits da sessão — **PUBLICADOS** (`git push` feito; produção em `v1.0.19`) +> Todos empurrados para `origin/main`. Promovidos a produção via tag `v1.0.19` (commit `715b2dc`). > A rotação do `JWT_SECRET` **não** está nesta lista (foi ação operacional na VPS, sem commit). ``` +715b2dc ci(build): desbloqueia build — SCOREO_DB_PASS placeholder na interpolação +8a27f3b docs+infra: corrige status (JWT/contagem) + versão em DEV (dev-build.sh) 6adf353 docs: status geral de segurança & produção (este documento) f22e30e docs(skills): completa as 62 skills e83af04 docs(skills): biblioteca operacional @@ -110,7 +119,11 @@ fcf2fb1 security(infra): .env fora do git + .dockerignore ``` ## Como retomar -- **Para publicar:** seguir a fila **A** (push → `v1.0.19` → deploy → validar health/version). +- **Fila A:** ✅ concluída — produção em **`v1.0.19`** (`715b2dc`). Próximo release: `git push` → CI + builda `:` → `git tag vX.Y.Z` → job `promote` deploya na VPS1. - **Antes de abrir a usuários reais:** concluir **B** (rotações) — sobretudo as API keys (você) e a senha do banco. -- Tudo de código testado em **DEV** (`dev.scoreodonto.com`, banco `pgdev`); produção segue **v1.0.18** intacta. +- **Pendência pontual:** passo **A.2** (compose novo na VPS1 via scp + recreate) para tirar a senha + hardcoded do compose local. +- Código rodando em **DEV** (`dev.scoreodonto.com`) e **PROD** no mesmo commit `715b2dc`; rollback de + prod: `./deploy-prod.sh v1.0.18` (+ dump `~/backups/scoreodonto_20260622_0005.dump` se necessário).