deploy-frontend-ayt.sh 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. #!/bin/bash
  2. # ============================================
  3. # 灵越智报 - 前端部署到 ayt 服务器 (139.196.72.192)
  4. # 本地构建 → 上传 dist → 配置 Nginx
  5. # ============================================
  6. # 颜色定义
  7. RED='\033[0;31m'
  8. GREEN='\033[0;32m'
  9. YELLOW='\033[1;33m'
  10. BLUE='\033[0;34m'
  11. NC='\033[0m'
  12. # ========== 配置区域 ==========
  13. SERVER_USER="root"
  14. SERVER_HOST="139.196.72.192"
  15. SERVER_PORT="28529"
  16. # 路径配置
  17. LOCAL_PROJECT_DIR="/home/hws/workspace/GitLab/ay/lingyue-zhibao"
  18. LOCAL_FRONTEND_DIR="${LOCAL_PROJECT_DIR}/frontend/vue-demo"
  19. LOCAL_DIST_DIR="${LOCAL_FRONTEND_DIR}/dist"
  20. REMOTE_FRONTEND_DIR="/data/web/lingyuezhibao"
  21. REMOTE_NGINX_CONF="/etc/nginx/conf.d/lingyue-frontend-ayt.conf"
  22. # 后端 API 地址(前端请求代理目标)
  23. BACKEND_API="http://127.0.0.1:8001" # ayt 服务后端通常在 8080 (gateway)
  24. # 前端监听端口
  25. FRONTEND_PORT=28082
  26. # ==============================
  27. log_info() { echo -e "${GREEN}[INFO]${NC} $1"; }
  28. log_warn() { echo -e "${YELLOW}[WARN]${NC} $1"; }
  29. log_error() { echo -e "${RED}[ERROR]${NC} $1"; }
  30. log_title() { echo -e "\n${BLUE}========== $1 ==========${NC}\n"; }
  31. ssh_cmd() {
  32. ssh -p ${SERVER_PORT} ${SERVER_USER}@${SERVER_HOST} "$@"
  33. }
  34. # 检查服务器连接
  35. check_connection() {
  36. log_title "检查服务器连接"
  37. if ssh_cmd "echo 'OK'" > /dev/null 2>&1; then
  38. log_info "服务器连接成功: ${SERVER_USER}@${SERVER_HOST}"
  39. else
  40. log_error "无法连接服务器: ${SERVER_USER}@${SERVER_HOST}"
  41. exit 1
  42. fi
  43. }
  44. # 安装依赖
  45. install_deps() {
  46. log_title "安装前端依赖"
  47. cd ${LOCAL_FRONTEND_DIR}
  48. if [ ! -d "node_modules" ]; then
  49. log_info "安装 npm 依赖..."
  50. yarn install || npm install
  51. else
  52. log_info "依赖已存在,跳过安装"
  53. fi
  54. }
  55. # 本地构建
  56. build_local() {
  57. log_title "本地构建前端"
  58. cd ${LOCAL_FRONTEND_DIR}
  59. rm -rf dist
  60. log_info "执行 yarn build..."
  61. yarn build || npm run build
  62. if [ ! -d "${LOCAL_DIST_DIR}" ]; then
  63. log_error "构建失败: dist 目录不存在"
  64. exit 1
  65. fi
  66. }
  67. # 上传 dist
  68. upload_dist() {
  69. log_title "上传前端文件到服务器"
  70. ssh_cmd "mkdir -p ${REMOTE_FRONTEND_DIR}"
  71. # 备份旧版本
  72. log_info "备份旧版本..."
  73. ssh_cmd "cd ${REMOTE_FRONTEND_DIR} && [ -d assets ] && tar -czf ../lingyuezhibao_bak_\$(date +%Y%m%d%H%M%S).tar.gz . || true"
  74. log_info "正在上传 dist 目录..."
  75. scp -P ${SERVER_PORT} -r "${LOCAL_DIST_DIR}/"* "${SERVER_USER}@${SERVER_HOST}:${REMOTE_FRONTEND_DIR}/"
  76. log_info "上传完成"
  77. }
  78. # 配置 Nginx
  79. setup_nginx() {
  80. log_title "配置 Nginx"
  81. local nginx_conf="server {
  82. listen ${FRONTEND_PORT};
  83. server_name _;
  84. root ${REMOTE_FRONTEND_DIR};
  85. index index.html;
  86. # Gzip 压缩
  87. gzip on;
  88. gzip_types text/plain text/css application/json application/javascript text/xml application/xml;
  89. # API 代理到后端
  90. location /api {
  91. proxy_pass ${BACKEND_API};
  92. proxy_set_header Host \$host;
  93. proxy_set_header X-Real-IP \$remote_addr;
  94. proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
  95. proxy_set_header X-Forwarded-Proto \$scheme;
  96. # WebSocket 支持
  97. proxy_http_version 1.1;
  98. proxy_set_header Upgrade \$http_upgrade;
  99. proxy_set_header Connection \"upgrade\";
  100. # 超时设置
  101. proxy_connect_timeout 60s;
  102. proxy_send_timeout 60s;
  103. proxy_read_timeout 60s;
  104. }
  105. # SPA 路由支持
  106. location / {
  107. try_files \$uri \$uri/ /index.html;
  108. }
  109. # 文件上传大小限制
  110. client_max_body_size 100M;
  111. }"
  112. echo "${nginx_conf}" | ssh_cmd "cat > ${REMOTE_NGINX_CONF}"
  113. if ssh_cmd "nginx -t" 2>&1 | grep -q "successful"; then
  114. log_info "Nginx 配置测试通过"
  115. ssh_cmd "systemctl reload nginx"
  116. log_info "Nginx 已重载"
  117. else
  118. log_error "Nginx 配置有误"
  119. ssh_cmd "nginx -t"
  120. fi
  121. }
  122. # 完整部署
  123. full_deploy() {
  124. check_connection
  125. # install_deps # 假设已经安装
  126. build_local
  127. upload_dist
  128. setup_nginx
  129. log_title "前端部署完成 🎉"
  130. }
  131. full_deploy