#!/bin/bash # ─── deploy-to-prod.sh (EXEMPLO — Promoção manual Staging -> Produção) ──────── # Usado quando há um ambiente de STAGING na VPS 4 (docker-compose-staging.yml) e # se deseja promover a build já validada para a PRODUÇÃO (VPS 1). # ───────────────────────────────────────────────────────────────────────────── 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="[-PROD]" DOCKER_HOST_REMOTE="unix:///run/user/1000/docker.sock" LOCK_FILE="/tmp/deploy--release.lock" if [ -f "$LOCK_FILE" ]; then echo "🚨 Promoção 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 "🚀 Promovendo Staging (VPS4) -> Produção (VPS1)..." # 1. Backend (fonte/artefato já validado em staging) rsync -avz --delete --exclude '.env' --exclude 'node_modules/.cache' \ "$PROJECT_PATH/backend/" "${PROD_USER}@${PROD_VPS}:${PROJECT_PATH}/backend/" # 2. Frontend (build compilada) rsync -avz --delete \ "$PROJECT_PATH/frontend/dist/" "${PROD_USER}@${PROD_VPS}:${PROJECT_PATH}/frontend/dist/" # 3. Infra (compose + configs) rsync -avz \ "$PROJECT_PATH/docker-compose.yml" "$PROJECT_PATH/nginx" \ "${PROD_USER}@${PROD_VPS}:${PROJECT_PATH}/" # 4. Subir em produção log "🔄 docker compose up -d na VPS1..." ssh -o BatchMode=yes "${PROD_USER}@${PROD_VPS}" \ "cd ${PROJECT_PATH} && DOCKER_HOST=${DOCKER_HOST_REMOTE} docker compose up -d" log "✅ Promoção para produção concluída!"