73 lines
2.7 KiB
Bash
Executable File
73 lines
2.7 KiB
Bash
Executable File
#!/bin/bash
|
|
# ─── deploy-prod.sh (rx.scoreodonto.com) ──────────────────────────────────────
|
|
# GitOps: VPS4 (Builder) → VPS1 (Produção)
|
|
# Modelo B: rsync do código-fonte → docker compose build na VPS1
|
|
# ──────────────────────────────────────────────────────────────────────────────
|
|
set -e
|
|
|
|
PROD_VPS="10.99.0.1"
|
|
PROD_USER="deploy"
|
|
PROD_PATH="/home/deploy/stack/rx.scoreodonto.com"
|
|
LOG_FILE="/home/deploy/stack/webhook-listener/deploy.log"
|
|
LOG_TAG="[rx.scoreodonto.com]"
|
|
DOCKER_HOST_REMOTE="unix:///run/user/1000/docker.sock"
|
|
|
|
LOCK_FILE="/tmp/deploy-rx-scoreodonto.lock"
|
|
if [ -f "$LOCK_FILE" ]; then
|
|
echo "🚨 Deploy já em andamento!" | tee -a "$LOG_FILE"
|
|
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..."
|
|
|
|
# 1. GitOps: fonte de verdade é o Gitea (VPS3)
|
|
cd "$PROD_PATH"
|
|
log "📦 git fetch + reset --hard origin/main"
|
|
git fetch origin main
|
|
git reset --hard origin/main
|
|
|
|
# 2. Bump de versão (sincroniza version.txt → package.json + index.html)
|
|
log "🔢 Incrementando versão..."
|
|
node update-version.js
|
|
|
|
# 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" \
|
|
"$IMAGE_TAR" \
|
|
"${PROD_USER}@${PROD_VPS}:${PROD_PATH}/"
|
|
|
|
# 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 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)
|
|
# package.json não é incluído propositalmente: preserva o cache de npm install no Docker
|
|
log "💾 git commit + push do bump de versão..."
|
|
git add dental-server/version.txt dental-server/public/index.html
|
|
git commit -m "chore(deploy): bump version" || true
|
|
git push origin main || true
|
|
|
|
log "✅ Deploy concluído sem downtime!"
|