# # Install dependencies only when needed
# FROM node:alpine AS deps
# # Check https://github.com/nodejs/docker-node/tree/b4117f9333da4138b03a546ec926ef50a31506c3#nodealpine to understand why libc6-compat might be needed.
# RUN apk add --no-cache libc6-compat
# WORKDIR /app
# COPY package.json yarn.lock ./
# RUN yarn install --frozen-lockfile

# # Rebuild the source code only when needed
# FROM node:alpine AS builder
# WORKDIR /app
# COPY . .
# COPY --from=deps /app/node_modules ./node_modules
# RUN yarn build && yarn install --production --ignore-scripts --prefer-offline

# # Production image, copy all the files and run next
# FROM node:alpine AS runner
# WORKDIR /app

# ENV NODE_ENV production

# RUN addgroup -g 1001 -S nodejs
# RUN adduser -S nextjs -u 1001

# # You only need to copy next.config.js if you are NOT using the default configuration
# # COPY --from=builder /app/next.config.js ./
# COPY --from=builder /app/public ./public
# COPY --from=builder --chown=nextjs:nodejs /app/.next ./.next
# COPY --from=builder /app/node_modules ./node_modules
# COPY --from=builder /app/package.json ./package.json

# USER nextjs

# EXPOSE 3000

# ENV PORT 3000

# # Next.js collects completely anonymous telemetry data about general usage.
# # Learn more here: https://nextjs.org/telemetry
# # Uncomment the following line in case you want to disable telemetry.
# # ENV NEXT_TELEMETRY_DISABLED 1

# CMD ["node_modules/.bin/next", "start"]

# Stage 1: Dependencies
FROM node:alpine AS deps
WORKDIR /app

# 安装 libc6-compat(如果需要的话)
RUN apk add --no-cache libc6-compat

# 配置 yarn 使用淘宝镜像
RUN yarn config set registry https://registry.npm.taobao.org

# 复制 package.json、yarn.lock 和 .yarnrc(如果你创建了的话)
COPY package.json yarn.lock .yarnrc* ./

# 安装依赖
RUN yarn install --frozen-lockfile --network-timeout 600000 --network-concurrency 1


# Stage 2: Builder
FROM node:alpine AS builder
WORKDIR /app

# Copy all files
COPY . .

# Copy node_modules from deps stage
COPY --from=deps /app/node_modules ./node_modules

# Build the app
RUN yarn build

# Stage 3: Runner
FROM node:alpine AS runner
WORKDIR /app

ENV NODE_ENV production

# Create a non-root user
RUN addgroup --system --gid 1001 nodejs
RUN adduser --system --uid 1001 nextjs

# Copy necessary files from builder stage
COPY --from=builder /app/public ./public
COPY --from=builder --chown=nextjs:nodejs /app/.next ./.next
COPY --from=builder /app/node_modules ./node_modules
COPY --from=builder /app/package.json ./package.json

# Set user to non-root
USER nextjs

# Expose the port the app will run on
EXPOSE 3000

ENV PORT 3000

# Disable Next.js telemetry if desired
# ENV NEXT_TELEMETRY_DISABLED 1

# Start the application
CMD ["yarn", "start"]