From 86b06bec30d1028e6709d5029f3c7faa9e8d4884 Mon Sep 17 00:00:00 2001 From: VPS 4 Deploy Agent Date: Sat, 30 May 2026 16:35:14 +0200 Subject: [PATCH] perf: switch to Modelo A - build on VPS4, ship image to VPS1 (10x faster ~30s) --- deploy-prod.sh | 34 ++++++++++++++++++++-------------- 1 file changed, 20 insertions(+), 14 deletions(-) diff --git a/deploy-prod.sh b/deploy-prod.sh index 71a0cf4..167644d 100755 --- a/deploy-prod.sh +++ b/deploy-prod.sh @@ -34,27 +34,33 @@ git reset --hard origin/main log "🔢 Incrementando versão..." node update-version.js -# 3. Enviar código-fonte para VPS1 -log "🚚 rsync código-fonte → VPS1..." -rsync -avz --delete \ - --exclude '.git' \ - --exclude '.env' \ - --exclude 'node_modules' \ - --exclude 'uploads' \ - --exclude 'processed' \ - --exclude 'data' \ - --exclude 'dental-server/updates' \ - "$PROD_PATH/" \ +# 3. Build a imagem na VPS4 (Builder) +log "🐳 docker compose build na VPS4..." +docker compose -f "$PROD_PATH/docker-compose.yml" build app + +# 4. Exportar imagem para arquivo +log "💾 Exportando imagem para arquivo..." +IMAGE_NAME="rxscoreodontocom-app:latest" +IMAGE_TAR="/tmp/rxscoreodontocom-app.tar.gz" +docker save "$IMAGE_NAME" | gzip > "$IMAGE_TAR" + +# 5. Enviar docker-compose.yml + imagem para VPS1 +log "🚚 rsync docker-compose + imagem → VPS1..." +rsync -avz \ + "$PROD_PATH/docker-compose.yml" \ + "$PROD_PATH/.env.prod" \ + "$IMAGE_TAR" \ "${PROD_USER}@${PROD_VPS}:${PROD_PATH}/" -# 4. Build + swap do container na VPS1 (sem downtime) -log "🐳 docker compose build + up na VPS1..." +# 6. Carregar imagem e subir container na VPS1 +log "🚀 Load imagem + docker compose up na VPS1..." ssh -o BatchMode=yes -o StrictHostKeyChecking=no "${PROD_USER}@${PROD_VPS}" " set -e cd ${PROD_PATH} export DOCKER_HOST=${DOCKER_HOST_REMOTE} - docker compose build app + docker load < rxscoreodontocom-app.tar.gz docker compose up -d --no-deps app + rm -f rxscoreodontocom-app.tar.gz " # 5. Commit do bump de versão de volta ao Gitea (listener ignora → sem loop)