Files

42 lines
1.8 KiB
Bash

#!/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/<projeto>"
PROD_VPS="10.99.0.1"
PROD_USER="deploy"
LOG_FILE="/home/deploy/stack/webhook-listener/deploy.log"
LOG_TAG="[<projeto>-PROD]"
DOCKER_HOST_REMOTE="unix:///run/user/1000/docker.sock"
LOCK_FILE="/tmp/deploy-<projeto>-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!"