feat(ci): deploy-test.yml 增加 Vue3 管理后台构建和部署
deploy-test / build-and-deploy-test (push) Successful in 3m44s

- 新增 Vite 构建管理后台步骤 (node:20-alpine)
- nginx 配置增加 /admin/ 静态文件 + /admin/api/ 反代
- 健康检查同时验证后端 API、前端 SDK、管理后台
- 部署概要包含管理后台入口
This commit is contained in:
abcv7
2026-08-27 10:11:36 +08:00
parent a537958550
commit b7599f6ea0
+49 -5
View File
@@ -66,6 +66,18 @@ jobs:
echo "=== 构建产物 ===" echo "=== 构建产物 ==="
ls -la "$GITHUB_WORKSPACE/tac-dist/tac/js/" "$GITHUB_WORKSPACE/tac-dist/tac/css/" 2>/dev/null 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 - name: Build & push image
run: | run: |
set -e set -e
@@ -97,6 +109,11 @@ jobs:
# 上传前端 SDK 构建产物 # 上传前端 SDK 构建产物
scp -i $HOME/.ssh/id_ed25519_deploy -r "$GITHUB_WORKSPACE/tac-dist/tac"/* \ scp -i $HOME/.ssh/id_ed25519_deploy -r "$GITHUB_WORKSPACE/tac-dist/tac"/* \
root@${{ secrets.CAPTCHA_TEST_HOST }}:/opt/tianai/web/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 配置 # 上传 nginx 配置
cat > /tmp/captcha-nginx.conf <<'NGINX_EOF' cat > /tmp/captcha-nginx.conf <<'NGINX_EOF'
server { server {
@@ -106,10 +123,14 @@ jobs:
gzip_static on; gzip_static on;
gzip_types text/plain text/css application/json application/javascript text/xml image/svg+xml; gzip_types text/plain text/css application/json application/javascript text/xml image/svg+xml;
gzip_min_length 256; gzip_min_length 256;
location / {
# 后端 SDK 静态文件
location /tac/ {
root /usr/share/nginx/html; root /usr/share/nginx/html;
try_files $uri $uri/ =404; try_files $uri $uri/ =404;
} }
# 后端 API 反代 (前端 SDK 调用)
location ^~ /tac/api/ { location ^~ /tac/api/ {
proxy_pass http://tianai-captcha:18200/api/; proxy_pass http://tianai-captcha:18200/api/;
proxy_set_header Host $http_host; 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-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme; 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 NGINX_EOF
scp -i $HOME/.ssh/id_ed25519_deploy /tmp/captcha-nginx.conf \ scp -i $HOME/.ssh/id_ed25519_deploy /tmp/captcha-nginx.conf \
@@ -154,7 +190,7 @@ jobs:
exit 1 exit 1
fi fi
echo "后端 API 健康检查 OK (code=$CODE)" 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) 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 if [ "$HTTP_CODE" = "200" ]; then
echo "前端 SDK 部署 OK (http_code=$HTTP_CODE)" echo "前端 SDK 部署 OK (http_code=$HTTP_CODE)"
@@ -162,12 +198,20 @@ jobs:
echo "前端 SDK 部署异常 (http_code=$HTTP_CODE)" echo "前端 SDK 部署异常 (http_code=$HTTP_CODE)"
exit 1 exit 1
fi 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 - name: Deployment summary
if: always() if: always()
run: | run: |
echo "commit: $GITHUB_SHA" echo "commit: $GITHUB_SHA"
echo "后端 API: test 机 127.0.0.1:18200 (mw 网络: tianai-captcha:18200)" echo "后端 API: http://<test-ip>:8080/tac/api/... (proxy → tianai-captcha:18200)"
echo "前端 SDK: test 机 0.0.0.0:8080 (mw 网络: tianai-web:80)" echo "前端 SDK: http://<test-ip>:8080/tac/js/tac.min.js"
echo "SDK 路径: http://<test-ip>:8080/tac/js/tac.min.js" echo "管理后台: http://<test-ip>:8080/admin/"
echo "晋升生产: Gitea → 仓库 → Actions → promote-prod → 输入 yes" echo "晋升生产: Gitea → 仓库 → Actions → promote-prod → 输入 yes"