Dockerfile.prod 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. # 前端生产环境 Dockerfile
  2. # 多阶段构建,减小镜像大小
  3. # 构建阶段
  4. FROM node:18-alpine AS builder
  5. # 设置工作目录
  6. WORKDIR /app
  7. # 复制 package 文件
  8. COPY package*.json ./
  9. # 安装依赖
  10. RUN npm ci --only=production
  11. # 复制源代码
  12. COPY . .
  13. # 构建参数
  14. ARG REACT_APP_WS_URL=ws://localhost:8765
  15. ARG REACT_APP_ENV=production
  16. # 设置环境变量
  17. ENV REACT_APP_WS_URL=$REACT_APP_WS_URL
  18. ENV REACT_APP_ENV=$REACT_APP_ENV
  19. ENV NODE_ENV=production
  20. # 构建应用
  21. RUN npm run build
  22. # 生产阶段
  23. FROM nginx:alpine
  24. # 安装额外工具
  25. RUN apk add --no-cache curl
  26. # 删除默认配置
  27. RUN rm /etc/nginx/conf.d/default.conf
  28. # 复制构建结果
  29. COPY --from=builder /app/build /usr/share/nginx/html
  30. # 复制 Nginx 配置
  31. COPY nginx.default.conf /etc/nginx/conf.d/default.conf
  32. # 创建非 root 用户
  33. RUN addgroup -g 1001 -S nginx-user && \
  34. adduser -S nginx-user -G nginx-user
  35. # 设置权限
  36. RUN chown -R nginx-user:nginx-user /usr/share/nginx/html && \
  37. chown -R nginx-user:nginx-user /var/cache/nginx && \
  38. chown -R nginx-user:nginx-user /var/log/nginx && \
  39. chown -R nginx-user:nginx-user /etc/nginx/conf.d && \
  40. touch /var/run/nginx.pid && \
  41. chown -R nginx-user:nginx-user /var/run/nginx.pid
  42. # 切换用户
  43. USER nginx-user
  44. # 暴露端口
  45. EXPOSE 8080
  46. # 健康检查
  47. HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
  48. CMD curl -f http://localhost:8080/ || exit 1
  49. # 启动 Nginx
  50. CMD ["nginx", "-g", "daemon off;"]