|
1 | | -FROM node:24 AS build |
| 1 | +FROM node:24-alpine AS base |
2 | 2 |
|
3 | | -ARG COMMIT_HASH |
4 | | -ARG BUILD_TIME |
5 | | - |
6 | | -RUN mkdir /zeppelin |
7 | | -RUN chown node:node /zeppelin |
8 | | - |
9 | | -# Install pnpm |
10 | | -RUN npm install -g pnpm@10.19.0 |
11 | | - |
12 | | -USER node |
13 | | - |
14 | | -# Install dependencies before copying over any other files |
15 | | -COPY --chown=node:node package.json pnpm-workspace.yaml pnpm-lock.yaml /zeppelin |
16 | | -RUN mkdir /zeppelin/backend |
17 | | -COPY --chown=node:node backend/package.json /zeppelin/backend |
18 | | -RUN mkdir /zeppelin/shared |
19 | | -COPY --chown=node:node shared/package.json /zeppelin/shared |
20 | | -RUN mkdir /zeppelin/dashboard |
21 | | -COPY --chown=node:node dashboard/package.json /zeppelin/dashboard |
| 3 | +RUN npm install -g pnpm@11.13.1 |
22 | 4 |
|
| 5 | +COPY --chown=node:node . /zeppelin |
23 | 6 | WORKDIR /zeppelin |
24 | | -RUN CI=true pnpm install |
25 | 7 |
|
26 | | -COPY --chown=node:node . /zeppelin |
| 8 | +FROM base AS prod-deps |
| 9 | +RUN --mount=type=cache,id=pnpm,target=/pnpm/store pnpm install --prod --frozen-lockfile |
27 | 10 |
|
28 | | -# Build backend |
29 | | -WORKDIR /zeppelin/backend |
| 11 | +FROM base AS build |
| 12 | +RUN --mount=type=cache,id=pnpm,target=/pnpm/store pnpm install --frozen-lockfile |
30 | 13 | RUN pnpm run build |
31 | 14 |
|
32 | | -# Build dashboard |
33 | | -WORKDIR /zeppelin/dashboard |
34 | | -RUN pnpm run build |
| 15 | +FROM base AS final |
35 | 16 |
|
36 | | -# Only keep prod dependencies |
37 | | -WORKDIR /zeppelin |
38 | | -RUN CI=true pnpm install --prod |
| 17 | +ARG COMMIT_HASH |
| 18 | +ARG BUILD_TIME |
| 19 | + |
| 20 | +COPY --from=prod-deps /zeppelin/node_modules /zeppelin/node_modules |
| 21 | +COPY --from=prod-deps /zeppelin/backend/node_modules /zeppelin/backend/node_modules |
| 22 | +#COPY --from=prod-deps /zeppelin/shared/node_modules /zeppelin/shared/node_modules # No prod deps in shared |
| 23 | +COPY --from=prod-deps /zeppelin/dashboard/node_modules /zeppelin/dashboard/node_modules |
| 24 | + |
| 25 | +COPY --from=build /zeppelin/backend/dist /zeppelin/backend/dist |
| 26 | +COPY --from=build /zeppelin/shared/dist /zeppelin/shared/dist |
| 27 | +COPY --from=build /zeppelin/dashboard/dist /zeppelin/dashboard/dist |
39 | 28 |
|
40 | 29 | # Add version info |
41 | 30 | RUN echo "${COMMIT_HASH}" > /zeppelin/.commit-hash |
42 | 31 | RUN echo "${BUILD_TIME}" > /zeppelin/.build-time |
43 | 32 |
|
44 | | -# --- Main image --- |
45 | | - |
46 | | -FROM node:24-alpine AS main |
47 | | - |
48 | | -RUN npm install -g pnpm@10.19.0 |
49 | | - |
50 | | -USER node |
51 | | -COPY --from=build --chown=node:node /zeppelin /zeppelin |
52 | | - |
53 | | -WORKDIR /zeppelin |
| 33 | +ENTRYPOINT ["/bin/sh", "/zeppelin/entrypoint.sh"] |
0 commit comments