draupnir4all-web

git clone git://archive.git.mtrnord.blog/MTRNord/draupnir4all-web.git
Log | Files | Refs | README | LICENSE

Dockerfile (1877B)


      1 # syntax=docker.io/docker/dockerfile:1
      2 
      3 FROM node:23-alpine AS base
      4 
      5 # Install dependencies only when needed
      6 FROM base AS deps
      7 # Check https://github.com/nodejs/docker-node/tree/b4117f9333da4138b03a546ec926ef50a31506c3#nodealpine to understand why libc6-compat might be needed.
      8 RUN apk add --no-cache libc6-compat
      9 WORKDIR /app
     10 
     11 # Install dependencies based on the preferred package manager
     12 COPY package.json yarn.lock* package-lock.json* pnpm-lock.yaml* .npmrc* ./
     13 RUN \
     14   if [ -f yarn.lock ]; then yarn --frozen-lockfile; \
     15   elif [ -f package-lock.json ]; then npm ci; \
     16   elif [ -f pnpm-lock.yaml ]; then corepack enable pnpm && pnpm i --frozen-lockfile; \
     17   else echo "Lockfile not found." && exit 1; \
     18   fi
     19 
     20 
     21 # Rebuild the source code only when needed
     22 FROM base AS builder
     23 WORKDIR /app
     24 COPY --from=deps /app/node_modules ./node_modules
     25 COPY . .
     26 
     27 ENV NEXT_TELEMETRY_DISABLED=1
     28 
     29 RUN \
     30   if [ -f yarn.lock ]; then yarn run build; \
     31   elif [ -f package-lock.json ]; then npm run build; \
     32   elif [ -f pnpm-lock.yaml ]; then corepack enable pnpm && pnpm run build; \
     33   else echo "Lockfile not found." && exit 1; \
     34   fi
     35 
     36 # Production image, copy all the files and run next
     37 FROM base AS runner
     38 WORKDIR /app
     39 
     40 ENV NODE_ENV=production
     41 ENV NEXT_TELEMETRY_DISABLED=1
     42 
     43 RUN addgroup --system --gid 1001 nodejs
     44 RUN adduser --system --uid 1001 nextjs
     45 
     46 COPY --from=builder /app/public ./public
     47 
     48 # Automatically leverage output traces to reduce image size
     49 # https://nextjs.org/docs/advanced-features/output-file-tracing
     50 COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./
     51 COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static
     52 
     53 USER nextjs
     54 
     55 EXPOSE 3000
     56 
     57 ENV PORT=3000
     58 
     59 # server.js is created by next build from the standalone output
     60 # https://nextjs.org/docs/pages/api-reference/config/next-config-js/output
     61 ENV HOSTNAME="0.0.0.0"
     62 CMD ["node", "server.js"]