Files
performance-evaluation-system/backend/Dockerfile
2026-04-11 13:24:41 +08:00

53 lines
1.3 KiB
Docker
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 构建阶段
FROM node:20-alpine AS builder
# 设置工作目录
WORKDIR /app
# 复制package.json和package-lock.json
COPY package*.json ./
# 安装依赖包括devDependencies因为需要typescript等构建工具
RUN npm ci --only=production --ignore-scripts && \
npm ci --only=development --ignore-scripts
# 复制源代码
COPY . .
# 构建TypeScript
RUN npm run build
# 运行时阶段
FROM node:20-alpine AS runtime
# 设置工作目录
WORKDIR /app
# 创建非root用户
RUN addgroup -g 1001 -S nodejs && \
adduser -S nodejs -u 1001 -G nodejs
# 复制package.json
COPY --from=builder --chown=nodejs:nodejs /app/package*.json ./
# 安装仅生产依赖
RUN npm ci --only=production --ignore-scripts
# 复制构建产物
COPY --from=builder --chown=nodejs:nodejs /app/dist ./dist
# 复制可能需要的其他文件(如数据库初始化脚本)
COPY --from=builder --chown=nodejs:nodejs /app/src/db ./src/db
# 切换用户
USER nodejs
# 暴露端口默认3001可通过环境变量覆盖
EXPOSE 3001
# 健康检查
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
CMD node -e "require('http').get('http://localhost:3001/health', (r) => {if(r.statusCode===200)process.exit(0);process.exit(1)}).on('error',()=>process.exit(1))"
# 启动命令
CMD ["npm", "start"]