#!/bin/bash # ─── deploy-prod-onhost.sh (EXEMPLO — Modelo B: build no host de produção) ──── # Envia o CÓDIGO-FONTE para a VPS 1 e a própria VPS 1 builda a imagem Docker. # Mais simples; indicado quando o build é leve (ex.: app Node servindo estáticos). # Faz swap do container com quase zero downtime (--no-deps). # ───────────────────────────────────────────────────────────────────────────── set -e PROJECT_PATH="/home/deploy/stack/" PROD_VPS="10.99.0.1" PROD_USER="deploy" LOG_FILE="/home/deploy/stack/webhook-listener/deploy.log" LOG_TAG="[]" DOCKER_HOST_REMOTE="unix:///run/user/1000/docker.sock" SERVICE="app" # nome do serviço no docker-compose.yml LOCK_FILE="/tmp/deploy-.lock" if [ -f "$LOCK_FILE" ]; then echo "🚨 Deploy já em andamento!"; exit 1; fi touch "$LOCK_FILE"; trap 'rm -f "$LOCK_FILE"' EXIT log() { echo "[$(date -u +'%Y-%m-%dT%H:%M:%SZ')] ${LOG_TAG} $1" | tee -a "$LOG_FILE"; } log "🚀 Iniciando deploy (Modelo B — build no host)..." # 1. GitOps na VPS 4 cd "$PROJECT_PATH" log "📦 git fetch + reset --hard origin/main" git fetch origin main git reset --hard origin/main # 2. Enviar o FONTE para a VPS 1 (sem node_modules, sem dados/segredos) log "🚚 rsync do código-fonte -> VPS1..." rsync -avz --delete \ --exclude '.git' --exclude '.env' --exclude 'node_modules' \ --exclude 'uploads' --exclude 'processed' --exclude 'data' \ "$PROJECT_PATH/" "${PROD_USER}@${PROD_VPS}:${PROJECT_PATH}/" # 3. Build + swap do container NA VPS 1 log "🐳 build + up (no-deps) na VPS1..." ssh -o BatchMode=yes -o StrictHostKeyChecking=no "${PROD_USER}@${PROD_VPS}" " set -e cd ${PROJECT_PATH} export DOCKER_HOST=${DOCKER_HOST_REMOTE} docker compose build ${SERVICE} docker compose up -d --no-deps ${SERVICE} " log "✅ Deploy (Modelo B) concluído sem downtime!"