From bd2d5b03c3c0e1cebe90b48918c81fd77b88baee Mon Sep 17 00:00:00 2001 From: wangzhibiao Date: Mon, 14 Sep 2026 12:53:54 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8C=81=E7=BB=AD=E9=9B=86=E6=88=90=EF=BC=9A?= =?UTF-8?q?=E5=86=85=E7=BD=AE=E9=83=A8=E7=BD=B2=E9=87=8D=E5=90=AF=E8=84=9A?= =?UTF-8?q?=E6=9C=AC=E4=B8=8ENginx=E9=85=8D=E7=BD=AE=E6=A8=A1=E6=9D=BF?= =?UTF-8?q?=EF=BC=8C=E5=AE=9E=E7=8E=B0=E7=8B=AC=E7=AB=8B=E7=AB=AF=E5=8F=A3?= =?UTF-8?q?=E9=83=A8=E7=BD=B2=E4=B8=8E=E6=95=B0=E6=8D=AE=E5=BA=93=E6=B3=A8?= =?UTF-8?q?=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitlab-ci.yml | 3 +- deploy/nginx.conf.example | 36 +++++++++++++++++++ deploy/restart-all.sh | 73 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 111 insertions(+), 1 deletion(-) create mode 100644 deploy/nginx.conf.example create mode 100644 deploy/restart-all.sh diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 4508e7421..e2f15338b 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -65,5 +65,6 @@ deploy_production: - cp -r build_ui/dist/* /data2/wzb/deploy/frontend/ # 部署后端 Jar 包并执行平滑重启 - cp RuoYi-Vue/ruoyi-admin/target/ruoyi-admin.jar /data2/wzb/deploy/backend/ - - bash /data2/wzb/deploy/restart-all.sh + - chmod +x deploy/restart-all.sh + - bash deploy/restart-all.sh - echo "=== 部署与自检成功完成! ===" diff --git a/deploy/nginx.conf.example b/deploy/nginx.conf.example new file mode 100644 index 000000000..ed47d1105 --- /dev/null +++ b/deploy/nginx.conf.example @@ -0,0 +1,36 @@ +# ============================================================================== +# 铁路培训实训教学平台 - Nginx 配置参考模板 +# 适用于 sict 服务器 (/data2/wzb/deploy) +# ============================================================================== + +server { + listen 8082; # 业务对外访问端口,可按需修改 + server_name localhost; + + # 1. 前端静态页面托管 + location / { + root /data2/wzb/deploy/frontend; + try_files $uri $uri/ /index.html; + index index.html index.htm; + } + + # 2. 后端 API 反向代理 (指向 RuoYi-Vue 后端 8092 端口) + location /prod-api/ { + proxy_set_header Host $http_host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header REMOTE-HOST $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_pass http://127.0.0.1:8092/; + } + + # 3. 避免静态资源缓存问题 + location ~* \.(html)$ { + root /data2/wzb/deploy/frontend; + add_header Cache-Control "no-cache, no-store, must-revalidate"; + } + + error_page 500 502 503 504 /50x.html; + location = /50x.html { + root html; + } +} diff --git a/deploy/restart-all.sh b/deploy/restart-all.sh new file mode 100644 index 000000000..848ddf0be --- /dev/null +++ b/deploy/restart-all.sh @@ -0,0 +1,73 @@ +#!/bin/bash +# ============================================================================== +# 铁路培训实训教学平台 - 全自动平滑部署与自检脚本 +# 路径规范:/data2/wzb/deploy +# ============================================================================== + +DEPLOY_ROOT="/data2/wzb/deploy" +BACKEND_DIR="$DEPLOY_ROOT/backend" +FRONTEND_DIR="$DEPLOY_ROOT/frontend" +LOG_DIR="$DEPLOY_ROOT/logs" +PID_FILE="$BACKEND_DIR/app.pid" +JAR_PATH="$BACKEND_DIR/ruoyi-admin.jar" +LOG_PATH="$LOG_DIR/backend.log" +JAVA_BIN="/data2/wzb/tools/jdk8/bin/java" + +# 服务运行端口与数据库参数 +SERVER_PORT=8092 +DB_URL="jdbc:kingbase8://192.168.139.218:4321/training?currentSchema=public,sys_catalog&useUnicode=true&characterEncoding=utf8" + +mkdir -p "$BACKEND_DIR" "$FRONTEND_DIR" "$LOG_DIR" + +echo "=== 1. 检查并停止当前用户的旧后端进程 ===" +TARGET_PID="" +if [ -f "$PID_FILE" ]; then + SAVED_PID=$(cat "$PID_FILE") + if kill -0 "$SAVED_PID" 2>/dev/null; then + TARGET_PID="$SAVED_PID" + fi +fi + +if [ -z "$TARGET_PID" ]; then + TARGET_PID=$(pgrep -u $(whoami) -f "$JAR_PATH" | head -n 1) +fi + +if [ -n "$TARGET_PID" ]; then + echo "正在停止旧进程 PID: $TARGET_PID ..." + kill -15 $TARGET_PID 2>/dev/null + sleep 3 + if kill -0 $TARGET_PID 2>/dev/null; then + echo "强制终止 PID: $TARGET_PID" + kill -9 $TARGET_PID 2>/dev/null + fi +fi +rm -f "$PID_FILE" + +echo "=== 2. 启动新的后端服务(端口: $SERVER_PORT) ===" +if [ ! -f "$JAR_PATH" ]; then + echo "错误:未找到 $JAR_PATH" + exit 1 +fi + +nohup $JAVA_BIN -Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m \ + -Dfile.encoding=UTF-8 \ + -jar "$JAR_PATH" \ + --server.port=$SERVER_PORT \ + --spring.datasource.druid.master.url="$DB_URL" > "$LOG_PATH" 2>&1 & + +NEW_PID=$! +echo $NEW_PID > "$PID_FILE" +echo "后端已在后台启动,PID: $NEW_PID" +echo "实时日志: $LOG_PATH" + +echo "等待服务启动与健康自检..." +for i in {1..35}; do + RES=$(curl -s "http://127.0.0.1:${SERVER_PORT}/captchaImage" 2>/dev/null) + if echo "$RES" | grep -q '"code":200'; then + echo "后端健康检查通过!验证码接口返回正常!服务已在端口 $SERVER_PORT 成功运行!" + exit 0 + fi + sleep 2 +done + +echo "后端启动中或未在预期时间内完成自检,请检查日志: tail -n 50 $LOG_PATH"