From 89f998964f01456095b26d323231b8cae75629d1 Mon Sep 17 00:00:00 2001 From: VPS 4 Builder Date: Tue, 16 Jun 2026 08:30:05 +0200 Subject: [PATCH] =?UTF-8?q?docs:=20registry=20de=20imagens=20(Etapa=204)?= =?UTF-8?q?=20=E2=80=94=20Gitea=20Container=20Registry?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - REGISTRY.md: login, convenção de nomes, build+push, pull/rollback, gotcha do 499 - arquitetura.md/deploy.md: registry agora ativo (git.clube67.com), não mais 'não existe' Co-Authored-By: Claude Opus 4.8 --- documentação/REGISTRY.md | 89 +++++++++++++++++++++++++++++++++++++ documentação/arquitetura.md | 4 +- documentação/deploy.md | 2 +- 3 files changed, 92 insertions(+), 3 deletions(-) create mode 100644 documentação/REGISTRY.md diff --git a/documentação/REGISTRY.md b/documentação/REGISTRY.md new file mode 100644 index 0000000..f4146d6 --- /dev/null +++ b/documentação/REGISTRY.md @@ -0,0 +1,89 @@ +# Registry de imagens — Container Registry do Gitea + +> **Estado: ATIVO e validado** (16/jun/2026, Etapa 4). Não há serviço novo a manter: usamos o **Container Registry embutido do Gitea** (v1.26.1) na VPS3. + +--- + +## 1. O que é + +O Gitea já expõe um **registry OCI/Docker** nativo. Não foi preciso instalar `registry:2` nem tocar em `daemon.json`/`insecure-registries`. As imagens do ScoreOdonto ficam versionadas junto do código, no mesmo Gitea que é a fonte da verdade. + +| Item | Valor | +|------|-------| +| Endereço (push/pull) | **`git.clube67.com`** (HTTPS, TLS válido via Traefik) | +| Namespace | `ruicesar/` (dono do repo no Gitea) | +| Alternativa interna | `10.99.0.3:3000` — **NÃO usar**: HTTP exige `insecure-registries` + restart do Docker (derruba produção) | +| Auth | usuário Gitea + **token** com escopo `write:package` / `read:package` | + +> Usamos sempre o domínio **HTTPS** justamente para **não** precisar reconfigurar nem reiniciar o Docker em VPS4/VPS1 (Live Restore está desligado → restart bouncearia todos os containers). + +--- + +## 2. Login (uma vez por máquina) + +Em cada máquina que vai dar push/pull (VPS4 builda; VPS1 consome): + +```bash +docker login git.clube67.com -u +# senha = TOKEN do Gitea (Configurações → Aplicações → Gerar Token, escopos write:package + read:package) +``` + +A credencial fica no keystore do Docker (`~/.docker/config.json`). **Nunca** colocar token em código, doc, script ou log. Se um token vazar (ex.: colado em chat), **revogue no Gitea** e gere outro. + +--- + +## 3. Convenção de nomes + +``` +git.clube67.com/ruicesar/scoreodonto-backend: +git.clube67.com/ruicesar/scoreodonto-frontend: +``` + +- `` = semver com o mesmo valor de `APP_VERSION` (ex.: `v1.0.13`). +- Mantém-se também a tag móvel `:latest` apontando para a última. +- A tag semântica é o que a **Etapa 6 (deploy por tag)** usa para promover à produção. + +--- + +## 4. Build + push (fluxo manual de hoje, na VPS4) + +```bash +cd /home/deploy/stack/scoreodonto.com +export APP_VERSION=$(grep -oE 'V[0-9]+\.[0-9]+\.[0-9]+' frontend/constants.ts | head -1) +export GIT_COMMIT=$(git rev-parse --short HEAD) +export BUILD_TIME=$(date -u +'%Y-%m-%d %H:%M UTC') +export APP_ENV=PROD # ou DEV para imagens de teste + +docker compose build scoreodonto-backend scoreodonto-frontend + +V=$(echo "$APP_VERSION" | tr 'V' 'v') # V1.0.13 -> v1.0.13 +docker tag scoreodontocom-scoreodonto-backend:latest git.clube67.com/ruicesar/scoreodonto-backend:$V +docker tag scoreodontocom-scoreodonto-frontend:latest git.clube67.com/ruicesar/scoreodonto-frontend:$V +docker push git.clube67.com/ruicesar/scoreodonto-backend:$V +docker push git.clube67.com/ruicesar/scoreodonto-frontend:$V +``` + +> ⚠️ **HTTP 499 em camada grande = timeout transitório do proxy.** O push é resumível: basta **repetir o `docker push`** que as camadas já enviadas são puladas e a faltante completa. (Visto e contornado na validação inicial.) + +--- + +## 5. Pull (na VPS1, quando a Etapa 6 estiver pronta) + +```bash +export DOCKER_HOST=unix:///run/user/1000/docker.sock +docker pull git.clube67.com/ruicesar/scoreodonto-backend:v1.0.13 +docker pull git.clube67.com/ruicesar/scoreodonto-frontend:v1.0.13 +# depois: compose apontando para essas imagens + docker compose up -d +``` + +Rollback = `docker pull` da tag anterior + `up -d`. Sem rebuild. + +--- + +## 6. Validação feita (16/jun/2026) + +- `docker login git.clube67.com` (usuário `ruicesar`) → **Login Succeeded**. +- Push de `scoreodonto-backend:v1.0.13`/`:latest` e `scoreodonto-frontend:v1.0.13`/`:latest` → OK (com 1 retry por 499 transitório). +- Teste de pull (remover tag local + `docker pull`) → **Downloaded** OK. + +Próximos: **Etapa 5** (automatizar build+push no Gitea Actions) e **Etapa 6** (deploy por tag na VPS1 consumindo este registry). diff --git a/documentação/arquitetura.md b/documentação/arquitetura.md index d3f2343..d1800ab 100644 --- a/documentação/arquitetura.md +++ b/documentação/arquitetura.md @@ -67,7 +67,7 @@ Serviços instalados **direto no host** (não em container): - **DragonflyDB** `:6379` — cache (índice `/1` reservado ao ScoreOdonto). - **NATS** `:4222` e **Temporal** `:7233` — mensageria / workflows. - **Gitea** `:3000` — **fonte oficial da verdade do código**. Repo `ruicesar/scoreodonto.com`, acesso por `ssh://git@10.99.0.3/ruicesar/scoreodonto.com.git`. É o motor de CI/CD (ver `deploy.md`). -- **Registry Docker privado:** **ainda não existe** (porta 5000 fechada). Planejado para a VPS3. +- **Registry de imagens:** o **Container Registry embutido do Gitea** está ativo e em uso, acessível via HTTPS em `git.clube67.com` (namespace `ruicesar/`). Não há `registry:2` separado. Ver `REGISTRY.md`. ## 4. VPS4 — Desenvolvimento & Builder (10.99.0.4) @@ -128,4 +128,4 @@ Consequências práticas: - ❌ **Não existe staging.** Não há `staging.scoreodonto.com`, nem stack `*-staging`, nem banco `scoreodonto_staging`. O único ambiente de teste é `dev.scoreodonto.com` (VPS4), com o banco de produção. - ❌ **Não existe listener de deploy ativo** para o scoreodonto.com. O antigo `listener-scoreodonto.js` (porta 9002) foi deletado e o serviço está desligado; não há webhook do scoreodonto.com registrado no Gitea. Hoje, `git push` **não dispara** deploy automático. (O fluxo-alvo para reativar isso está em `deploy.md`.) -- ❌ **Não existe registry privado** ainda (planejado para a VPS3). +- ✅ **Registry:** existe e está em uso — é o Container Registry embutido do Gitea (`git.clube67.com`), não um serviço separado. Ver `REGISTRY.md`. diff --git a/documentação/deploy.md b/documentação/deploy.md index 008f06b..370e442 100644 --- a/documentação/deploy.md +++ b/documentação/deploy.md @@ -93,7 +93,7 @@ Visível no **rodapé** da aplicação, em um **endpoint de diagnóstico** (ex.: | Etapa | Entrega | Status | |-------|---------|--------| | 3 | Versionamento visível (rodapé + endpoint + log) | ✅ | -| 4 | Registry Docker privado na VPS3 | 🔜 | +| 4 | Registry Docker privado na VPS3 | ✅ (Gitea Container Registry — ver `REGISTRY.md`) | | 5 | Pipeline de build no Gitea (push → imagem → registry), **sem deploy** | 🔜 | | 6 | Deploy por TAG (`vX.Y.Z` → produção na VPS1) + rollback por imagem | 🔜 |