diff --git a/dev-build.sh b/dev-build.sh new file mode 100755 index 0000000..11bc40a --- /dev/null +++ b/dev-build.sh @@ -0,0 +1,40 @@ +#!/usr/bin/env bash +# ============================================================================= +# Build + sobe o ambiente de DEV (porta 8020 / dev.scoreodonto.com) carimbando +# a VERSÃO a partir do git — para que /api/version (e o rótulo no app) deixe de +# mostrar apenas "dev". +# +# Uso (NA VPS): ./dev-build.sh +# +# Diferença p/ produção: a prod consome imagem versionada e injeta a tag em +# runtime (deploy-prod.sh). Em DEV buildamos local, então derivamos a versão do +# git AQUI (no host, onde o .git existe) e passamos como build-args do compose. +# ============================================================================= +set -euo pipefail +cd "$(dirname "$0")" + +export DOCKER_HOST=unix:///run/user/1000/docker.sock + +# Versão semântica + commit + carimbo de build, derivados do git. +# APP_VERSION -> ex.: v1.0.18-16-g6adf353 (tag mais próxima + distância + sha) +# GIT_COMMIT -> sha curto +export APP_VERSION="$(git describe --tags --always --dirty 2>/dev/null || echo dev)" +export GIT_COMMIT="$(git rev-parse --short HEAD 2>/dev/null || echo dev)" +export BUILD_TIME="$(date -u +%Y-%m-%dT%H:%M:%SZ)" +export APP_ENV="DEV" + +echo "──────────────────────────────────────────────────────────────" +echo " Build ScoreOdonto → DEV (porta 8020)" +echo " APP_VERSION = $APP_VERSION" +echo " GIT_COMMIT = $GIT_COMMIT" +echo " BUILD_TIME = $BUILD_TIME" +echo "──────────────────────────────────────────────────────────────" + +docker compose up -d --build scoreodonto-backend scoreodonto-frontend nginx + +echo +echo -n " versão no ar (DEV): " +sleep 8 +curl -s --max-time 10 http://localhost:8020/api/version || echo "(ainda subindo — confira em alguns segundos)" +echo +echo "✅ DEV buildado com versão carimbada." diff --git a/documentação/STATUS-SEGURANCA-E-PRODUCAO.md b/documentação/STATUS-SEGURANCA-E-PRODUCAO.md index ba78cf5..7dff5ea 100644 --- a/documentação/STATUS-SEGURANCA-E-PRODUCAO.md +++ b/documentação/STATUS-SEGURANCA-E-PRODUCAO.md @@ -11,7 +11,7 @@ ### 1. Segredos - **`JWT_SECRET` rotacionado em DEV e PRODUÇÃO** (recriado o backend na VPS1 na mesma tag, sem rebuild; `/api/health` e `/api/version` validados). → **vetor de tomada de conta FECHADO** (o segredo vazado não - forja mais tokens). Commit `fcf2fb1`. + forja mais tokens). **Ação operacional na VPS1 — sem commit** (o segredo não é versionado). - **`backend/.env` fora do tracking do git** + `backend/.dockerignore` (o Dockerfile fazia `COPY . .` sem `.dockerignore` → segredos iam para dentro da imagem) + `.env.example`. Commits `fcf2fb1`. - **Senhas hardcoded removidas do `docker-compose.yml`**: banco via `SCOREO_DB_PASS` (com `:?` fail-fast); @@ -89,7 +89,11 @@ 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. +> A rotação do `JWT_SECRET` **não** está nesta lista (foi ação operacional na VPS, sem commit). ``` +6adf353 docs: status geral de segurança & produção (este documento) f22e30e docs(skills): completa as 62 skills e83af04 docs(skills): biblioteca operacional 5b99292 docs: auditoria funcional + estratégica