deploy.sh 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. #!/bin/bash
  2. # 服务器配置信息
  3. SERVER_IP="45.61.60.10"
  4. SERVER_USER="root"
  5. SERVER_PASS="UQb9TgSwC@vwhEM"
  6. REMOTE_PARENT_DIR="/var/www/ccdw-website"
  7. # 颜色输出
  8. GREEN='\033[0;32m'
  9. NC='\033[0m'
  10. echo -e "${GREEN}=== 开始部署流程 ===${NC}"
  11. # 1. 前端构建
  12. echo -e "${GREEN}[1/5] 执行前端构建 (Vite Build)...${NC}"
  13. npm run build
  14. if [ $? -ne 0 ]; then
  15. echo "❌ 构建失败,请检查错误信息"
  16. exit 1
  17. fi
  18. # 2. 打包文件
  19. echo -e "${GREEN}[2/5] 打包部署文件...${NC}"
  20. rm -rf .deploy_temp
  21. mkdir -p .deploy_temp
  22. # 复制前端产物
  23. cp -r dist .deploy_temp/
  24. # 复制后端代码
  25. cp -r server .deploy_temp/
  26. # 删除不需要的文件
  27. rm -rf .deploy_temp/server/node_modules
  28. rm -rf .deploy_temp/server/.DS_Store
  29. rm -rf .deploy_temp/server/package-lock.json
  30. # 进入临时目录打包
  31. cd .deploy_temp
  32. tar -czf ../release.tar.gz .
  33. cd ..
  34. rm -rf .deploy_temp
  35. echo "✅ 打包完成: release.tar.gz"
  36. # 3. 上传
  37. echo -e "${GREEN}[3/5] 上传文件到服务器...${NC}"
  38. /usr/bin/expect <<EOF
  39. set timeout 300
  40. spawn scp -o StrictHostKeyChecking=no release.tar.gz $SERVER_USER@$SERVER_IP:$REMOTE_PARENT_DIR/release.tar.gz
  41. expect {
  42. "password:" { send "$SERVER_PASS\r" }
  43. "yes/no" { send "yes\r"; exp_continue }
  44. }
  45. expect eof
  46. EOF
  47. # 4. 远程部署
  48. echo -e "${GREEN}[4/5] 服务器端部署...${NC}"
  49. REMOTE_COMMANDS="
  50. mkdir -p $REMOTE_PARENT_DIR && \
  51. cd $REMOTE_PARENT_DIR && \
  52. tar -xzf release.tar.gz && \
  53. rm release.tar.gz && \
  54. cd server && \
  55. echo 'Installing dependencies...' && \
  56. npm install --omit=dev --registry=https://registry.npmmirror.com && \
  57. (command -v pm2 &> /dev/null || npm install -g pm2) && \
  58. (pm2 describe ccdw-server > /dev/null 2>&1 && pm2 reload ccdw-server || pm2 start index.js --name ccdw-server) && \
  59. pm2 save
  60. "
  61. /usr/bin/expect <<EOF
  62. set timeout 300
  63. spawn ssh -o StrictHostKeyChecking=no $SERVER_USER@$SERVER_IP "$REMOTE_COMMANDS"
  64. expect {
  65. "password:" { send "$SERVER_PASS\r"; exp_continue }
  66. "yes/no" { send "yes\r"; exp_continue }
  67. eof
  68. }
  69. EOF
  70. # 5. 清理本地
  71. rm release.tar.gz
  72. echo -e "${GREEN}=== 部署成功! ===${NC}"
  73. echo -e "服务已启动在服务器的 3001 端口。"
  74. echo -e "Node 服务现在同时也托管了前端页面 (http://IP:3001)。"
  75. echo -e "如果您使用 Nginx,请配置反向代理将域名流量转发到 localhost:3001。"