deploy.sh 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. #!/usr/bin/env bash
  2. set -euo pipefail
  3. # One-command deploy script:
  4. # 1) Build production bundle locally
  5. # 2) Upload archive to server
  6. # 3) Extract into target directory and fix ownership
  7. SERVER_HOST="47.83.117.213"
  8. SERVER_USER="root"
  9. SERVER_PASSWORD='Bkr!Srv#Mt5@Xoh_9KpL2'
  10. REMOTE_ARCHIVE="/tmp/manager-service-font-dist.tar.gz"
  11. REMOTE_DIR="/usr/local/golden/manager-service/front"
  12. LOCAL_ARCHIVE="dist.tar.gz"
  13. if ! command -v expect >/dev/null 2>&1; then
  14. echo "Error: expect is required but not installed."
  15. exit 1
  16. fi
  17. echo "==> Installing dependencies"
  18. npm install
  19. echo "==> Building production bundle"
  20. # Pin production env (Vite does not override env vars already set).
  21. export VITE_API_BASE="https://ad.jinclab.com"
  22. export VITE_USE_HASH_HISTORY="true"
  23. npm run build
  24. echo "==> Verifying API base in bundle (no old API origin)"
  25. # 合法包内可能含主机名字面量(如 resolveMediaUrl 用于把旧图站迁到线上),只拦截「整段 URL / 旧端口」误打进 axios 等配置
  26. if [[ -d dist/assets ]] && grep -l -E 'https?://103\.158\.191\.66|103\.158\.191\.66:8505' dist/assets/*.js 2>/dev/null | grep -q .; then
  27. echo "Error: dist still embeds old API origin (http(s)://103.158... or :8505). Check .env / build mode. Aborting deploy."
  28. exit 1
  29. fi
  30. echo "==> Packaging dist/"
  31. COPYFILE_DISABLE=1 tar -czf "${LOCAL_ARCHIVE}" dist
  32. echo "==> Uploading package to server"
  33. expect <<EOF
  34. set timeout 180
  35. spawn scp -o StrictHostKeyChecking=no "${LOCAL_ARCHIVE}" "${SERVER_USER}@${SERVER_HOST}:${REMOTE_ARCHIVE}"
  36. expect {
  37. -re "yes/no" { send "yes\r"; exp_continue }
  38. -re "password:" { send "${SERVER_PASSWORD}\r" }
  39. }
  40. expect eof
  41. EOF
  42. echo "==> Deploying on remote server"
  43. expect <<EOF
  44. set timeout 180
  45. spawn ssh -o StrictHostKeyChecking=no "${SERVER_USER}@${SERVER_HOST}" "mkdir -p ${REMOTE_DIR} && rm -rf ${REMOTE_DIR}/* && tar -xzf ${REMOTE_ARCHIVE} -C ${REMOTE_DIR} --strip-components=1 && rm -f ${REMOTE_DIR}/._* ${REMOTE_DIR}/assets/._* && chown -R root:root ${REMOTE_DIR}"
  46. expect {
  47. -re "yes/no" { send "yes\r"; exp_continue }
  48. -re "password:" { send "${SERVER_PASSWORD}\r" }
  49. }
  50. expect eof
  51. EOF
  52. echo "==> Verifying remote files"
  53. expect <<EOF
  54. set timeout 60
  55. spawn ssh -o StrictHostKeyChecking=no "${SERVER_USER}@${SERVER_HOST}" "ls -lah ${REMOTE_DIR}"
  56. expect {
  57. -re "yes/no" { send "yes\r"; exp_continue }
  58. -re "password:" { send "${SERVER_PASSWORD}\r" }
  59. }
  60. expect eof
  61. EOF
  62. echo "Deployment completed: ${REMOTE_DIR}"