Commit 4b646342 by jianan

deploy: 新增 Docker/nginx 部署配置(测试环境 center.zuihuibi.cn)

parent 9cd2bb16
.git
.gitignore
.idea
.vscode
node_modules
dist
.env
.env.*
!.env.example
*.log
tmpclaude-*
Dockerfile
.dockerignore
Jenkinsfile
deploy
# 复制为 .env 供本地开发使用;真实 .env 不入库。
# 这三个变量在「构建期」固化进产物,测试/生产由流水线 --build-arg 分别注入。
# IdP(Casdoor)地址
VITE_OIDC_AUTHORITY=https://<测试IdP域名>
# 在 IdP 为本站登记的应用 clientId
VITE_OIDC_CLIENT_ID=<测试应用-clientId>
VITE_OIDC_SCOPE=openid profile phone
# 说明:
# redirect_uri / post_logout_redirect_uri 由代码按当前域名自动拼出,无需配置。
# 上线 https://center.zuihuibi.cn 前,需在 IdP 应用里登记:
# 允许的回调:https://center.zuihuibi.cn/auth/callback
# 登出回跳: https://center.zuihuibi.cn/logged-out
# 构建静态文件
FROM node:20-alpine AS build
WORKDIR /app
# OIDC 配置在构建期固化(Vite 只认 VITE_* 变量),由流水线 --build-arg 注入
ARG VITE_OIDC_AUTHORITY
ARG VITE_OIDC_CLIENT_ID
ARG VITE_OIDC_SCOPE
ENV VITE_OIDC_AUTHORITY=$VITE_OIDC_AUTHORITY \
VITE_OIDC_CLIENT_ID=$VITE_OIDC_CLIENT_ID \
VITE_OIDC_SCOPE=$VITE_OIDC_SCOPE
COPY package.json package-lock.json ./
RUN npm ci
COPY . .
RUN npm run build
# 纯静态托管:只做 SPA 回退;接口反代由测试环境统一 nginx 负责,本容器不感知后端
FROM nginx:alpine
COPY --from=build /app/dist /usr/share/nginx/html
COPY nginx.conf /etc/nginx/conf.d/default.conf
# 贴到 Jenkins 自由风格 job 的「Execute shell」框(仿照现有 yd-csf-front job)。
# 源码管理:Git = http://139.224.139.2:9091/jianan/yd-csf-h5.git,分支 */test
cd /var/jenkins_home/workspace/yd-csf-h5
# 对外端口(容器内 nginx 是 80)。先 `docker ps` 核对 6689 没被占用,被占就换
H5_PORT=6689
# OIDC 在构建期固化。测试若复用现有 Casdoor 这两个值可不动,
# 只需在 Casdoor 应用里把 https://center.zuihuibi.cn/auth/callback 加进回调白名单;
# 若测试单独建应用,改成测试的 authority / clientId。
OIDC_AUTHORITY=https://auth.anjibao.cn
OIDC_CLIENT_ID=6db48077896a73e99c4a
# 清理旧容器和镜像
docker stop yd-csf-h5 || true
docker rm yd-csf-h5 || true
docker rmi yd-csf-h5 || true
# 构建新镜像
docker build \
--build-arg VITE_OIDC_AUTHORITY="$OIDC_AUTHORITY" \
--build-arg VITE_OIDC_CLIENT_ID="$OIDC_CLIENT_ID" \
-t yd-csf-h5 -f Dockerfile .
# 运行新容器
docker run -d -p "$H5_PORT":80 --name yd-csf-h5 --restart unless-stopped yd-csf-h5:latest
# 加到测试环境「统一 nginx」的配置目录后,nginx -t 测试再 reload。
# 含 HTTP→HTTPS 跳转、接口与静态两条转发。
server {
listen 443 ssl;
server_name center.zuihuibi.cn;
ssl_certificate /etc/nginx/ssl/center.zuihuibi.cn.pem; # 改成实际证书路径
ssl_certificate_key /etc/nginx/ssl/center.zuihuibi.cn.key;
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;
# 接口 → CSF 核心服务。proxy_pass 只写到端口,/csf/api 前缀原样透传,不 rewrite
location /csf/api/ {
proxy_pass http://127.0.0.1:9002;
}
# 其余全部 → H5 容器(Jenkins 构建时映射的端口,见 deploy/jenkins-execute-shell.sh)
location / {
proxy_pass http://127.0.0.1:6689;
}
}
server {
listen 80;
server_name center.zuihuibi.cn;
return 301 https://$host$request_uri;
}
server {
listen 80;
root /usr/share/nginx/html;
# 前端路由:找不到文件就回退到 index.html(刷新 /pipeline、/auth/callback 等不再 404)
location / {
try_files $uri /index.html;
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment