The standalone tracer only includes subpaths the Next.js app imports. drizzle-orm/postgres-js/migrator is only used by migrate.mjs (not app code) so it is excluded from the trace. Copy the full packages from the builder stage to ensure all subpaths are available at startup. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
49 lines
2.2 KiB
Docker
49 lines
2.2 KiB
Docker
# syntax=docker/dockerfile:1
|
|
|
|
# ── Stage 1: fetch dependencies ───────────────────────────────────────────────
|
|
FROM node:22-alpine AS deps
|
|
RUN corepack enable && corepack prepare pnpm@10.33.3 --activate
|
|
WORKDIR /app
|
|
COPY package.json pnpm-lock.yaml .npmrc ./
|
|
# Populate the pnpm virtual store; this layer is cached until lock file changes.
|
|
RUN pnpm fetch
|
|
|
|
# ── Stage 2: build ────────────────────────────────────────────────────────────
|
|
FROM deps AS builder
|
|
WORKDIR /app
|
|
# CI=true prevents pnpm from prompting for TTY confirmation when removing modules dir
|
|
ENV CI=true
|
|
ENV NEXT_TELEMETRY_DISABLED=1
|
|
COPY . .
|
|
RUN pnpm install --offline --frozen-lockfile
|
|
RUN pnpm build
|
|
|
|
# ── Stage 3: production runtime ───────────────────────────────────────────────
|
|
FROM node:22-alpine AS runner
|
|
WORKDIR /app
|
|
ENV NODE_ENV=production
|
|
ENV PORT=3000
|
|
ENV HOSTNAME=0.0.0.0
|
|
|
|
RUN addgroup --system --gid 1001 nodejs \
|
|
&& adduser --system --uid 1001 nextjs
|
|
|
|
COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./
|
|
COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static
|
|
COPY --from=builder --chown=nextjs:nodejs /app/public ./public
|
|
|
|
# Migration assets — drizzle/ holds SQL + meta journal; migrate.mjs runs
|
|
# at startup via the entrypoint. Explicitly copy the full drizzle-orm and
|
|
# postgres packages because the standalone tracer only includes subpaths
|
|
# the app itself imports, not the postgres-js/migrator subpath.
|
|
COPY --from=builder --chown=nextjs:nodejs /app/drizzle ./drizzle
|
|
COPY --from=builder --chown=nextjs:nodejs /app/scripts/migrate.mjs ./scripts/migrate.mjs
|
|
COPY --from=builder --chown=nextjs:nodejs /app/node_modules/drizzle-orm ./node_modules/drizzle-orm
|
|
COPY --from=builder --chown=nextjs:nodejs /app/node_modules/postgres ./node_modules/postgres
|
|
COPY --chown=nextjs:nodejs docker-entrypoint.sh /usr/local/bin/docker-entrypoint.sh
|
|
RUN chmod +x /usr/local/bin/docker-entrypoint.sh
|
|
|
|
USER nextjs
|
|
EXPOSE 3000
|
|
ENTRYPOINT ["/usr/local/bin/docker-entrypoint.sh"]
|