49 lines
2.0 KiB
Bash
49 lines
2.0 KiB
Bash
#!/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/<projeto>"
|
|
PROD_VPS="10.99.0.1"
|
|
PROD_USER="deploy"
|
|
LOG_FILE="/home/deploy/stack/webhook-listener/deploy.log"
|
|
LOG_TAG="[<projeto>]"
|
|
DOCKER_HOST_REMOTE="unix:///run/user/1000/docker.sock"
|
|
SERVICE="app" # nome do serviço no docker-compose.yml
|
|
|
|
LOCK_FILE="/tmp/deploy-<projeto>.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!"
|