53 lines
1.6 KiB
Docker
53 lines
1.6 KiB
Docker
# 构建阶段 - 使用 Debian slim
|
||
FROM node:20-slim AS builder
|
||
WORKDIR /app
|
||
|
||
# 使用阿里云镜像源
|
||
RUN sed -i 's/deb.debian.org/mirrors.aliyun.com/g' /etc/apt/sources.list.d/debian.sources 2>/dev/null || \
|
||
sed -i 's/deb.debian.org/mirrors.aliyun.com/g' /etc/apt/sources.list
|
||
|
||
# 安装 OpenSSL
|
||
RUN apt-get update && apt-get install -y openssl && rm -rf /var/lib/apt/lists/*
|
||
|
||
# 安装依赖(使用淘宝镜像)
|
||
COPY package*.json ./
|
||
RUN npm config set registry https://registry.npmmirror.com && \
|
||
npm install --legacy-peer-deps
|
||
|
||
# 复制源码
|
||
COPY . .
|
||
RUN mkdir -p public
|
||
|
||
# 构建(会通过 prebuild 自动生成双 Prisma Client)
|
||
RUN npm run build
|
||
|
||
# 生产阶段
|
||
FROM node:20-slim AS runner
|
||
WORKDIR /app
|
||
|
||
# 使用阿里云镜像源
|
||
RUN sed -i 's/deb.debian.org/mirrors.aliyun.com/g' /etc/apt/sources.list.d/debian.sources 2>/dev/null || \
|
||
sed -i 's/deb.debian.org/mirrors.aliyun.com/g' /etc/apt/sources.list
|
||
|
||
# 安装 OpenSSL
|
||
RUN apt-get update && apt-get install -y openssl && rm -rf /var/lib/apt/lists/*
|
||
|
||
ENV NODE_ENV=production
|
||
|
||
# 复制必要文件
|
||
COPY --from=builder /app/next.config.js ./
|
||
COPY --from=builder /app/public ./public
|
||
COPY --from=builder /app/.next/standalone ./
|
||
COPY --from=builder /app/.next/static ./.next/static
|
||
COPY --from=builder /app/prisma ./prisma
|
||
COPY --from=builder /app/scripts ./scripts
|
||
COPY --from=builder /app/package*.json ./
|
||
COPY --from=builder /app/tsconfig.json ./
|
||
COPY --from=builder /app/tsconfig.scripts.json ./
|
||
COPY --from=builder /app/node_modules ./node_modules
|
||
COPY --from=builder /app/node_modules/.prisma ./node_modules/.prisma
|
||
|
||
EXPOSE 3000
|
||
|
||
CMD ["node", "server.js"]
|