31 lines
1012 B
Docker
31 lines
1012 B
Docker
# Use a lightweight Node.js 20 Alpine image (digest-pinned for reproducibility)
|
|
FROM node:20-alpine@sha256:9bef0ef1e268f60627da9ba7d7605e8831d5b56ad07487d24d1aa386336d1944
|
|
|
|
# Accept a build argument for the working directory
|
|
ARG WORKDIR_PATH
|
|
|
|
ENV NODE_ENV=production
|
|
|
|
# Set the working directory inside the container
|
|
WORKDIR /app
|
|
|
|
# Copy only the production-ready files built in CI
|
|
# These files must be passed as GitLab artifacts:
|
|
# - .next/ → built Next.js app
|
|
# - public/ → static assets
|
|
# - package.json → app manifest
|
|
# - package-lock.json → to lock dependencies for reproducibility
|
|
COPY ${WORKDIR_PATH}/.next .next
|
|
COPY ${WORKDIR_PATH}/public public
|
|
COPY ${WORKDIR_PATH}/package.json package.json
|
|
COPY ${WORKDIR_PATH}/package-lock.json package-lock.json
|
|
|
|
# Install only production dependencies to reduce image size
|
|
RUN npm ci --omit=dev
|
|
|
|
# Expose the port that Next.js serves on (default is 3000)
|
|
EXPOSE 3000
|
|
|
|
# Start the Next.js app in production mode
|
|
CMD ["npm", "run", "start"]
|