mirror of
https://github.com/MHSanaei/3x-ui.git
synced 2025-07-03 21:42:09 +00:00
57 lines
2.1 KiB
Docker
57 lines
2.1 KiB
Docker
# Stage 1: Build the Next.js application
|
|
FROM node:20-alpine AS builder
|
|
|
|
# Set working directory
|
|
WORKDIR /app
|
|
|
|
# Install dependencies
|
|
# Copy package.json and yarn.lock (or package-lock.json if using npm)
|
|
COPY package.json yarn.lock ./
|
|
# Ensure corepack is enabled to use yarn specified in package.json
|
|
RUN corepack enable
|
|
RUN yarn install --frozen-lockfile --network-timeout 600000
|
|
|
|
# Copy the rest of the application source code
|
|
COPY . .
|
|
|
|
# Build the Next.js application
|
|
# NEXT_PUBLIC_API_BASE_URL can be set here if it's fixed,
|
|
# or passed as an ARG during docker build, or as an ENV var at runtime.
|
|
# For flexibility, runtime ENV var is often preferred.
|
|
# ARG NEXT_PUBLIC_API_BASE_URL
|
|
# ENV NEXT_PUBLIC_API_BASE_URL=${NEXT_PUBLIC_API_BASE_URL}
|
|
RUN yarn build
|
|
|
|
# Stage 2: Production environment
|
|
FROM node:20-alpine AS runner
|
|
|
|
WORKDIR /app
|
|
|
|
# Set environment variables
|
|
# ENV NODE_ENV=production # Already set by `next start`
|
|
# NEXT_PUBLIC_API_BASE_URL will be set at runtime via docker-compose or run command
|
|
# ENV PORT=3000 # Next.js default port is 3000, can be overridden
|
|
|
|
# Copy built assets from the builder stage
|
|
# This includes the .next folder (production build) and public folder.
|
|
# For a standard Next.js build (not standalone or static export),
|
|
# we also need node_modules and package.json to run `next start`.
|
|
COPY --from=builder /app/.next ./.next
|
|
COPY --from=builder /app/public ./public
|
|
COPY --from=builder /app/package.json ./package.json
|
|
# If yarn.lock is needed for `yarn start` with specific versions, copy it too.
|
|
# Usually for `yarn start` just package.json and production node_modules are needed.
|
|
# For yarn, yarn.lock is good practice to ensure consistent prod dependencies if any are direct.
|
|
COPY --from=builder /app/yarn.lock ./
|
|
|
|
# Install production dependencies only
|
|
# Ensure corepack is enabled
|
|
RUN corepack enable
|
|
RUN yarn install --production --frozen-lockfile --network-timeout 600000
|
|
|
|
# Expose port 3000 (default for Next.js)
|
|
EXPOSE 3000
|
|
|
|
# The "start" script in package.json runs "next start"
|
|
# This will serve the application from the .next folder.
|
|
CMD ["yarn", "start"]
|