deploy.sh 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. #!/usr/bin/env bash
  2. set -euo pipefail
  3. SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
  4. PROJECT_ROOT="$(cd "${SCRIPT_DIR}/.." && pwd)"
  5. REMOTE_HOST="${DEPLOY_HOST:-129.28.197.250}"
  6. REMOTE_USER="${DEPLOY_USER:-root}"
  7. REMOTE_PASSWORD="${DEPLOY_PASSWORD:-HUIchuang@2020#\$123..Server6}"
  8. REMOTE_TARGET_DIR="${DEPLOY_TARGET_DIR:-/usr/local/nginx/video-script-admin}"
  9. BUILD_COMMAND="${BUILD_COMMAND:-npm run build}"
  10. require_command() {
  11. if ! command -v "$1" >/dev/null 2>&1; then
  12. echo "Missing required command: $1" >&2
  13. exit 1
  14. fi
  15. }
  16. require_command npm
  17. require_command tar
  18. require_command sshpass
  19. require_command ssh
  20. require_command scp
  21. cd "${PROJECT_ROOT}"
  22. echo "==> Building project"
  23. ${BUILD_COMMAND}
  24. if [ ! -d "dist" ]; then
  25. echo "Build output dist/ not found" >&2
  26. exit 1
  27. fi
  28. TIMESTAMP="$(date +"%Y%m%d%H%M%S")"
  29. ARCHIVE_NAME="video-script-admin-${TIMESTAMP}.tar.gz"
  30. LOCAL_ARCHIVE="/tmp/${ARCHIVE_NAME}"
  31. REMOTE_ARCHIVE="/tmp/${ARCHIVE_NAME}"
  32. cleanup() {
  33. rm -f "${LOCAL_ARCHIVE}"
  34. }
  35. trap cleanup EXIT
  36. echo "==> Packing dist/"
  37. tar -C "dist" -czf "${LOCAL_ARCHIVE}" .
  38. echo "==> Uploading package to ${REMOTE_USER}@${REMOTE_HOST}"
  39. sshpass -p "${REMOTE_PASSWORD}" scp -o StrictHostKeyChecking=no "${LOCAL_ARCHIVE}" "${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_ARCHIVE}"
  40. echo "==> Deploying to ${REMOTE_TARGET_DIR}"
  41. sshpass -p "${REMOTE_PASSWORD}" ssh -o StrictHostKeyChecking=no "${REMOTE_USER}@${REMOTE_HOST}" \
  42. "REMOTE_ARCHIVE='${REMOTE_ARCHIVE}' REMOTE_TARGET_DIR='${REMOTE_TARGET_DIR}' bash -s" <<'EOF'
  43. set -euo pipefail
  44. mkdir -p "${REMOTE_TARGET_DIR}"
  45. find "${REMOTE_TARGET_DIR}" -mindepth 1 -maxdepth 1 -exec rm -rf -- {} +
  46. tar -xzf "${REMOTE_ARCHIVE}" -C "${REMOTE_TARGET_DIR}"
  47. rm -f "${REMOTE_ARCHIVE}"
  48. EOF
  49. echo "==> Deployment complete"