Nhảy tới nội dung

Triển khai Next.js

Dockerfile

Trường hợp dùng pnpm

# Project base
#------------------------------------------------
FROM node:20-alpine AS base
WORKDIR /app

ENV PNPM_HOME="/pnpm"
ENV PATH="$PNPM_HOME:$PATH"
RUN corepack enable
#------------------------------------------------


# Project installer
#------------------------------------------------
FROM base as installer
WORKDIR /app
COPY package.json .
COPY pnpm-lock.yaml .

RUN --mount=type=cache,id=pnpm,target=/pnpm/store pnpm install --frozen-lockfile
#------------------------------------------------


# Project builder
#------------------------------------------------
FROM base as builder
WORKDIR /app
COPY . .
COPY --from=installer /app/node_modules ./node_modules

RUN pnpm build
#------------------------------------------------


# Project Runner
#------------------------------------------------
FROM base as runner
WORKDIR /app
COPY . .
COPY --from=installer /app/node_modules ./node_modules
COPY --from=builder /app/.next ./.next

CMD ["pnpm start"]
#------------------------------------------------

EXPOSE 3000

Trường hợp dùng yarn

# Base image
#------------------------------------------------
FROM node:20-alpine AS base
WORKDIR /app
#------------------------------------------------


# Project installer
#------------------------------------------------
FROM base as installer
WORKDIR /app
COPY package.json ./
COPY yarn.lock ./

RUN yarn install --frozen-lockfile
#------------------------------------------------


# Project builder
#------------------------------------------------
FROM base as builder
WORKDIR /app
COPY . .
COPY --from=installer /app/node_modules ./node_modules
COPY .env .env

RUN yarn build
#------------------------------------------------


# Project runner
#------------------------------------------------
FROM base as runner
WORKDIR /app
COPY . .
COPY --from=installer /app/node_modules ./node_modules
COPY --from=builder /app/.next ./.next

CMD ["/bin/sh", "-c", "yarn start:prod"]
#------------------------------------------------

EXPOSE 3000