# 宁夏智慧养殖监管平台 - 后端服务容器 # 基于Node.js 18 Alpine镜像构建 FROM node:18-alpine # 设置工作目录 WORKDIR /app # 安装系统依赖 RUN apk add --no-cache \ # 用于数据库备份的MySQL客户端 mysql-client \ # 用于PDF生成的Chrome依赖 chromium \ nss \ freetype \ freetype-dev \ harfbuzz \ ca-certificates \ ttf-freefont \ # 用于文件压缩的工具 zip \ unzip \ # 开发工具 git \ && rm -rf /var/cache/apk/* # 设置Puppeteer使用系统安装的Chromium ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true \ PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium-browser # 复制package.json和package-lock.json COPY package*.json ./ # 安装Node.js依赖 RUN npm ci --only=production && npm cache clean --force # 复制应用代码 COPY . . # 创建必要的目录 RUN mkdir -p logs backups uploads temp # 设置文件权限 RUN chown -R node:node /app # 切换到非root用户 USER node # 暴露端口 EXPOSE 5350 # 健康检查 HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \ CMD node -e "const http = require('http'); \ const options = { host: 'localhost', port: 5350, path: '/api/health', timeout: 5000 }; \ const req = http.request(options, (res) => { \ if (res.statusCode === 200) process.exit(0); \ else process.exit(1); \ }); \ req.on('error', () => process.exit(1)); \ req.end();" # 设置环境变量 ENV NODE_ENV=production \ PORT=5350 \ TZ=Asia/Shanghai # 启动命令 CMD ["node", "server.js"] # 元数据标签 LABEL maintainer="宁夏智慧养殖监管平台 " \ version="2.1.0" \ description="宁夏智慧养殖监管平台后端API服务" \ application="nxxm-farming-platform" \ tier="backend"