# Use official Node.js image as base FROM node:20-alpine as builder WORKDIR /app COPY package.json package-lock.json ./ RUN npm install --force COPY . . # Install git and get commit hash RUN apk add --no-cache git && \ if [ -d .git ]; then \ git rev-parse --short HEAD > /app/git_commit_sha; \ else \ echo "unknown" > /app/git_commit_sha; \ fi ENV NEXT_PUBLIC_API_URL=/api # Build the Next.js application # The environment variable will be available during build if needed # ENV GIT_COMMIT_SHA=$(cat /app/git_commit_sha) RUN echo "Building with GIT_COMMIT_SHA=$(cat /app/git_commit_sha)" && npm run build # ---- Production Stage ---- FROM node:20-alpine # Set working directory inside the container WORKDIR /app RUN mkdir -p /app/public # Copy only necessary files from builder COPY --from=builder /app/package.json /app/package-lock.json ./ COPY --from=builder /app/.next ./.next COPY --from=builder /app/node_modules ./node_modules COPY --from=builder /app/public ./public COPY --from=builder /app/next.config.mjs ./next.config.mjs # Copy commit hash file from builder stage COPY --from=builder /app/git_commit_sha /app/git_commit_sha RUN cat /app/git_commit_sha EXPOSE 3000 ENV NODE_ENV=production ENV NEXT_PUBLIC_API_URL=/api ENV SERVER_API_URL=https://internal-api.inboxi.ng # Set GIT_COMMIT_SHA environment variable in the final image by reading the file ENV GIT_COMMIT_SHA="$(cat /app/git_commit_sha)" # Start Next.js server CMD ["npm", "start"]