deploy.sh 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  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. 本地构建 (Static Site Generation)
  12. echo -e "${GREEN}正在执行本地构建 (npm run generate)...${NC}"
  13. npm run generate
  14. if [ $? -ne 0 ]; then
  15. echo "构建失败,请检查错误信息"
  16. exit 1
  17. fi
  18. # 2. 压缩构建产物
  19. echo -e "${GREEN}正在打包构建产物...${NC}"
  20. if [ -d ".output/public" ]; then
  21. cd .output/public
  22. # 打包所有文件到 release.tar.gz
  23. tar -czf ../../release.tar.gz .
  24. cd ../..
  25. echo "打包完成: release.tar.gz"
  26. else
  27. echo "错误: 未找到 .output/public 目录"
  28. exit 1
  29. fi
  30. # 3. 上传文件 (使用 expect 自动输入密码)
  31. echo -e "${GREEN}正在上传文件到服务器...${NC}"
  32. /usr/bin/expect <<EOF
  33. set timeout 300
  34. spawn scp -o StrictHostKeyChecking=no release.tar.gz $SERVER_USER@$SERVER_IP:$REMOTE_PARENT_DIR/release.tar.gz
  35. expect {
  36. "password:" { send "$SERVER_PASS\r" }
  37. "yes/no" { send "yes\r"; exp_continue }
  38. }
  39. expect eof
  40. EOF
  41. # 4. 服务器端解压部署
  42. echo -e "${GREEN}正在服务器上解压并部署...${NC}"
  43. /usr/bin/expect <<EOF
  44. set timeout 30
  45. spawn ssh -o StrictHostKeyChecking=no $SERVER_USER@$SERVER_IP
  46. expect {
  47. "password:" { send "$SERVER_PASS\r" }
  48. "yes/no" { send "yes\r"; exp_continue }
  49. }
  50. expect "#"
  51. # 进入目录
  52. send "mkdir -p $REMOTE_PARENT_DIR/public\r"
  53. send "cd $REMOTE_PARENT_DIR\r"
  54. # 解压覆盖到 public 目录
  55. send "tar -xzf release.tar.gz -C public\r"
  56. # 清理压缩包
  57. send "rm release.tar.gz\r"
  58. # 修正权限 (假设 web 用户为 www,如果不是宝塔面板可能需要调整)
  59. send "chown -R www:www public\r"
  60. send "chmod -R 755 public\r"
  61. send "exit\r"
  62. expect eof
  63. EOF
  64. echo -e "${GREEN}部署完成! 请访问 https://ccdw.xyz${NC}"
  65. # 5. 清理本地压缩包
  66. rm release.tar.gz