1- FROM node:20-alpine
1+ # Build stage
2+ FROM node:20-alpine AS builder
23
34# Accept proxy build arguments
45ARG http_proxy
@@ -10,37 +11,62 @@ ENV http_proxy=${http_proxy}
1011ENV https_proxy=${https_proxy}
1112ENV no_proxy=${no_proxy}
1213
13- # Install necessary packages
14+ # Install build dependencies
1415RUN apk update && apk upgrade && \
1516 apk add --no-cache gcompat python3 make g++ git \
16- # Needed for pdfjs-dist
17- build-base cairo-dev pango-dev \
18- # Install Chromium
19- chromium && \
20- # Install PNPM globally
17+ build-base cairo-dev pango-dev && \
2118 npm install -g pnpm@9
2219
23- # Debug step to verify git installation
24- RUN git --version
20+ ENV NODE_OPTIONS=--max-old-space-size=8192
21+
22+ WORKDIR /usr/src
23+
24+ # Copy package files first for better layer caching
25+ COPY package.json pnpm-workspace.yaml turbo.json ./
26+ COPY packages/server/package.json ./packages/server/
27+ COPY packages/ui/package.json ./packages/ui/
28+
29+ # Install dependencies
30+ RUN pnpm install
31+
32+ # Copy source code
33+ COPY . .
34+
35+ # Build the app and clean up
36+ RUN pnpm build && \
37+ # Prune to production dependencies only
38+ pnpm prune --prod && \
39+ rm -rf node_modules/.cache && \
40+ rm -rf packages/*/node_modules/.cache
41+
42+ # Production stage
43+ FROM node:20-alpine
44+
45+ # Accept proxy build arguments
46+ ARG http_proxy
47+ ARG https_proxy
48+ ARG no_proxy
49+
50+ ENV http_proxy=${http_proxy}
51+ ENV https_proxy=${https_proxy}
52+ ENV no_proxy=${no_proxy}
53+
54+ # Install only runtime dependencies with patched npm
55+ RUN apk update && apk upgrade && \
56+ apk add --no-cache gcompat chromium && \
57+ npm install -g npm@latest pnpm@latest && \
58+ rm -rf /var/cache/apk/*
2559
2660ENV PUPPETEER_SKIP_DOWNLOAD=true
2761ENV PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium-browser
2862ENV NODE_OPTIONS=--max-old-space-size=8192
2963
3064WORKDIR /usr/src
3165
32- # Copy app source
33- COPY . .
34-
35- # Install dependencies and build the app
36- RUN pnpm config set store-dir .pnpm-store && \
37- pnpm install && \
38- pnpm update
[email protected] && \
39- pnpm build && \
40- pnpm remove esbuild && \
41- rm -rf .pnpm-store && \
42- rm -rf /root/.local/share/pnpm && \
43- pnpm prune --prod
66+ # Copy only necessary files from builder
67+ COPY --from=builder /usr/src/package.json /usr/src/pnpm-workspace.yaml ./
68+ COPY --from=builder /usr/src/packages ./packages
69+ COPY --from=builder /usr/src/node_modules ./node_modules
4470
4571EXPOSE 3000
4672
0 commit comments