diff --git a/.github/workflows/deploy-to-server.yml b/.github/workflows/deploy-to-server.yml
index 264092bd..500ffe3f 100644
--- a/.github/workflows/deploy-to-server.yml
+++ b/.github/workflows/deploy-to-server.yml
@@ -209,22 +209,32 @@ jobs:
exit 0
fi
- # 部署 backend 服务
+ # 部署 backend 服务(Express API,端口 3000)
if [ -f '${{ secrets.DEPLOY_PATH }}/backend/server.js' ]; then
echo '📦 安装 backend 依赖...'
cd '${{ secrets.DEPLOY_PATH }}/backend'
- npm install --production || echo '⚠️ backend npm install 失败'
+ npm install --production 2>/dev/null || echo '⚠️ backend npm install 失败'
echo '🔄 重启 backend 服务...'
pm2 restart guanghulab-backend 2>/dev/null || \
pm2 start server.js --name guanghulab-backend 2>/dev/null || \
echo '⚠️ backend pm2 启动失败'
fi
+ # 部署 status-board WebSocket 服务(端口 8080)
+ if [ -f '${{ secrets.DEPLOY_PATH }}/status-board/mock-ws-server.js' ]; then
+ echo '🔄 重启 WebSocket 服务...'
+ cd '${{ secrets.DEPLOY_PATH }}/status-board'
+ npm install --production 2>/dev/null || true
+ pm2 restart guanghulab-ws 2>/dev/null || \
+ pm2 start mock-ws-server.js --name guanghulab-ws 2>/dev/null || \
+ echo '⚠️ WebSocket pm2 启动失败'
+ fi
+
# 部署 src HLI 中间层
if [ -f '${{ secrets.DEPLOY_PATH }}/src/index.js' ]; then
echo '📦 安装 src 依赖...'
cd '${{ secrets.DEPLOY_PATH }}'
- npm install --production || echo '⚠️ src npm install 失败'
+ npm install --production 2>/dev/null || echo '⚠️ src npm install 失败'
echo '🔄 重启 HLI 服务...'
pm2 restart guanghulab 2>/dev/null || \
pm2 start src/index.js --name guanghulab 2>/dev/null || \
@@ -232,6 +242,10 @@ jobs:
fi
pm2 save || echo '⚠️ pm2 save 失败,重启后进程可能不会自动启动'
+
+ # 设置开机自启(仅首次需要,后续无操作)
+ pm2 startup 2>/dev/null | grep -o 'sudo.*' | bash 2>/dev/null || true
+
echo '✅ 后端服务部署完成'
"
@@ -247,8 +261,9 @@ jobs:
exit 0
fi
+ NGINX_CHANGED=false
+
# 一次性迁移:更新 root 路径(从旧的 status-board 子目录改为站点根目录)
- # 迁移完成后此检查自动无操作
if grep -q 'root.*guanghulab/status-board' /etc/nginx/sites-available/default 2>/dev/null || \
grep -q 'root.*guanghulab/status-board' /etc/nginx/conf.d/*.conf 2>/dev/null; then
echo '🔄 更新 Nginx root 路径...'
@@ -256,11 +271,62 @@ jobs:
/etc/nginx/sites-available/default 2>/dev/null || true
sudo sed -i 's|root.*guanghulab/status-board[^;]*|root ${{ secrets.DEPLOY_PATH }}|g' \
/etc/nginx/conf.d/*.conf 2>/dev/null || true
- sudo nginx -t && sudo systemctl reload nginx
- echo '✅ Nginx 配置已更新'
+ NGINX_CHANGED=true
+ echo '✅ Nginx root 路径已更新'
else
echo '✅ Nginx root 路径正确,无需修改'
fi
+
+ # 配置 API + WebSocket 反向代理
+ if ! grep -rq 'location /api/' /etc/nginx/sites-available/ /etc/nginx/conf.d/ /etc/nginx/snippets/ 2>/dev/null; then
+ echo '🔄 添加 API + WebSocket 反向代理...'
+ sudo mkdir -p /etc/nginx/snippets
+ printf '%s\n' \
+ '# guanghulab 反向代理(由 CD 工作流自动生成)' \
+ '' \
+ '# API 反向代理 → Express 后端端口 3000' \
+ 'location /api/ {' \
+ ' proxy_pass http://127.0.0.1:3000/api/;' \
+ ' proxy_http_version 1.1;' \
+ ' proxy_set_header Host \$host;' \
+ ' proxy_set_header X-Real-IP \$remote_addr;' \
+ ' proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;' \
+ ' proxy_set_header X-Forwarded-Proto \$scheme;' \
+ ' proxy_cache_bypass \$http_upgrade;' \
+ '}' \
+ '' \
+ '# WebSocket 反向代理 → 看板实时推送端口 8080' \
+ 'location /ws {' \
+ ' proxy_pass http://127.0.0.1:8080;' \
+ ' proxy_http_version 1.1;' \
+ ' proxy_set_header Upgrade \$http_upgrade;' \
+ ' proxy_set_header Connection \"Upgrade\";' \
+ ' proxy_set_header Host \$host;' \
+ ' proxy_set_header X-Real-IP \$remote_addr;' \
+ ' proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;' \
+ ' proxy_read_timeout 86400;' \
+ '}' \
+ | sudo tee /etc/nginx/snippets/guanghulab-proxy.conf > /dev/null
+
+ # 在 server 块中加入 include 指令
+ NGINX_MAIN=\$(grep -rl 'server_name' /etc/nginx/sites-available/ /etc/nginx/sites-enabled/ 2>/dev/null | head -1)
+ if [ -z \"\$NGINX_MAIN\" ]; then
+ NGINX_MAIN='/etc/nginx/sites-available/default'
+ fi
+ if [ -f \"\$NGINX_MAIN\" ] && ! grep -q 'guanghulab-proxy' \"\$NGINX_MAIN\" 2>/dev/null; then
+ sudo sed -i '/server_name/a\\ include /etc/nginx/snippets/guanghulab-proxy.conf;' \"\$NGINX_MAIN\" 2>/dev/null && \
+ NGINX_CHANGED=true && echo '✅ 反向代理已自动配置' || \
+ echo '⚠️ 自动配置失败,请手动在 Nginx server 块中加入: include /etc/nginx/snippets/guanghulab-proxy.conf;'
+ fi
+ else
+ echo '✅ API 反向代理已存在,无需修改'
+ fi
+
+ # 如果有变更,验证并重新加载 Nginx
+ if [ \"\$NGINX_CHANGED\" = true ]; then
+ sudo nginx -t && sudo systemctl reload nginx && echo '✅ Nginx 配置已重新加载' || \
+ echo '⚠️ Nginx 配置验证失败,请手动检查'
+ fi
"
- name: 🔍 验证部署
diff --git a/status-board/index.html b/status-board/index.html
index 1aa8113a..34f2201b 100644
--- a/status-board/index.html
+++ b/status-board/index.html
@@ -177,13 +177,7 @@
-
-
-
-
-
-
-
+
@@ -191,23 +185,27 @@
-
+