From e40aa34b8a6a1bf3df7c81e34ed820d95b274e9c Mon Sep 17 00:00:00 2001 From: VPS 4 Deploy Agent Date: Thu, 18 Jun 2026 06:28:05 +0200 Subject: [PATCH] =?UTF-8?q?docs(rx-server):=20corte=20concluido=20?= =?UTF-8?q?=E2=80=94=20v2.2.0=20em=20prod=20(Build=20Once/Promote),=20imag?= =?UTF-8?q?em=20340MB,=20.secrets=20pre-req?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.8 --- projetos/rx.scoreodonto.com/plano-deploy.md | 30 ++++++++++++++------- 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/projetos/rx.scoreodonto.com/plano-deploy.md b/projetos/rx.scoreodonto.com/plano-deploy.md index af24c0e..630c86a 100644 --- a/projetos/rx.scoreodonto.com/plano-deploy.md +++ b/projetos/rx.scoreodonto.com/plano-deploy.md @@ -20,17 +20,29 @@ |---|---|---| | 1 | `/api/health` + `/api/version` + **badge** no canto (lê `/api/health`) | ✅ (em dev) | | 2 | `/api/health` usa **APP_VERSION** (tag) em runtime, fallback `version.txt` | ✅ (em dev) | -| 3 | **CI** `.gitea/workflows/build.yml`: push→build `rx-scoreodonto:` no registry; tag→promote (digest) + deploy | 🧪 build local validado | -| 4 | `docker-compose.prod.yml` (`image:` do registry, `up --no-build`, `APP_VERSION`/`GIT_COMMIT` em runtime) | 🧪 criado | -| 5 | `deploy-prod.sh` novo (VPS1 pull + up --no-build) — substitui o antigo | 🧪 `deploy-prod.sh.novo` | -| 6 | **Corte**: desligar webhook 9003 → push (CI builda) → tag → promote+deploy prod → validar | 🎯 aguarda aprovação | +| 3 | **CI** `.gitea/workflows/build.yml`: push→build `rx-scoreodonto:` no registry; tag→promote (digest) + deploy | ✅ validado (CI verde) | +| 4 | `docker-compose.prod.yml` (`image:` do registry, `up --no-build`, `APP_VERSION`/`GIT_COMMIT` em runtime) | ✅ | +| 5 | `deploy-prod.sh` novo (VPS1 pull + up --no-build); antigo → `deploy-prod-legado-webhook.sh` | ✅ | +| 6 | **Corte**: webhook 9003 desligado → push → tag **v2.2.0** → promote+deploy prod → validado | ✅ **EM PROD (18/jun/2026)** | ## Imagem / registry - `git.clube67.com/ruicesar/rx-scoreodonto:` (build-once por commit) → promovida a `:vX.Y.Z` (sem rebuild). - Versão semântica nasce da **tag**, injetada em runtime (`APP_VERSION`) — não entra no build. +- **Imagem enxuta: 1.62GB → 340MB.** Lições (camadas grandes davam PUT 500/499 no registry): + - `sharp` usa **binário prebuilt** (libvips embarcado) — NÃO instalar `vips`/`vips-dev` (faz compilar do fonte → camada ~400MB). + - `.dockerignore` deve excluir `updates/` (196MB de `.exe`, servido por volume), `data/`, `bkp/`, `**/node_modules`. + - toolchain (`python3/make/g++`) entra **virtual** e sai na mesma `RUN`. -## Riscos a tratar (corte) -- **NÃO quebrar `/updates/`** (auto-update dos clients) — é volume bind, preservado no `up --no-build`. -- **Banco**: migrações rodam no boot → backup do `dental_images` antes do 1º deploy por tag. -- Rollback: reativar webhook 9003 (modelo antigo) **ou** `deploy-prod.sh `. -- Regra da stack: **testar em dev.rx + aprovação para prod**. +## Pré-requisitos de PROD (VPS1) — uma vez +- **`.secrets` deve existir** em `/home/deploy/stack/rx.scoreodonto.com/.secrets` (env_file do compose). Não vai pelo git/scp do CI — copiar manualmente da VPS4 (`scp .secrets deploy@10.99.0.1:...`, chmod 600). **Sem ele o `up` falha** (`env file .secrets not found`). +- `docker login git.clube67.com` na VPS1 (para o `pull` do registry). + +## Estado APÓS corte (18/jun/2026) +- Prod roda `rx-scoreodonto:v2.2.0` (recriado via `up --no-build`). `/api/health` = `v2.2.0`/`PROD`/db ok. +- `/updates/latest.yml` = **1.3.9 intacto** (auto-update dos clients preservado). +- Backup pré-corte: `/home/deploy/backups/dental_images_20260618_0552.dump` (VPS4). +- **Follow-up**: `/api/health` reporta `cache: down` (Redis conecta nos logs mas o `ping()` do health falha) — **pré-existente** (dev.rx já mostrava), app fica `degraded` mas funcional. Investigar o método `redis.getClient().ping()`. + +## Rollback +- `deploy-prod.sh ` (quando houver tag anterior no novo modelo) **ou** reativar `webhook-rx.service` (modelo antigo) + push. +- Banco: `pg_restore` do dump acima.