1- # Build stage
21FROM node:18-alpine AS builder
32
3+ # Define build arguments
4+ ARG NEXT_PUBLIC_API_URL
5+ ARG NEXT_PUBLIC_POCKETBASE_URL
6+ ARG NEXT_PUBLIC_SEARCH_URL
7+ ARG NEXT_PUBLIC_MEILI_URL
8+
49WORKDIR /app
510
11+ # Set environment variables for build time
12+ ENV NEXT_PUBLIC_API_URL=${NEXT_PUBLIC_API_URL}
13+ ENV NEXT_PUBLIC_POCKETBASE_URL=${NEXT_PUBLIC_POCKETBASE_URL}
14+ ENV NEXT_PUBLIC_SEARCH_URL=${NEXT_PUBLIC_SEARCH_URL}
15+ ENV NEXT_PUBLIC_MEILI_URL=${NEXT_PUBLIC_MEILI_URL}
16+
617# Install dependencies
718COPY package.json package-lock.json ./
819RUN npm ci
@@ -11,26 +22,43 @@ RUN npm ci
1122COPY . .
1223
1324# Build the application
14- ENV NEXT_TELEMETRY_DISABLED 1
1525RUN npm run build
1626
17- # Production stage
27+ # Production image
1828FROM node:18-alpine AS runner
19-
2029WORKDIR /app
2130
22- ENV NODE_ENV=production
23- ENV NEXT_TELEMETRY_DISABLED 1
31+ ENV NODE_ENV production
32+
33+ # Pass build arguments to runtime environment variables
34+ ARG NEXT_PUBLIC_API_URL
35+ ARG NEXT_PUBLIC_POCKETBASE_URL
36+ ARG NEXT_PUBLIC_SEARCH_URL
37+ ARG NEXT_PUBLIC_MEILI_URL
2438
25- # Copy necessary files from builder
39+ ENV NEXT_PUBLIC_API_URL=${NEXT_PUBLIC_API_URL}
40+ ENV NEXT_PUBLIC_POCKETBASE_URL=${NEXT_PUBLIC_POCKETBASE_URL}
41+ ENV NEXT_PUBLIC_SEARCH_URL=${NEXT_PUBLIC_SEARCH_URL}
42+ ENV NEXT_PUBLIC_MEILI_URL=${NEXT_PUBLIC_MEILI_URL}
43+
44+ # Add non-root user for security
45+ RUN addgroup --system --gid 1001 nodejs
46+ RUN adduser --system --uid 1001 nextjs
47+
48+ # Copy only necessary files from builder stage
2649COPY --from=builder /app/next.config.ts ./
27- COPY --from=builder /app/package.json ./
2850COPY --from=builder /app/public ./public
29- COPY --from=builder /app/.next/standalone ./
30- COPY --from=builder /app/.next/static ./.next/static
51+ COPY --from=builder /app/package.json ./package.json
52+
53+ # Copy the built application
54+ COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./
55+ COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static
56+
57+ # Set the correct permissions
58+ USER nextjs
3159
32- # Expose the port
60+ # Expose the port the app runs on
3361EXPOSE 3000
3462
35- # Start the application
36- CMD ["node", "server.js"]
63+ # Command to run the application in production mode
64+ CMD ["node", "server.js"]
0 commit comments