deploy.sh 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. #!/bin/bash
  2. # 服务器配置信息
  3. SERVER_IP="47.253.147.187"
  4. SERVER_USER="root"
  5. SERVER_PASS="5H0FuZ:2s0q)Lx"
  6. REMOTE_PARENT_DIR="/www/wwwroot/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. /usr/bin/expect <<EOF
  50. set timeout 300
  51. spawn ssh -o StrictHostKeyChecking=no $SERVER_USER@$SERVER_IP
  52. expect {
  53. "password:" { send "$SERVER_PASS\r" }
  54. "yes/no" { send "yes\r"; exp_continue }
  55. }
  56. expect "#"
  57. # 准备目录
  58. send "mkdir -p $REMOTE_PARENT_DIR\r"
  59. send "cd $REMOTE_PARENT_DIR\r"
  60. # 解压覆盖 (dist 和 server 目录)
  61. send "tar -xzf release.tar.gz\r"
  62. send "rm release.tar.gz\r"
  63. # 安装/更新后端依赖
  64. send "cd server\r"
  65. send "echo 'Installing dependencies...'\r"
  66. send "npm install --omit=dev --registry=https://registry.npmmirror.com\r"
  67. # 检查 PM2 是否安装
  68. send "if ! command -v pm2 &> /dev/null; then npm install -g pm2; fi\r"
  69. # 重启服务
  70. # 如果没有运行则启动,如果运行了则重启
  71. send "pm2 describe ccdw-server > /dev/null && pm2 reload ccdw-server || pm2 start index.js --name ccdw-server\r"
  72. send "pm2 save\r"
  73. send "exit\r"
  74. expect eof
  75. EOF
  76. # 5. 清理本地
  77. rm release.tar.gz
  78. echo -e "${GREEN}=== 部署成功! ===${NC}"
  79. echo -e "服务已启动在服务器的 3001 端口。"
  80. echo -e "Node 服务现在同时也托管了前端页面 (http://IP:3001)。"
  81. echo -e "如果您使用 Nginx,请配置反向代理将域名流量转发到 localhost:3001。"