阳菜,放晴! | 7e1e3a5 | 2025-06-05 23:00:51 +0800 | [diff] [blame^] | 1 | # 使用官方 Node 镜像作为构建阶段的基础镜像 |
| 2 | FROM node:18-alpine AS builder |
| 3 | |
| 4 | # 设置工作目录 |
| 5 | WORKDIR /app |
| 6 | |
| 7 | # 复制依赖相关的文件 |
| 8 | COPY package.json package-lock.json* ./ |
| 9 | |
| 10 | # 安装依赖 (使用 ci 而不是 install 以获得确定性构建) |
| 11 | RUN npm ci |
| 12 | |
| 13 | # 复制项目文件 |
| 14 | COPY . . |
| 15 | |
| 16 | # 构建项目 (假设你使用 vite 或类似工具) |
| 17 | RUN npm run build |
| 18 | |
| 19 | # 使用 Node 基础镜像作为运行时 |
| 20 | FROM node:18-alpine |
| 21 | |
| 22 | # 安装轻量级 HTTP 服务器 |
| 23 | RUN npm install -g serve |
| 24 | |
| 25 | # 设置工作目录 |
| 26 | WORKDIR /app |
| 27 | |
| 28 | # 从构建阶段复制构建好的前端文件 |
| 29 | COPY --from=builder /app/dist ./dist |
| 30 | |
| 31 | # 健康检查 (使用 wget 检查服务可用性) |
| 32 | HEALTHCHECK --interval=30s --timeout=3s \ |
| 33 | CMD wget --no-verbose --tries=1 --spider http://localhost:8080 || exit 1 |
| 34 | |
| 35 | # 暴露 8080 端口 |
| 36 | EXPOSE 8080 |
| 37 | |
| 38 | # 启动 HTTP 服务器 (托管 dist 目录) |
| 39 | CMD ["serve", "-s", "dist", "-l", "tcp://0.0.0.0:8080"] |