From b7599f6ea08dbb1d15c826d3b1034cd1a70189fa Mon Sep 17 00:00:00 2001 From: abcv7 Date: Thu, 27 Aug 2026 10:11:36 +0800 Subject: [PATCH] =?UTF-8?q?feat(ci):=20deploy-test.yml=20=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=20Vue3=20=E7=AE=A1=E7=90=86=E5=90=8E=E5=8F=B0?= =?UTF-8?q?=E6=9E=84=E5=BB=BA=E5=92=8C=E9=83=A8=E7=BD=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 Vite 构建管理后台步骤 (node:20-alpine) - nginx 配置增加 /admin/ 静态文件 + /admin/api/ 反代 - 健康检查同时验证后端 API、前端 SDK、管理后台 - 部署概要包含管理后台入口 --- .gitea/workflows/deploy-test.yml | 54 +++++++++++++++++++++++++++++--- 1 file changed, 49 insertions(+), 5 deletions(-) diff --git a/.gitea/workflows/deploy-test.yml b/.gitea/workflows/deploy-test.yml index fec6123..2decff7 100644 --- a/.gitea/workflows/deploy-test.yml +++ b/.gitea/workflows/deploy-test.yml @@ -66,6 +66,18 @@ jobs: echo "=== 构建产物 ===" ls -la "$GITHUB_WORKSPACE/tac-dist/tac/js/" "$GITHUB_WORKSPACE/tac-dist/tac/css/" 2>/dev/null + - name: Build admin dashboard (Vue3 + Vite) + run: | + set -e + docker rm -f adminbuild 2>/dev/null || true + docker run -d --name adminbuild -w /ws node:20-alpine sleep infinity + docker cp "$GITHUB_WORKSPACE/tianai-captcha-platform-ui/." adminbuild:/ws/ + docker exec adminbuild sh -c "npm install --prefer-offline && npm run build" + docker cp adminbuild:/ws/dist "$GITHUB_WORKSPACE/admin-dist" + docker rm -f adminbuild + echo "=== 管理后台构建产物 ===" + ls -la "$GITHUB_WORKSPACE/admin-dist/" 2>/dev/null + - name: Build & push image run: | set -e @@ -97,6 +109,11 @@ jobs: # 上传前端 SDK 构建产物 scp -i $HOME/.ssh/id_ed25519_deploy -r "$GITHUB_WORKSPACE/tac-dist/tac"/* \ root@${{ secrets.CAPTCHA_TEST_HOST }}:/opt/tianai/web/tac/ + # 上传管理后台构建产物 + mkdir -p /tmp/admin-dist + cp -r "$GITHUB_WORKSPACE/admin-dist/"* /tmp/admin-dist/ + scp -i $HOME/.ssh/id_ed25519_deploy -r /tmp/admin-dist/* \ + root@${{ secrets.CAPTCHA_TEST_HOST }}:/opt/tianai/web/admin/ # 上传 nginx 配置 cat > /tmp/captcha-nginx.conf <<'NGINX_EOF' server { @@ -106,10 +123,14 @@ jobs: gzip_static on; gzip_types text/plain text/css application/json application/javascript text/xml image/svg+xml; gzip_min_length 256; - location / { + + # 后端 SDK 静态文件 + location /tac/ { root /usr/share/nginx/html; try_files $uri $uri/ =404; } + + # 后端 API 反代 (前端 SDK 调用) location ^~ /tac/api/ { proxy_pass http://tianai-captcha:18200/api/; proxy_set_header Host $http_host; @@ -117,6 +138,21 @@ jobs: proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } + + # 管理后台 (Vue3 SPA) + location /admin/ { + alias /usr/share/nginx/html/admin/; + try_files $uri $uri/ /admin/index.html; + } + + # 管理后台 API 反代 + location ^~ /admin/api/ { + proxy_pass http://tianai-captcha:18200/api/; + proxy_set_header Host $http_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; + } } NGINX_EOF scp -i $HOME/.ssh/id_ed25519_deploy /tmp/captcha-nginx.conf \ @@ -154,7 +190,7 @@ jobs: exit 1 fi echo "后端 API 健康检查 OK (code=$CODE)" - # 检查前端 nginx + # 检查前端 SDK HTTP_CODE=$($SSH_CMD "curl -s -o /dev/null -w '%{http_code}' http://127.0.0.1:8080/tac/js/tac.min.js" 2>/dev/null || echo 000) if [ "$HTTP_CODE" = "200" ]; then echo "前端 SDK 部署 OK (http_code=$HTTP_CODE)" @@ -162,12 +198,20 @@ jobs: echo "前端 SDK 部署异常 (http_code=$HTTP_CODE)" exit 1 fi + # 检查管理后台 + ADMIN_CODE=$($SSH_CMD "curl -s -o /dev/null -w '%{http_code}' http://127.0.0.1:8080/admin/" 2>/dev/null || echo 000) + if [ "$ADMIN_CODE" = "200" ]; then + echo "管理后台部署 OK (http_code=$ADMIN_CODE)" + else + echo "管理后台部署异常 (http_code=$ADMIN_CODE)" + exit 1 + fi - name: Deployment summary if: always() run: | echo "commit: $GITHUB_SHA" - echo "后端 API: test 机 127.0.0.1:18200 (mw 网络: tianai-captcha:18200)" - echo "前端 SDK: test 机 0.0.0.0:8080 (mw 网络: tianai-web:80)" - echo "SDK 路径: http://:8080/tac/js/tac.min.js" + echo "后端 API: http://:8080/tac/api/... (proxy → tianai-captcha:18200)" + echo "前端 SDK: http://:8080/tac/js/tac.min.js" + echo "管理后台: http://:8080/admin/" echo "晋升生产: Gitea → 仓库 → Actions → promote-prod → 输入 yes"