From 11e535b2152a8c61fff81db36b10b58e98c3341f Mon Sep 17 00:00:00 2001 From: clkj <919284064@qq.com> Date: Wed, 17 Jun 2026 12:50:22 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20Dockerfile?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Dockerfile | 38 ++++++++++++++------------------------ 1 file changed, 14 insertions(+), 24 deletions(-) diff --git a/Dockerfile b/Dockerfile index 62563a9..8d828a5 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,40 +1,30 @@ -FROM node:22-alpine AS base +FROM node:22-alpine +# 补齐Prisma必需系统依赖 RUN apk add --no-cache openssl WORKDIR /app -# 阶段1:全量安装依赖(含prisma CLI、wasm、迁移工具) -FROM base AS deps +# 拷贝依赖、prisma迁移脚本 COPY package*.json ./ COPY prisma ./prisma + +# 完整安装所有依赖(含prisma CLI、wasm二进制) RUN npm ci -# 构建阶段提前生成客户端、wasm文件 +# 预生成Prisma Client RUN npx prisma generate -# 阶段2:打包Next standalone -FROM base AS builder -COPY --from=deps /app/node_modules ./node_modules +# 拷贝全部源码并构建Next COPY . . RUN npm run build -# 阶段3:纯运行镜像,只拷贝运行必需文件,舍弃完整prisma CLI -FROM base AS runner -WORKDIR /app -ENV NODE_ENV=production - +# 创建运行用户 RUN addgroup --system --gid 1001 nodejs && adduser --system --uid 1001 nextjs -# Next standalone 运行文件 -COPY --from=builder /app/.next/standalone ./ -COPY --from=builder /app/.next/static ./.next/static -COPY --from=builder /app/public ./public - -COPY --from=builder /app/prisma ./prisma -COPY --from=builder /app/node_modules/.prisma ./node_modules/.prisma -COPY --from=builder /app/node_modules/@prisma/client ./node_modules/@prisma/client - -RUN mkdir -p /app/data && chown -R nextjs:nodejs /app /app/data +# 数据目录并授权 +RUN mkdir -p /app/data && chown -R nextjs:nodejs /app USER nextjs +ENV NODE_ENV=production EXPOSE 3000 -# 运行时不再执行 npx prisma,直接启动服务 -CMD ["node", "server.js"] \ No newline at end of file + +# 启动前自动执行生产迁移,再启动服务 +CMD ["sh", "-c", "npx prisma migrate deploy && node server.js"] \ No newline at end of file