64 lines
2.3 KiB
Bash
64 lines
2.3 KiB
Bash
|
|
#!/usr/bin/env bash
|
||
|
|
# Full production deploy: push (optional) + backend pull + frontend tar + health
|
||
|
|
#
|
||
|
|
# Prerequisites on YOUR machine:
|
||
|
|
# - SSH: ~/.ssh/config Host nexus OR export NEXUS_SSH="root@47.254.123.106"
|
||
|
|
# - Key: export NEXUS_SSH_KEY=~/.ssh/id_rsa_nexus
|
||
|
|
# - Gitea push access for origin main
|
||
|
|
#
|
||
|
|
# Usage:
|
||
|
|
# cd "$NEXUS_ROOT"
|
||
|
|
# git add ... && git commit ... && git push origin main # if not pushed yet
|
||
|
|
# bash deploy/pre_deploy_check.sh
|
||
|
|
# bash deploy/deploy-production.sh
|
||
|
|
|
||
|
|
set -euo pipefail
|
||
|
|
|
||
|
|
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
||
|
|
cd "${ROOT}"
|
||
|
|
|
||
|
|
NEXUS_SSH_HOST="${NEXUS_SSH:-nexus}"
|
||
|
|
SSH_OPTS=(-o BatchMode=yes -o ConnectTimeout=15)
|
||
|
|
if [ -n "${NEXUS_SSH_KEY:-}" ]; then
|
||
|
|
SSH_OPTS+=(-i "${NEXUS_SSH_KEY}")
|
||
|
|
fi
|
||
|
|
ssh_cmd() { ssh "${SSH_OPTS[@]}" "${NEXUS_SSH_HOST}" "$@"; }
|
||
|
|
scp_cmd() { scp "${SSH_OPTS[@]}" "$@"; }
|
||
|
|
|
||
|
|
DEPLOY_PATH="${NEXUS_DEPLOY_PATH:-/www/wwwroot/api.synaglobal.vip}"
|
||
|
|
|
||
|
|
echo "═══ Nexus production deploy ═══"
|
||
|
|
echo "SSH target: ${NEXUS_SSH_HOST}"
|
||
|
|
echo "Deploy path: ${DEPLOY_PATH}"
|
||
|
|
|
||
|
|
if ! ssh_cmd "echo SSH OK" >/dev/null 2>&1; then
|
||
|
|
echo "ERROR: Cannot SSH to ${NEXUS_SSH_HOST}" >&2
|
||
|
|
echo " Configure ~/.ssh/config (Host nexus) or set NEXUS_SSH / NEXUS_SSH_KEY" >&2
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
|
||
|
|
echo "▶ Backend: git pull + restart..."
|
||
|
|
ssh_cmd "cd ${DEPLOY_PATH} && git fetch --all && git reset --hard origin/main && supervisorctl restart nexus"
|
||
|
|
|
||
|
|
echo "▶ Frontend: build + upload..."
|
||
|
|
cd frontend && npx vite build && cd ..
|
||
|
|
tar czf /tmp/nexus-frontend.tar.gz -C web/app index.html assets/
|
||
|
|
scp_cmd /tmp/nexus-frontend.tar.gz "${NEXUS_SSH_HOST}:/tmp/nexus-frontend.tar.gz"
|
||
|
|
ssh_cmd "cd ${DEPLOY_PATH}/web/app && tar xzf /tmp/nexus-frontend.tar.gz && rm /tmp/nexus-frontend.tar.gz"
|
||
|
|
if ssh_cmd "test -f ${DEPLOY_PATH}/deploy/prune_frontend_assets.py"; then
|
||
|
|
ssh_cmd "python3 ${DEPLOY_PATH}/deploy/prune_frontend_assets.py --dry-run"
|
||
|
|
ssh_cmd "python3 ${DEPLOY_PATH}/deploy/prune_frontend_assets.py"
|
||
|
|
fi
|
||
|
|
|
||
|
|
sleep 3
|
||
|
|
HEALTH=$(ssh_cmd "curl -s http://127.0.0.1:8600/health" 2>/dev/null || true)
|
||
|
|
SPA=$(ssh_cmd "curl -s -o /dev/null -w '%{http_code}' http://127.0.0.1:8600/app/" 2>/dev/null || echo "000")
|
||
|
|
echo " /health → ${HEALTH}"
|
||
|
|
echo " /app/ → ${SPA}"
|
||
|
|
if [ "${HEALTH}" = "ok" ] && [ "${SPA}" = "200" ]; then
|
||
|
|
echo "✓ Deploy successful"
|
||
|
|
else
|
||
|
|
echo "✗ Verification failed — check supervisor logs on server" >&2
|
||
|
|
exit 1
|
||
|
|
fi
|