Dockerfile.debian 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. # 备选方案 - 使用Debian基础镜像解决bcrypt构建问题
  2. # 多阶段构建 - 构建阶段
  3. FROM node:20-slim AS builder
  4. # 安装构建依赖,包括bcrypt编译所需的工具
  5. RUN apt-get update && apt-get install -y \
  6. python3 \
  7. make \
  8. g++ \
  9. libcairo2-dev \
  10. libpango1.0-dev \
  11. libjpeg-dev \
  12. libgif-dev \
  13. librsvg2-dev \
  14. build-essential \
  15. && rm -rf /var/lib/apt/lists/*
  16. WORKDIR /app
  17. # 复制package文件
  18. COPY package*.json ./
  19. COPY tsconfig*.json ./
  20. # 安装依赖
  21. RUN npm ci --only=production && \
  22. npm cache clean --force
  23. # 复制源代码
  24. COPY src ./src
  25. # 构建应用
  26. RUN npm run build
  27. # 开发阶段
  28. FROM node:20-slim AS development
  29. # 安装运行时依赖和构建工具
  30. RUN apt-get update && apt-get install -y \
  31. python3 \
  32. make \
  33. g++ \
  34. libcairo2-dev \
  35. libpango1.0-dev \
  36. libjpeg-dev \
  37. libgif-dev \
  38. librsvg2-dev \
  39. build-essential \
  40. && rm -rf /var/lib/apt/lists/*
  41. WORKDIR /app
  42. COPY package*.json ./
  43. RUN npm install
  44. COPY . .
  45. EXPOSE 3000 9229
  46. CMD ["npm", "run", "dev"]
  47. # 生产阶段
  48. FROM node:20-slim AS production
  49. # 安装运行时依赖
  50. RUN apt-get update && apt-get install -y \
  51. python3 \
  52. make \
  53. g++ \
  54. libcairo2-dev \
  55. libpango1.0-dev \
  56. libjpeg-dev \
  57. libgif-dev \
  58. librsvg2-dev \
  59. build-essential \
  60. && rm -rf /var/lib/apt/lists/*
  61. WORKDIR /app
  62. # 创建非root用户
  63. RUN groupadd -r nodejs && \
  64. useradd -r -g nodejs -u 1001 nodejs
  65. # 复制依赖
  66. COPY package*.json ./
  67. RUN npm ci --only=production && \
  68. npm cache clean --force
  69. # 从构建阶段复制构建产物
  70. COPY --from=builder --chown=nodejs:nodejs /app/dist ./dist
  71. COPY --from=builder --chown=nodejs:nodejs /app/node_modules ./node_modules
  72. # 切换到非root用户
  73. USER nodejs
  74. # 暴露端口
  75. EXPOSE 3000
  76. # 健康检查
  77. HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
  78. CMD node dist/utils/healthcheck.js || exit 1
  79. # 启动应用
  80. CMD ["node", "dist/server.js"]