Created
October 9, 2023 02:02
-
-
Save jarrodmedrano/60b960308b81c5bebf217a135265c68e to your computer and use it in GitHub Desktop.
PNPM docker
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Had same problem on COPY --from=builder /app/out/full/ . line as everyone else using pnpm. | |
Added **/node_modules to root .dockerignore to resolve. | |
Then ran into issues with the last 3 COPY lines. Needed to also copy the next.config.js from the with-docker example. tldr- I was missing output: standalone | |
Ended up with this. I like it because pnpm and turbo are pulled to "base", allowing me to just use bare alpine in the end result. | |
copied from the with-docker example and updated to use pnpm. | |
# src Dockerfile: https://github.com/vercel/turbo/blob/main/examples/with-docker/apps/web/Dockerfile | |
FROM node:18-alpine AS alpine | |
# setup pnpm on the alpine base | |
FROM alpine as base | |
ENV PNPM_HOME="/pnpm" | |
ENV PATH="$PNPM_HOME:$PATH" | |
RUN corepack enable | |
RUN pnpm install turbo --global | |
FROM base AS builder | |
# 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 | |
RUN apk update | |
# Set working directory | |
WORKDIR /app | |
COPY . . | |
RUN turbo prune --scope=web --docker | |
# Add lockfile and package.json's of isolated subworkspace | |
FROM base AS installer | |
RUN apk add --no-cache libc6-compat | |
RUN apk update | |
WORKDIR /app | |
# First install the dependencies (as they change less often) | |
COPY .gitignore .gitignore | |
COPY --from=builder /app/out/json/ . | |
COPY --from=builder /app/out/pnpm-lock.yaml ./pnpm-lock.yaml | |
COPY --from=builder /app/out/pnpm-workspace.yaml ./pnpm-workspace.yaml | |
RUN pnpm install | |
# Build the project | |
COPY --from=builder /app/out/full/ . | |
COPY turbo.json turbo.json | |
# Uncomment and use build args to enable remote caching | |
# ARG TURBO_TEAM | |
# ENV TURBO_TEAM=$TURBO_TEAM | |
# ARG TURBO_TOKEN | |
# ENV TURBO_TOKEN=$TURBO_TOKEN | |
RUN turbo run build --filter=web | |
# use alpine as the thinest image | |
FROM alpine AS runner | |
WORKDIR /app | |
# Don't run production as root | |
RUN addgroup --system --gid 1001 nodejs | |
RUN adduser --system --uid 1001 nextjs | |
USER nextjs | |
COPY --from=installer /app/apps/web/next.config.js . | |
COPY --from=installer /app/apps/web/package.json . | |
# Automatically leverage output traces to reduce image size | |
# https://nextjs.org/docs/advanced-features/output-file-tracing | |
COPY --from=installer --chown=nextjs:nodejs /app/apps/web/.next/standalone ./ | |
COPY --from=installer --chown=nextjs:nodejs /app/apps/web/.next/static ./apps/web/.next/static | |
COPY --from=installer --chown=nextjs:nodejs /app/apps/web/public ./apps/web/public | |
CMD node apps/web/server.js |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment