a882ae65c5
- FROM 改为 ${BASE_REGISTRY}/<镜像>:<版本>,默认 docker.io/library
内网可传 --build-arg BASE_REGISTRY=<自有仓库>/library 覆盖
- iotlcm-app: 删除 ENV GOPRIVATE=git.xiujie.cn
- iotlcm-app: VITE_MP_SERVER_BASEURL 默认值由内网域名改为 /app/api/v1
- Alpine 基础镜像固定到 3.23(原来未锁版本)
134 lines
4.5 KiB
Docker
134 lines
4.5 KiB
Docker
# Build context: app/
|
|
# Example:
|
|
# docker build -f Dockerfile -t iotlcm-app-web:latest .
|
|
|
|
# 基础镜像仓库。默认使用 Docker Hub 官方镜像;内网环境可替换为自己的仓库:
|
|
# docker build --build-arg BASE_REGISTRY=harbor.example.com/library ...
|
|
ARG BASE_REGISTRY=docker.io/library
|
|
|
|
FROM ${BASE_REGISTRY}/node:24-alpine AS builder
|
|
|
|
WORKDIR /build/app
|
|
|
|
COPY package.json pnpm-lock.yaml .npmrc ./
|
|
|
|
RUN npm config set registry https://registry.npmmirror.com/ && \
|
|
npm install -g pnpm@10.10.0 --registry=https://registry.npmmirror.com/ && \
|
|
pnpm config set registry https://registry.npmmirror.com/ && \
|
|
pnpm install --frozen-lockfile --ignore-scripts
|
|
|
|
COPY index.html vite.config.ts manifest.config.ts pages.config.ts tsconfig.json ./
|
|
COPY uno.config.ts wot-ui-resolver.ts openapi-ts-request.config.ts ./
|
|
COPY folder-alias.json favicon.ico ./
|
|
COPY env ./env
|
|
COPY public ./public
|
|
COPY scripts ./scripts
|
|
COPY src ./src
|
|
COPY vite-plugins ./vite-plugins
|
|
|
|
ARG VITE_SERVER_BASEURL=/app/api/v1
|
|
ARG VITE_MP_SERVER_BASEURL=/app/api/v1
|
|
ARG VITE_APP_PUBLIC_BASE=/app/
|
|
|
|
RUN printf '%s\n' \
|
|
"VITE_SERVER_BASEURL='${VITE_SERVER_BASEURL}'" \
|
|
"VITE_MP_SERVER_BASEURL='${VITE_MP_SERVER_BASEURL}'" \
|
|
"VITE_APP_PUBLIC_BASE='${VITE_APP_PUBLIC_BASE}'" \
|
|
> env/.env.production.local
|
|
|
|
RUN pnpm init-baseFiles
|
|
RUN CI=true pnpm build:h5:prod
|
|
|
|
FROM ${BASE_REGISTRY}/nginx:1.30-alpine AS runtime
|
|
|
|
COPY --from=builder /build/app/dist/build/h5 /usr/share/nginx/html
|
|
|
|
RUN printf '%s\n' \
|
|
'server {' \
|
|
' listen 80;' \
|
|
' server_name _;' \
|
|
' root /usr/share/nginx/html;' \
|
|
' index index.html;' \
|
|
' resolver 127.0.0.11 ipv6=off valid=30s;' \
|
|
' set $app_backend http://iotlcm-app-server:8010;' \
|
|
'' \
|
|
' client_max_body_size 200m;' \
|
|
'' \
|
|
' location = /app {' \
|
|
' return 301 /app/;' \
|
|
' }' \
|
|
'' \
|
|
' location ^~ /app/api/ {' \
|
|
' rewrite ^/app/(.*)$ /$1 break;' \
|
|
' proxy_http_version 1.1;' \
|
|
' 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;' \
|
|
' proxy_pass $app_backend;' \
|
|
' }' \
|
|
'' \
|
|
' location ^~ /app/upload/ {' \
|
|
' rewrite ^/app/(.*)$ /$1 break;' \
|
|
' proxy_http_version 1.1;' \
|
|
' 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;' \
|
|
' proxy_pass $app_backend;' \
|
|
' }' \
|
|
'' \
|
|
' location ^~ /app/assets/ {' \
|
|
' rewrite ^/app/(.*)$ /$1 break;' \
|
|
' expires 30d;' \
|
|
' add_header Cache-Control "public, immutable";' \
|
|
' try_files $uri =404;' \
|
|
' }' \
|
|
'' \
|
|
' location ^~ /app/ {' \
|
|
' rewrite ^/app/(.*)$ /$1 break;' \
|
|
' try_files $uri $uri/ /index.html;' \
|
|
' }' \
|
|
'' \
|
|
' gzip on;' \
|
|
' gzip_types text/plain text/css application/json application/javascript application/xml image/svg+xml;' \
|
|
'' \
|
|
' location / {' \
|
|
' try_files $uri $uri/ /index.html;' \
|
|
' }' \
|
|
'' \
|
|
' location = /favicon.ico {' \
|
|
' alias /usr/share/nginx/html/static/images/shandong-yunze-logo.png;' \
|
|
' add_header Cache-Control "no-cache";' \
|
|
' }' \
|
|
'' \
|
|
' location /api/ {' \
|
|
' proxy_http_version 1.1;' \
|
|
' 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;' \
|
|
' proxy_pass $app_backend;' \
|
|
' }' \
|
|
'' \
|
|
' location /upload/ {' \
|
|
' proxy_http_version 1.1;' \
|
|
' 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;' \
|
|
' proxy_pass $app_backend;' \
|
|
' }' \
|
|
'' \
|
|
' location /assets/ {' \
|
|
' expires 30d;' \
|
|
' add_header Cache-Control "public, immutable";' \
|
|
' try_files $uri =404;' \
|
|
' }' \
|
|
'}' \
|
|
> /etc/nginx/conf.d/default.conf
|
|
|
|
EXPOSE 80
|
|
|
|
CMD ["nginx", "-g", "daemon off;"]
|