#!/usr/bin/env bash set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PROJECT_ROOT="$(cd "${SCRIPT_DIR}/.." && pwd)" REMOTE_HOST="${DEPLOY_HOST:-129.28.197.250}" REMOTE_USER="${DEPLOY_USER:-root}" REMOTE_PASSWORD="${DEPLOY_PASSWORD:-HUIchuang@2020#\$123..Server6}" REMOTE_TARGET_DIR="${DEPLOY_TARGET_DIR:-/usr/local/nginx/video-script-admin}" BUILD_COMMAND="${BUILD_COMMAND:-npm run build}" require_command() { if ! command -v "$1" >/dev/null 2>&1; then echo "Missing required command: $1" >&2 exit 1 fi } require_command npm require_command tar require_command sshpass require_command ssh require_command scp cd "${PROJECT_ROOT}" echo "==> Building project" ${BUILD_COMMAND} if [ ! -d "dist" ]; then echo "Build output dist/ not found" >&2 exit 1 fi TIMESTAMP="$(date +"%Y%m%d%H%M%S")" ARCHIVE_NAME="video-script-admin-${TIMESTAMP}.tar.gz" LOCAL_ARCHIVE="/tmp/${ARCHIVE_NAME}" REMOTE_ARCHIVE="/tmp/${ARCHIVE_NAME}" cleanup() { rm -f "${LOCAL_ARCHIVE}" } trap cleanup EXIT echo "==> Packing dist/" tar -C "dist" -czf "${LOCAL_ARCHIVE}" . echo "==> Uploading package to ${REMOTE_USER}@${REMOTE_HOST}" sshpass -p "${REMOTE_PASSWORD}" scp -o StrictHostKeyChecking=no "${LOCAL_ARCHIVE}" "${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_ARCHIVE}" echo "==> Deploying to ${REMOTE_TARGET_DIR}" sshpass -p "${REMOTE_PASSWORD}" ssh -o StrictHostKeyChecking=no "${REMOTE_USER}@${REMOTE_HOST}" \ "REMOTE_ARCHIVE='${REMOTE_ARCHIVE}' REMOTE_TARGET_DIR='${REMOTE_TARGET_DIR}' bash -s" <<'EOF' set -euo pipefail mkdir -p "${REMOTE_TARGET_DIR}" find "${REMOTE_TARGET_DIR}" -mindepth 1 -maxdepth 1 -exec rm -rf -- {} + tar -xzf "${REMOTE_ARCHIVE}" -C "${REMOTE_TARGET_DIR}" rm -f "${REMOTE_ARCHIVE}" EOF echo "==> Deployment complete"