11FROM node:20-alpine AS base
2+ ENV PNPM_HOME="/pnpm"
3+ ENV PATH="$PNPM_HOME:$PATH"
4+ RUN corepack enable
25
36# Install dependencies only when needed
47FROM base AS deps
58RUN apk add --no-cache libc6-compat
69WORKDIR /app
710
8- # Copy shared package first
9- COPY shared ./shared
10- WORKDIR /app/shared
11- RUN npm install && npm run build
12-
13- # Install client dependencies
14- WORKDIR /app/client
15- COPY client/package.json client/package-lock.json* ./
16- RUN npm ci --legacy-peer-deps
11+ # Install workspace dependencies
12+ COPY package.json pnpm-lock.yaml pnpm-workspace.yaml .npmrc ./
13+ COPY client/package.json ./client/package.json
14+ COPY server/package.json ./server/package.json
15+ COPY docs/package.json ./docs/package.json
16+ COPY monitor-agent/package.json ./monitor-agent/package.json
17+ COPY shared/package.json ./shared/package.json
18+ RUN pnpm install --frozen-lockfile --filter client... --filter @rybbit/shared
1719
1820# Rebuild the source code only when needed
1921FROM base AS builder
2022WORKDIR /app
21- COPY --from=deps /app/shared ./shared
22- COPY --from=deps /app/client/node_modules ./client/node_modules
23+ COPY --from=deps /app ./
24+ COPY shared/ ./shared
2325COPY client/ ./client
2426
2527# Next.js collects completely anonymous telemetry data about general usage.
@@ -37,7 +39,8 @@ ENV NEXT_PUBLIC_TURNSTILE_SITE_KEY=${NEXT_PUBLIC_TURNSTILE_SITE_KEY}
3739ENV NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY=${NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY}
3840
3941WORKDIR /app/client
40- RUN npm run build
42+ RUN pnpm --filter @rybbit/shared build
43+ RUN pnpm --filter client build
4144
4245# Production image, copy all the files and run next
4346FROM base AS runner
@@ -49,16 +52,16 @@ ENV NEXT_TELEMETRY_DISABLED=1
4952RUN addgroup --system --gid 1001 nodejs
5053RUN adduser --system --uid 1001 nextjs
5154
52- COPY --from=builder /app/client/public ./public
55+ COPY --from=builder /app/client/public ./client/ public
5356
5457# Set the correct permission for prerender cache
55- RUN mkdir .next
56- RUN chown nextjs:nodejs .next
58+ RUN mkdir -p client/ .next
59+ RUN chown nextjs:nodejs client/ .next
5760
5861# Automatically leverage output traces to reduce image size
5962# https://nextjs.org/docs/advanced-features/output-file-tracing
6063COPY --from=builder --chown=nextjs:nodejs /app/client/.next/standalone ./
61- COPY --from=builder --chown=nextjs:nodejs /app/client/.next/static ./.next/static
64+ COPY --from=builder --chown=nextjs:nodejs /app/client/.next/static ./client/ .next/static
6265
6366USER nextjs
6467
@@ -67,4 +70,4 @@ EXPOSE 3002
6770ENV PORT=3002
6871ENV HOSTNAME="0.0.0.0"
6972
70- CMD ["node" , "server.js" ]
73+ CMD ["node" , "client/ server.js" ]
0 commit comments