first
This commit is contained in:
@@ -0,0 +1,51 @@
|
||||
# 多阶段构建:先在 node 里编译,最终镜像只保留 nginx + dist
|
||||
FROM node:24 AS build
|
||||
|
||||
# 由 magic-docker 传入:--build-arg VERSION=<tag>
|
||||
ARG VERSION=0.0.0
|
||||
WORKDIR /app
|
||||
|
||||
# 构建上下文就是 context 目录
|
||||
COPY . .
|
||||
RUN npm ci
|
||||
RUN npm pkg set version="$VERSION"
|
||||
|
||||
# 有 build-only 脚本就用它(兼容老项目),否则用 build
|
||||
RUN if npm run 2>/dev/null | grep -q "build-only"; then \
|
||||
npm run build-only; \
|
||||
else \
|
||||
npm run build; \
|
||||
fi
|
||||
|
||||
# history 路由回退 + 跨域:context 里有 nginx.conf 就用项目的,否则用内置默认配置
|
||||
RUN set -e; \
|
||||
if [ -f nginx.conf ]; then \
|
||||
cp nginx.conf /app/nginx.conf; \
|
||||
echo "使用项目自带的 nginx.conf"; \
|
||||
else \
|
||||
printf '%s\n' \
|
||||
'server {' \
|
||||
' listen 80;' \
|
||||
' root /usr/share/nginx/html;' \
|
||||
' index index.html;' \
|
||||
'' \
|
||||
' add_header Access-Control-Allow-Origin * always;' \
|
||||
' add_header Access-Control-Allow-Methods "GET, POST, OPTIONS, PUT, DELETE" always;' \
|
||||
' add_header Access-Control-Allow-Headers "*, Origin, X-Requested-With, Content-Type, Accept, Authorization, X-Token" always;' \
|
||||
' add_header Access-Control-Allow-Credentials "true" always;' \
|
||||
'' \
|
||||
' if ($request_method = "OPTIONS") {' \
|
||||
' return 204;' \
|
||||
' }' \
|
||||
'' \
|
||||
' location / {' \
|
||||
' try_files $uri $uri/ /index.html;' \
|
||||
' }' \
|
||||
'}' \
|
||||
> /app/nginx.conf; \
|
||||
echo "使用内置的 nginx.conf"; \
|
||||
fi
|
||||
|
||||
FROM nginx:alpine
|
||||
COPY --from=build /app/dist /usr/share/nginx/html
|
||||
COPY --from=build /app/nginx.conf /etc/nginx/conf.d/default.conf
|
||||
Reference in New Issue
Block a user