diff --git a/Dockerfile b/Dockerfile index d6aace8..a966ea8 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,34 +1,23 @@ -FROM node:20-alpine AS base - # Install dependencies only when needed -FROM base AS deps +FROM node:18-alpine AS deps RUN apk add --no-cache libc6-compat WORKDIR /app - -# Install dependencies based on the preferred package manager -COPY package.json yarn.lock* package-lock.json* pnpm-lock.yaml* ./ -RUN \ - if [ -f yarn.lock ]; then yarn; \ - elif [ -f package-lock.json ]; then npm ci; \ - elif [ -f pnpm-lock.yaml ]; then corepack enable pnpm && pnpm i --frozen-lockfile; \ - else echo "Lockfile not found." && exit 1; \ - fi +COPY package.json yarn.lock ./ +RUN yarn install # Rebuild the source code only when needed -FROM base AS builder +FROM node:18-alpine AS builder + WORKDIR /app + COPY --from=deps /app/node_modules ./node_modules + COPY . . -RUN \ - if [ -f yarn.lock ]; then yarn run build; \ - elif [ -f package-lock.json ]; then npm run build; \ - elif [ -f pnpm-lock.yaml ]; then corepack enable pnpm && pnpm run build; \ - else echo "Lockfile not found." && exit 1; \ - fi +RUN yarn build # Production image, copy all the files and run next -FROM base AS runner +FROM node:18-alpine AS runner WORKDIR /app ENV NODE_ENV production @@ -37,11 +26,7 @@ RUN addgroup --system --gid 1001 kx3dex_radio RUN adduser --system --uid 1001 kx3dex_radio COPY --from=builder /app/public ./public -# COPY --from=builder /app/package.json ./package.json - -# Set the correct permission for prerender cache -RUN mkdir .next -RUN chown kx3dex_radio:kx3dex_radio .next +COPY --from=builder /app/package.json ./package.json # Automatically leverage output traces to reduce image size # https://nextjs.org/docs/advanced-features/output-file-tracing @@ -55,5 +40,5 @@ EXPOSE 3000 ENV PORT 3000 ENV HOSTNAME "0.0.0.0" + CMD ["node", "server.js"] -#CMD HOSTNAME="0.0.0.0" node server.js \ No newline at end of file diff --git a/bu_Dockerfile b/bu_Dockerfile new file mode 100644 index 0000000..d6aace8 --- /dev/null +++ b/bu_Dockerfile @@ -0,0 +1,59 @@ +FROM node:20-alpine AS base + +# Install dependencies only when needed +FROM base AS deps +RUN apk add --no-cache libc6-compat +WORKDIR /app + +# Install dependencies based on the preferred package manager +COPY package.json yarn.lock* package-lock.json* pnpm-lock.yaml* ./ +RUN \ + if [ -f yarn.lock ]; then yarn; \ + elif [ -f package-lock.json ]; then npm ci; \ + elif [ -f pnpm-lock.yaml ]; then corepack enable pnpm && pnpm i --frozen-lockfile; \ + else echo "Lockfile not found." && exit 1; \ + fi + +# Rebuild the source code only when needed +FROM base AS builder +WORKDIR /app +COPY --from=deps /app/node_modules ./node_modules +COPY . . + +RUN \ + if [ -f yarn.lock ]; then yarn run build; \ + elif [ -f package-lock.json ]; then npm run build; \ + elif [ -f pnpm-lock.yaml ]; then corepack enable pnpm && pnpm run build; \ + else echo "Lockfile not found." && exit 1; \ + fi + +# Production image, copy all the files and run next +FROM base AS runner +WORKDIR /app + +ENV NODE_ENV production + +RUN addgroup --system --gid 1001 kx3dex_radio +RUN adduser --system --uid 1001 kx3dex_radio + +COPY --from=builder /app/public ./public +# COPY --from=builder /app/package.json ./package.json + +# Set the correct permission for prerender cache +RUN mkdir .next +RUN chown kx3dex_radio:kx3dex_radio .next + +# Automatically leverage output traces to reduce image size +# https://nextjs.org/docs/advanced-features/output-file-tracing +COPY --from=builder --chown=kx3dex_radio:kx3dex_radio /app/.next/standalone ./ +COPY --from=builder --chown=kx3dex_radio:kx3dex_radio /app/.next/static ./.next/static + +USER kx3dex_radio + +EXPOSE 3000 + +ENV PORT 3000 +ENV HOSTNAME "0.0.0.0" + +CMD ["node", "server.js"] +#CMD HOSTNAME="0.0.0.0" node server.js \ No newline at end of file