Files
cozsweet-frontend-nextjs/Dockerfile
T

98 lines
3.8 KiB
Docker

FROM node:22-alpine AS base
WORKDIR /app
ENV NEXT_TELEMETRY_DISABLED=1
ENV PNPM_HOME=/pnpm
ENV PATH=$PNPM_HOME:$PATH
RUN apk add --no-cache libc6-compat \
&& corepack enable \
&& corepack prepare pnpm@10.30.3 --activate
FROM base AS deps
COPY package.json pnpm-lock.yaml pnpm-workspace.yaml ./
RUN pnpm install --frozen-lockfile
FROM base AS builder
ARG NEXT_ENV_FILE=.env.local
ENV CI=true
ENV SENTRY_UPLOAD_SOURCEMAPS=0
COPY --from=deps /app/node_modules ./node_modules
COPY . .
RUN --mount=type=secret,id=next_env,target=/tmp/next_env,required=false \
if [ -f /tmp/next_env ]; then cp /tmp/next_env "$NEXT_ENV_FILE"; fi; \
pnpm run build; \
rm -f .env .env.local .env.development .env.production
FROM node:22-alpine AS runner
WORKDIR /app
ENV NODE_ENV=production
ENV NEXT_TELEMETRY_DISABLED=1
ENV HOSTNAME=0.0.0.0
ENV PORT=3000
RUN addgroup --system --gid 1001 nodejs \
&& adduser --system --uid 1001 nextjs
COPY --from=builder /app/public ./public
COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./
COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static
RUN set -eux; \
esbuild_pkg="$(find node_modules/.pnpm -path '*/node_modules/esbuild/package.json' -print -quit)"; \
esbuild_binary_pkg="$(find node_modules/.pnpm -path '*/node_modules/@esbuild/linux-*/package.json' -print -quit)"; \
idb_pkg="$(find node_modules/.pnpm -path '*/node_modules/idb/package.json' -print -quit)"; \
serwist_pkg="$(find node_modules/.pnpm -path '*/node_modules/serwist/package.json' -print -quit)"; \
serwist_turbopack_pkg="$(find node_modules/.pnpm -path '*/node_modules/@serwist/turbopack/package.json' -print -quit)"; \
serwist_utils_pkg="$(find node_modules/.pnpm -path '*/node_modules/@serwist/utils/package.json' -print -quit)"; \
if [ -n "$esbuild_pkg" ] && [ -n "$esbuild_binary_pkg" ]; then \
esbuild_pkg="${esbuild_pkg%/package.json}"; \
esbuild_binary_pkg="${esbuild_binary_pkg%/package.json}"; \
esbuild_binary_name="$(basename "$esbuild_binary_pkg")"; \
rm -rf node_modules/esbuild; \
ln -s "/app/$esbuild_pkg" node_modules/esbuild; \
mkdir -p node_modules/@esbuild "$esbuild_pkg/node_modules/@esbuild"; \
rm -rf "node_modules/@esbuild/$esbuild_binary_name" "$esbuild_pkg/node_modules/@esbuild/$esbuild_binary_name"; \
ln -s "/app/$esbuild_binary_pkg" "node_modules/@esbuild/$esbuild_binary_name"; \
ln -s "/app/$esbuild_binary_pkg" "$esbuild_pkg/node_modules/@esbuild/$esbuild_binary_name"; \
fi; \
if [ -n "$serwist_pkg" ]; then \
serwist_pkg="${serwist_pkg%/package.json}"; \
rm -rf node_modules/serwist; \
ln -s "/app/$serwist_pkg" node_modules/serwist; \
fi; \
if [ -n "$idb_pkg" ]; then \
idb_pkg="${idb_pkg%/package.json}"; \
rm -rf node_modules/idb; \
ln -s "/app/$idb_pkg" node_modules/idb; \
if [ -n "$serwist_pkg" ]; then \
rm -rf "$serwist_pkg/node_modules/idb"; \
ln -s "/app/$idb_pkg" "$serwist_pkg/node_modules/idb"; \
fi; \
fi; \
if [ -n "$serwist_turbopack_pkg" ]; then \
serwist_turbopack_pkg="${serwist_turbopack_pkg%/package.json}"; \
mkdir -p node_modules/@serwist; \
rm -rf node_modules/@serwist/turbopack; \
ln -s "/app/$serwist_turbopack_pkg" node_modules/@serwist/turbopack; \
fi; \
if [ -n "$serwist_utils_pkg" ]; then \
serwist_utils_pkg="${serwist_utils_pkg%/package.json}"; \
mkdir -p node_modules/@serwist; \
rm -rf node_modules/@serwist/utils; \
ln -s "/app/$serwist_utils_pkg" node_modules/@serwist/utils; \
if [ -n "$serwist_pkg" ]; then \
mkdir -p "$serwist_pkg/node_modules/@serwist"; \
rm -rf "$serwist_pkg/node_modules/@serwist/utils"; \
ln -s "/app/$serwist_utils_pkg" "$serwist_pkg/node_modules/@serwist/utils"; \
fi; \
fi
USER nextjs
EXPOSE 3000
CMD ["node", "server.js"]