mirror of
https://github.com/hanzoai/captable.git
synced 2026-10-16 14:21:29 +00:00
The deps stage ran `corepack enable pnpm` with no version, so corepack
resolved whatever npm calls latest — pnpm 11.20.0, whose bin/pnpm.cjs is a
three-line `import('./pnpm.mjs')` shim. The corepack bundled with Node
20.11.0 loads that file through vm without an import callback and dies with
ERR_VM_DYNAMIC_IMPORT_CALLBACK_MISSING. The build broke with no commit to
this repo, which is the actual defect: the version was never stated.
State it once, in the field that owns it. 9.15.9 is the last patch of the 9
line, which is what pnpm-lock.yaml (lockfileVersion 9.0) and engines.pnpm
(>=9.1.2) already ask for; pnpm 9 also still runs dependency install scripts
by default, which prisma needs. Its bin is plain CJS, so the corepack in this
base image can load it.
83 lines
2.4 KiB
Docker
83 lines
2.4 KiB
Docker
ARG NODE_VERSION=20.11.0
|
|
|
|
FROM --platform=linux/amd64 node:${NODE_VERSION}-alpine AS base
|
|
LABEL fly_launch_runtime="Next.js/Prisma"
|
|
|
|
FROM base AS deps
|
|
# Check https://github.com/nodejs/docker-node/tree/b4117f9333da4138b03a546ec926ef50a31506c3#nodealpine to understand why libc6-compat might be needed.
|
|
RUN apk add --no-cache libc6-compat openssl
|
|
WORKDIR /app
|
|
|
|
# Install Prisma Client - remove if not using Prisma
|
|
|
|
COPY prisma ./prisma
|
|
|
|
ENV HUSKY 0
|
|
|
|
# Install dependencies. The pnpm version is stated once — package.json's
|
|
# `packageManager` field — and corepack reads it from there. Unpinned, corepack
|
|
# takes whatever npm calls latest that day; that is how this build broke with
|
|
# no commit to the repo.
|
|
COPY package.json pnpm-lock.yaml* ./
|
|
RUN corepack enable pnpm && pnpm i --frozen-lockfile
|
|
|
|
##### BUILDER
|
|
|
|
FROM base AS builder
|
|
WORKDIR /app
|
|
COPY --from=deps /app/node_modules ./node_modules
|
|
COPY --from=deps /app/prisma ./prisma
|
|
COPY . .
|
|
|
|
# Next.js collects completely anonymous telemetry data about general usage.
|
|
# Learn more here: https://nextjs.org/telemetry
|
|
# Uncomment the following line in case you want to disable telemetry during the build.
|
|
ENV NEXT_TELEMETRY_DISABLED 1
|
|
ENV DOCKER_OUTPUT 1
|
|
ENV SKIP_ENV_VALIDATION 1
|
|
RUN corepack enable pnpm && pnpm run build
|
|
|
|
##### RUNNER
|
|
|
|
FROM base AS runner
|
|
WORKDIR /app
|
|
|
|
ENV NODE_ENV production
|
|
ENV NEXT_TELEMETRY_DISABLED 1
|
|
|
|
ENV DOCKER_OUTPUT 1
|
|
|
|
RUN addgroup --system --gid 1001 nodejs
|
|
RUN adduser --system --uid 1001 nextjs
|
|
|
|
COPY --from=builder /app/public ./public
|
|
|
|
# Set the correct permission for prerender cache
|
|
RUN mkdir .next
|
|
RUN chown nextjs:nodejs .next
|
|
|
|
# Automatically leverage output traces to reduce image size
|
|
# https://nextjs.org/docs/advanced-features/output-file-tracing
|
|
COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./
|
|
COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static
|
|
|
|
# copy prisma and migrate script
|
|
COPY --from=builder --chown=nextjs:nodejs /app/scripts/migrate.sh ./scripts/migrate.sh
|
|
COPY --from=builder --chown=nextjs:nodejs /app/prisma/schema.prisma ./prisma/schema.prisma
|
|
COPY --from=builder --chown=nextjs:nodejs /app/prisma/migrations ./prisma/migrations
|
|
|
|
|
|
USER nextjs
|
|
|
|
EXPOSE 3000
|
|
|
|
ENV PORT 3000
|
|
|
|
# Run the migration script
|
|
# RUN chmod +x ./scripts/migrate.sh
|
|
# ENTRYPOINT [ "./scripts/migrate.sh" ]
|
|
|
|
# server.js is created by next build from the standalone output
|
|
# https://nextjs.org/docs/pages/api-reference/next-config-js/output
|
|
CMD HOSTNAME="0.0.0.0" node server.js
|