FROM node:16-alpine AS deps RUN apk add --no-cache libc6-compat WORKDIR /app COPY package.json package-lock.json ./ RUN npm install # Rebuild the source code only when needed FROM node:16-alpine AS builder WORKDIR /app COPY . . COPY --from=deps /app/node_modules ./node_modules RUN rm -f next.config.js COPY ./next.config.local.js ./next.config.js RUN rm -f .env.production && mv .env.local .env.production RUN npm run build # Production image, copy all the files and run next FROM node:16-alpine AS runner RUN apk --update --no-cache --virtual build-dependencies add \ nginx RUN npm install -g pm2 WORKDIR /app ENV NODE_ENV production ENV APP_ENV local ENV NEXT_TELEMETRY_DISABLED 1 COPY --from=builder /app/next.config.js ./ COPY --from=builder /app/public ./public COPY --from=builder /app/pages ./pages COPY --from=builder --chown=nextjs:nodejs /app/.next ./.next COPY --from=builder /app/node_modules ./node_modules COPY --from=builder /app/package.json ./package.json COPY --from=builder /app/ecosystem.config.js ./ecosystem.config.js # RUN cd /app/data/en-gb/products && cp me-888-marathon-ultra.json me-888-marathon-ultra-oth.json COPY docker/nginx.conf /etc/nginx/nginx.conf COPY docker/entrypoint.sh /usr/local/bin/entrypoint RUN chmod +x /usr/local/bin/entrypoint ENTRYPOINT [ "entrypoint" ] CMD ["nginx"] # Create a file app/docker/entrypoint.sh # ------------------------------------------ #!/bin/sh set -e # pm2-docker --max-memory-restart 300M --deep-monitoring start "npm start" & nginx pm2-runtime ecosystem.config.js & nginx ## Create a file in app/ecosystem.config.js module.exports = { apps: [ { name: "app", cwd: "/app", script: "node_modules/next/dist/bin/next", args: "start", max_memory_restart: "900M" } ] };
Preview:
downloadDownload PNG
downloadDownload JPEG
downloadDownload SVG
Tip: You can change the style, width & colours of the snippet with the inspect tool before clicking Download!
Click to optimize width for Twitter