| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- # 前端生产环境 Dockerfile
- # 多阶段构建,减小镜像大小
- # 构建阶段
- FROM node:18-alpine AS builder
- # 设置工作目录
- WORKDIR /app
- # 复制 package 文件
- COPY package*.json ./
- # 安装依赖
- RUN npm ci --only=production
- # 复制源代码
- COPY . .
- # 构建参数
- ARG REACT_APP_WS_URL=ws://localhost:8765
- ARG REACT_APP_ENV=production
- # 设置环境变量
- ENV REACT_APP_WS_URL=$REACT_APP_WS_URL
- ENV REACT_APP_ENV=$REACT_APP_ENV
- ENV NODE_ENV=production
- # 构建应用
- RUN npm run build
- # 生产阶段
- FROM nginx:alpine
- # 安装额外工具
- RUN apk add --no-cache curl
- # 删除默认配置
- RUN rm /etc/nginx/conf.d/default.conf
- # 复制构建结果
- COPY --from=builder /app/build /usr/share/nginx/html
- # 复制 Nginx 配置
- COPY nginx.default.conf /etc/nginx/conf.d/default.conf
- # 创建非 root 用户
- RUN addgroup -g 1001 -S nginx-user && \
- adduser -S nginx-user -G nginx-user
- # 设置权限
- RUN chown -R nginx-user:nginx-user /usr/share/nginx/html && \
- chown -R nginx-user:nginx-user /var/cache/nginx && \
- chown -R nginx-user:nginx-user /var/log/nginx && \
- chown -R nginx-user:nginx-user /etc/nginx/conf.d && \
- touch /var/run/nginx.pid && \
- chown -R nginx-user:nginx-user /var/run/nginx.pid
- # 切换用户
- USER nginx-user
- # 暴露端口
- EXPOSE 8080
- # 健康检查
- HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
- CMD curl -f http://localhost:8080/ || exit 1
- # 启动 Nginx
- CMD ["nginx", "-g", "daemon off;"]
|