36 lines
867 B
Docker
36 lines
867 B
Docker
# 神射手数据中台 - Docker 镜像(NAS/生产)
|
||
# 多阶段:构建 Next.js standalone → 运行
|
||
|
||
FROM node:20-alpine AS builder
|
||
|
||
WORKDIR /app
|
||
|
||
# 依赖:仅复制 package.json,在 Linux 下安装以得到正确的 @next/swc-linux-*(避免 darwin 专用包)
|
||
COPY package.json ./
|
||
RUN npm install
|
||
|
||
COPY . .
|
||
RUN (pnpm run build 2>/dev/null || npm run build)
|
||
|
||
# 运行阶段:仅保留 standalone 输出
|
||
FROM node:20-alpine AS runner
|
||
|
||
WORKDIR /app
|
||
|
||
ENV NODE_ENV=production
|
||
ENV PORT=3117
|
||
EXPOSE 3117
|
||
|
||
# 从构建阶段复制 standalone
|
||
COPY --from=builder /app/.next/standalone ./
|
||
COPY --from=builder /app/.next/static ./.next/static
|
||
COPY --from=builder /app/public ./public
|
||
|
||
# 无 root 运行
|
||
RUN addgroup --system --gid 1001 nodejs && \
|
||
adduser --system --uid 1001 nextjs && \
|
||
chown -R nextjs:nodejs /app
|
||
USER nextjs
|
||
|
||
CMD ["node", "server.js"]
|