| 12345678910111213141516171819202122232425262728293031323334 |
- # 前端:Node 22 构建 + Nginx;与 .env.production 中 VITE_API_URL=/prod-api 配套
- # 构建:在仓库根目录执行
- # docker build -f docker/Dockerfile.web -t aidop-web:latest .
- #
- # ★ 优化要点:先拷 package*.json 做 install,再拷源码做 build。
- # 这样只改 .vue/.ts 时 install 层走缓存,构建从 ~4min 降到 ~40s。
- FROM node:22-bookworm-slim AS build
- WORKDIR /web
- # ── 第一步:只拷依赖声明 → install(此层只在依赖变更时失效) ──
- COPY Web/package.json Web/package-lock.json ./
- # 去掉 prepare(git hooks),保留 @vue-office/* 等依赖的 postinstall
- RUN node -e "\
- const fs = require('fs');\
- const p = JSON.parse(fs.readFileSync('package.json', 'utf8'));\
- delete p.scripts.prepare;\
- fs.writeFileSync('package.json', JSON.stringify(p, null, '\t'));\
- "
- RUN npm config set registry https://registry.npmmirror.com && \
- npm install --legacy-peer-deps
- # ── 第二步:拷全部源码 → build(只有这层在改代码时重建) ──
- COPY Web/ .
- RUN npm run build
- # ── 运行阶段 ──
- FROM nginx:1.27-alpine AS final
- COPY docker/nginx/ssl/default.crt /etc/nginx/ssl/default.crt
- COPY docker/nginx/ssl/default.key /etc/nginx/ssl/default.key
- COPY docker/nginx/default.conf /etc/nginx/conf.d/default.conf
- COPY --from=build /web/dist /usr/share/nginx/html
- EXPOSE 80 443
|