From 4cd83344a51311243be1a1d44e1c832edd9051b8 Mon Sep 17 00:00:00 2001 From: VPS 4 Builder Date: Sat, 11 Jul 2026 02:54:25 +0200 Subject: [PATCH] feat(deploy): poda imagens antigas ao fim do deploy (atual + 1 anterior) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- deploy-prod.sh | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/deploy-prod.sh b/deploy-prod.sh index f912b91..5781237 100755 --- a/deploy-prod.sh +++ b/deploy-prod.sh @@ -56,6 +56,28 @@ curl -s --max-time 10 https://scoreodonto.com/api/version || echo "(ainda subind echo docker logs scoreodontocom-scoreodonto-backend-1 --tail 5 2>&1 | grep -iE 'VERSION|MIGRATION' || true +echo "[poda] removendo imagens antigas (mantém as 2 versões mais recentes) ..." +# Política "atual + 1 anterior": após deployar, apaga as imagens vX.Y.Z locais +# além das 2 mais recentes de cada repo — a atual (recém-subida) e a anterior +# (rollback). Best-effort: roda com tudo já no ar e NUNCA aborta o deploy. +prune_old_images() { + local keep=2 repo tag olds inuse + inuse=$(docker ps --format '{{.Image}}' 2>/dev/null | sort -u) + for repo in "$@"; do + olds=$(docker images --format '{{.Tag}}' "$repo" 2>/dev/null \ + | grep -E '^v[0-9]+\.[0-9]+\.[0-9]+$' | sort -V | head -n -"$keep") || true + [ -z "$olds" ] && continue + while IFS= read -r tag; do + [ -z "$tag" ] && continue + printf '%s\n' "$inuse" | grep -qxF "$repo:$tag" && continue # nunca em uso + docker rmi "$repo:$tag" >/dev/null 2>&1 && echo " removida: $repo:$tag" + done <<< "$olds" + done +} +prune_old_images \ + 10.99.0.3:3000/ruicesar/scoreodonto-backend \ + 10.99.0.3:3000/ruicesar/scoreodonto-frontend || true + echo echo "✅ Deploy concluído (tag $TAG)." echo " Rollback: ./deploy-prod.sh "