Files
iotlcm/app/Dockerfile
T
MiFaZhan a882ae65c5 fix: Dockerfile 基础镜像改为公共仓库,移除私有仓库依赖
- 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(原来未锁版本)
2026-10-29 13:33:24 +08:00

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;"]