对接
This commit is contained in:
Vendored
+26
-1
@@ -35,6 +35,7 @@ pipeline {
|
||||
REGISTRY_NAMESPACE = 'live'
|
||||
BACKEND_IMAGE = "${REGISTRY_HOST}/${REGISTRY_NAMESPACE}/backend"
|
||||
FRONTEND_IMAGE = "${REGISTRY_HOST}/${REGISTRY_NAMESPACE}/frontend"
|
||||
LIVEWEB_IMAGE = "${REGISTRY_HOST}/${REGISTRY_NAMESPACE}/live-web"
|
||||
DEPLOY_HOST = 'root@192.168.2.226'
|
||||
BIN_NAME = 'kratos-admin'
|
||||
APP_BASE = 'live' // 前端 vite base 与 nginx 服务名前缀
|
||||
@@ -67,6 +68,7 @@ pipeline {
|
||||
echo "Deploy mode: ${params.DEPLOY_MODE}"
|
||||
echo "Backend : ${env.BACKEND_IMAGE}:${env.DEPLOY_IMAGE_TAG}"
|
||||
echo "Frontend: ${env.FRONTEND_IMAGE}:${env.DEPLOY_IMAGE_TAG}"
|
||||
echo "LiveWeb : ${env.LIVEWEB_IMAGE}:${env.DEPLOY_IMAGE_TAG}"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -103,6 +105,23 @@ pipeline {
|
||||
}
|
||||
}
|
||||
|
||||
stage('Build Live Web') {
|
||||
when {
|
||||
expression { params.DEPLOY_MODE == 'BUILD_AND_DEPLOY' }
|
||||
}
|
||||
steps {
|
||||
// PC 直播用户端与后端同仓维护,确保当前提交中的接口与页面一起发布。
|
||||
// HTTP/WS 均请求同源 /api,由站点 nginx 去前缀转发到后端。
|
||||
sh '''
|
||||
docker run --rm \
|
||||
-v "$PWD/frontend:/app" -w /app \
|
||||
-e npm_config_registry=https://registry.npmmirror.com \
|
||||
docker.m.daocloud.io/node:20-slim \
|
||||
bash -lc "npm ci --no-audit --no-fund && npm run build"
|
||||
'''
|
||||
}
|
||||
}
|
||||
|
||||
stage('Build Images') {
|
||||
when {
|
||||
expression { params.DEPLOY_MODE == 'BUILD_AND_DEPLOY' }
|
||||
@@ -119,6 +138,10 @@ pipeline {
|
||||
--tag ${FRONTEND_IMAGE}:${DEPLOY_IMAGE_TAG} \
|
||||
--tag ${FRONTEND_IMAGE}:latest \
|
||||
web
|
||||
docker build \
|
||||
--tag ${LIVEWEB_IMAGE}:${DEPLOY_IMAGE_TAG} \
|
||||
--tag ${LIVEWEB_IMAGE}:latest \
|
||||
frontend
|
||||
'''
|
||||
}
|
||||
}
|
||||
@@ -135,6 +158,8 @@ pipeline {
|
||||
docker push ${BACKEND_IMAGE}:latest
|
||||
docker push ${FRONTEND_IMAGE}:${DEPLOY_IMAGE_TAG}
|
||||
docker push ${FRONTEND_IMAGE}:latest
|
||||
docker push ${LIVEWEB_IMAGE}:${DEPLOY_IMAGE_TAG}
|
||||
docker push ${LIVEWEB_IMAGE}:latest
|
||||
docker logout "${REGISTRY_HOST}"
|
||||
'''
|
||||
}
|
||||
@@ -154,7 +179,7 @@ pipeline {
|
||||
|
||||
post {
|
||||
success {
|
||||
echo "Deployed ${BACKEND_IMAGE}:${DEPLOY_IMAGE_TAG} / ${FRONTEND_IMAGE}:${DEPLOY_IMAGE_TAG}"
|
||||
echo "Deployed ${BACKEND_IMAGE}:${DEPLOY_IMAGE_TAG} / ${FRONTEND_IMAGE}:${DEPLOY_IMAGE_TAG} / ${LIVEWEB_IMAGE}:${DEPLOY_IMAGE_TAG}"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
# live.fuhua91.com 宝塔站点配置
|
||||
# live.fuhua91.com 宝塔站点配置(与 2026-09-21 服务器生效版本一致)
|
||||
# 路径规划:
|
||||
# / -> live 用户端前端(静态目录,或替换为反代)
|
||||
# /admin/ -> 管理后台(frontend 容器 9501,nginx 去前缀转发)
|
||||
# /api -> 后端 API/WebSocket(backend 容器 9502)
|
||||
# / -> live 用户端前端(PC 直播页,live-web 容器 9503)
|
||||
# /admin/ -> 管理后台(frontend 容器 9501,rewrite 去前缀转发)
|
||||
# /api -> 后端 API/WebSocket(backend 容器 9502,rewrite 去前缀转发)
|
||||
# 注意: 本文件顶部的 map 位于 http 上下文(宝塔 include 位置),合法。
|
||||
|
||||
map $http_upgrade $live_connection_upgrade {
|
||||
@@ -63,8 +63,9 @@ server
|
||||
return 404;
|
||||
}
|
||||
|
||||
# 后端 API / WebSocket(容器内后端无 /api 前缀,proxy_pass 尾斜杠自动去掉)
|
||||
location ^~ /api {
|
||||
# 后端 API / WebSocket(rewrite 去掉 /api 前缀,后端路由无 /api)
|
||||
location ^~ /api/ {
|
||||
rewrite ^/api/(.*)$ /$1 break;
|
||||
proxy_pass http://127.0.0.1:9502;
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
@@ -76,6 +77,14 @@ server
|
||||
proxy_read_timeout 600s;
|
||||
proxy_send_timeout 600s;
|
||||
}
|
||||
location = /api {
|
||||
proxy_pass http://127.0.0.1:9502/;
|
||||
proxy_http_version 1.1;
|
||||
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;
|
||||
}
|
||||
|
||||
# 管理后台(frontend 容器;rewrite 去掉 /admin 前缀,前端已按 /admin/ base 构建)
|
||||
location = /admin {
|
||||
@@ -91,17 +100,19 @@ server
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
}
|
||||
|
||||
# live 用户端前端(根路径)
|
||||
# 方式一: 静态文件放 /www/wwwroot/live.fuhua91.com/live-web 后使用当前配置
|
||||
# 方式二: 若 live 前端也是 docker 容器,把下面两行换成:
|
||||
# proxy_pass http://127.0.0.1:<live前端端口>;
|
||||
# proxy_set_header Host $http_host; 以及上面 /admin/ 块中的其余 proxy_set_header
|
||||
# live 用户端前端(PC 直播页,live-web 容器,主域名根路径)
|
||||
location / {
|
||||
root /www/wwwroot/live.fuhua91.com/live-web;
|
||||
try_files $uri $uri/ /index.html;
|
||||
proxy_pass http://127.0.0.1:9503;
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection $live_connection_upgrade;
|
||||
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;
|
||||
}
|
||||
|
||||
#禁止在证书验证目录放入敏感文件
|
||||
# 禁止在证书验证目录放入敏感文件
|
||||
if ( $uri ~ "^/\.well-known/.*\.(php|jsp|py|js|css|lua|ts|go|zip|tar\.gz|rar|7z|sql|bak)$" ) {
|
||||
return 403;
|
||||
}
|
||||
|
||||
+29
-11
@@ -14,25 +14,27 @@ set -euo pipefail
|
||||
# ---------- 可按需调整的参数 ----------
|
||||
REGISTRY="harbor.fuhua91.com"
|
||||
PROJECT="live"
|
||||
# Harbor 机器人账号(也可通过环境变量 HARBOR_USER / HARBOR_PASSWORD 覆盖)
|
||||
# Harbor 机器人账号(密码只通过 HARBOR_PASSWORD 环境变量提供)
|
||||
HARBOR_USER_DEFAULT='robot$live+live'
|
||||
HARBOR_PASSWORD_DEFAULT='R4p6ieacIogXE779eL1HXhCpA4bx4SA7'
|
||||
|
||||
BASE_DIR="/www/wwwroot/live.fuhua91.com"
|
||||
CONFIG_DIR="$BASE_DIR/config" # 后端配置目录 -> 容器内 /data/conf
|
||||
LOG_DIR="$BASE_DIR/log" # 后端日志目录 -> 容器内 /app/logs
|
||||
UPLOADS_DIR="$BASE_DIR/uploads" # 上传文件目录 -> 容器内 /app/uploads
|
||||
|
||||
FRONTEND_PORT=9501 # 前端 nginx 容器
|
||||
FRONTEND_PORT=9501 # admin 管理后台 nginx 容器
|
||||
BACKEND_PORT=9502 # 后端 API/WebSocket 容器
|
||||
LIVEWEB_PORT=9503 # live 用户端(PC 直播页) nginx 容器
|
||||
NETWORK="live-net"
|
||||
BACKEND_NAME="live-backend"
|
||||
FRONTEND_NAME="live-frontend"
|
||||
LIVEWEB_NAME="live-web"
|
||||
# --------------------------------------
|
||||
|
||||
TAG="${1:-latest}"
|
||||
BACKEND_IMAGE="$REGISTRY/$PROJECT/backend:$TAG"
|
||||
FRONTEND_IMAGE="$REGISTRY/$PROJECT/frontend:$TAG"
|
||||
LIVEWEB_IMAGE="$REGISTRY/$PROJECT/live-web:$TAG"
|
||||
|
||||
echo "==> 部署版本: $TAG"
|
||||
|
||||
@@ -47,21 +49,27 @@ if [ ! -f "$CONFIG_DIR/config.yaml" ]; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 3. 登录 Harbor(优先使用环境变量 HARBOR_USER / HARBOR_PASSWORD)
|
||||
# 3. 登录 Harbor;未传密码时复用服务器现有的 Docker 登录态
|
||||
HARBOR_USER="${HARBOR_USER:-$HARBOR_USER_DEFAULT}"
|
||||
HARBOR_PASSWORD="${HARBOR_PASSWORD:-$HARBOR_PASSWORD_DEFAULT}"
|
||||
echo "==> 登录 $REGISTRY"
|
||||
echo "$HARBOR_PASSWORD" | docker login "$REGISTRY" --username "$HARBOR_USER" --password-stdin >/dev/null
|
||||
HARBOR_LOGGED_IN=false
|
||||
if [ -n "${HARBOR_PASSWORD:-}" ]; then
|
||||
echo "==> 登录 $REGISTRY"
|
||||
echo "$HARBOR_PASSWORD" | docker login "$REGISTRY" --username "$HARBOR_USER" --password-stdin >/dev/null
|
||||
HARBOR_LOGGED_IN=true
|
||||
else
|
||||
echo "==> 未提供 HARBOR_PASSWORD,复用服务器现有 Docker 登录态"
|
||||
fi
|
||||
|
||||
# 4. 拉取最新镜像
|
||||
echo "==> 拉取镜像"
|
||||
docker pull "$BACKEND_IMAGE"
|
||||
docker pull "$FRONTEND_IMAGE"
|
||||
docker pull "$LIVEWEB_IMAGE"
|
||||
|
||||
# 5. 重建容器
|
||||
echo "==> 重启容器"
|
||||
docker network create "$NETWORK" >/dev/null 2>&1 || true
|
||||
docker rm -f "$BACKEND_NAME" "$FRONTEND_NAME" 2>/dev/null || true
|
||||
docker rm -f "$BACKEND_NAME" "$FRONTEND_NAME" "$LIVEWEB_NAME" 2>/dev/null || true
|
||||
|
||||
# 容器内进程以 uid 1000 (kra) 运行,日志/上传目录需要写权限
|
||||
chown -R 1000:1000 "$LOG_DIR" "$UPLOADS_DIR" 2>/dev/null || \
|
||||
@@ -84,11 +92,21 @@ docker run -d --name "$FRONTEND_NAME" \
|
||||
-p "$FRONTEND_PORT:80" \
|
||||
"$FRONTEND_IMAGE"
|
||||
|
||||
docker logout "$REGISTRY" >/dev/null 2>&1 || true
|
||||
# live 用户端(PC 直播页): nginx 静态站点,主域名 / 反代到该容器
|
||||
docker run -d --name "$LIVEWEB_NAME" \
|
||||
--restart always \
|
||||
--network "$NETWORK" \
|
||||
-p "$LIVEWEB_PORT:80" \
|
||||
"$LIVEWEB_IMAGE"
|
||||
|
||||
if [ "$HARBOR_LOGGED_IN" = true ]; then
|
||||
docker logout "$REGISTRY" >/dev/null 2>&1 || true
|
||||
fi
|
||||
|
||||
echo "==> 部署完成"
|
||||
docker ps --filter "name=$BACKEND_NAME" --filter "name=$FRONTEND_NAME"
|
||||
docker ps --filter "name=$BACKEND_NAME" --filter "name=$FRONTEND_NAME" --filter "name=$LIVEWEB_NAME"
|
||||
echo ""
|
||||
echo "前端容器: http://<服务器IP>:$FRONTEND_PORT"
|
||||
echo "admin 前端容器: http://<服务器IP>:$FRONTEND_PORT"
|
||||
echo "后端容器: http://<服务器IP>:$BACKEND_PORT"
|
||||
echo "live 前端容器: http://<服务器IP>:$LIVEWEB_PORT"
|
||||
echo "提示: 网站正常访问走宝塔 nginx 反代(80/443),9501/9502 为直连调试端口,记得放行防火墙。"
|
||||
|
||||
Reference in New Issue
Block a user