63 lines
1.6 KiB
Docker
63 lines
1.6 KiB
Docker
FROM node:20.18.3-alpine AS builder
|
|
|
|
WORKDIR /app
|
|
|
|
COPY package.json ./
|
|
|
|
RUN npm config set registry https://registry.npmmirror.com \
|
|
&& npm install
|
|
|
|
COPY . .
|
|
|
|
RUN npm run build \
|
|
&& test -f /app/dist/build/h5/index.html
|
|
|
|
FROM nginx:1.29-alpine
|
|
|
|
# 清除 Nginx 自带欢迎页,只保留本次构建的 H5 静态文件。
|
|
RUN rm -rf /usr/share/nginx/html/*
|
|
|
|
COPY --from=builder /app/dist/build/h5/ /usr/share/nginx/html/
|
|
|
|
# 直接生成与原 static.json 核心规则等价的 Nginx 配置:
|
|
# 1. 监听线上服务使用的 5000 端口。
|
|
# 2. 支持外层代理保留或剥离 /h5 前缀。
|
|
# 3. 未匹配的页面路由统一回退到 index.html。
|
|
# 4. index.html 禁用缓存,避免发布后继续读取旧页面。
|
|
RUN test -f /usr/share/nginx/html/index.html \
|
|
&& printf '%s\n' \
|
|
'server {' \
|
|
' listen 5000;' \
|
|
' listen [::]:5000;' \
|
|
' server_name _;' \
|
|
'' \
|
|
' root /usr/share/nginx/html;' \
|
|
' index index.html;' \
|
|
'' \
|
|
' location = /h5 {' \
|
|
' return 301 /h5/;' \
|
|
' }' \
|
|
'' \
|
|
' location = /h5/ {' \
|
|
' rewrite ^ /index.html last;' \
|
|
' }' \
|
|
'' \
|
|
' location /h5/ {' \
|
|
' rewrite ^/h5/(.*)$ /$1 last;' \
|
|
' }' \
|
|
'' \
|
|
' location / {' \
|
|
' try_files $uri $uri/ /index.html;' \
|
|
' }' \
|
|
'' \
|
|
' location = /index.html {' \
|
|
' add_header Cache-Control "no-store, no-cache" always;' \
|
|
' try_files $uri =404;' \
|
|
' }' \
|
|
'}' \
|
|
> /etc/nginx/conf.d/default.conf
|
|
|
|
EXPOSE 5000
|
|
|
|
CMD ["nginx", "-g", "daemon off;"]
|