Commit Graph

4 Commits

Author SHA1 Message Date
VPS 4 Builder 4cd83344a5 feat(deploy): poda imagens antigas ao fim do deploy (atual + 1 anterior)
Após subir a nova versão, apaga as imagens vX.Y.Z locais além das 2 mais
recentes de cada repo (backend/frontend) — a recém-deployada e a anterior, que
fica de reserva para rollback de urgência. Automatiza a política que antes era
manual, evitando o acúmulo que chegou a dezenas de GB.

Salvaguardas: só toca em tags no formato vX.Y.Z; nunca remove imagem em uso por
container; best-effort no fim (|| true) — a poda jamais aborta o deploy nem o
rollback. Testado com uma tag falsa: remove só a antiga, preserva as 2 atuais.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-11 02:54:25 +02:00
VPS 4 Builder 0a83c0f515 build: registry pela VPN (10.99.0.3:3000) + fail-fast na tag
build-and-promote / build (push) Has been skipped
build-and-promote / promote (push) Successful in 1m40s
O proxy HTTPS de git.clube67.com corta uploads em ~60 s, a ~0,75 MB/s: blobs
acima de ~45 MB não publicam (o Gitea recebe o corpo truncado e responde 500).
O maior blob daqui tem 39,5 MB — publicava raspando, e qualquer dependência nova
quebraria o deploy. Pelo WireGuard são ~2,4 MB/s, sem corte.

Mesmo Gitea, mesmo repositório, mesmas tags: só muda o caminho de rede. Verificado
na VPS1 que `10.99.0.3:3000/ruicesar/scoreodonto-backend:v1.0.39` entrega o mesmo
image id que o container em execução — o rollback para tags antigas segue válido.

- docker-compose.prod.yml / deploy-prod.sh / workflow: registry passa a ser
  10.99.0.3:3000. Requer `insecure-registries` no daemon da VPS1 e do runner
  (já aplicado; a porta 3000 não é exposta à internet, só pelo túnel).
- promote: `buildx imagetools` não fala com registry HTTP, então o manifest é
  copiado pela API v2 do registry. Byte a byte ⇒ digest idêntico, que continua
  sendo conferido antes de deployar.
- promote: autentica com o `docker login` do runner. `secrets.REGISTRY_TOKEN` não
  existe neste repo — o `docker login` mascarava isso; o curl não.
- docker-compose.prod.yml: `${SCOREODONTO_TAG:?}` no lugar de `:-latest`. Sem a
  tag o deploy agora ABORTA, em vez de subir uma imagem indeterminada em produção.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-10 16:46:21 +02:00
VPS 4 Builder a991f1fe2c feat(version): versão em runtime via /api/version (Passos 1/3/4)
- buildInfo.ts: hook useAppVersion() consome GET /api/version (fonte única = backend),
  com fallback ao carimbo do bundle; deixa de depender do APP_VERSION manual.
- Versão exibida em Configurações ("Sobre o sistema") + telas públicas (Login/WaitingInvite);
  removida do rodapé do Sidebar.
- compose.prod/deploy-prod.sh: injetam APP_VERSION (=tag) e APP_ENV=PROD em runtime,
  desacoplando a versão semântica do build (commit/build seguem da imagem).
- constants.ts marcado legado + bump V1.0.15 (transitório até o Passo 5; evita colisão de tag).
- DEPLOY-PRODUCAO.md reescrito com status /🧪/🎯 + nota de fase transitória.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-17 05:19:27 +02:00
VPS 4 Builder fc0d65fde0 feat(deploy): deploy por tag na produção (Etapa 6)
build-and-push / build (push) Successful in 1m6s
- docker-compose.prod.yml: produção roda imagens versionadas do registry (sem build)
- deploy-prod.sh <tag>: pull da tag + up -d --no-build + verificação /api/version + rollback
- deploy.md: Metade A (CI) marcada como FEITA

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-16 09:25:27 +02:00