|
1 | | -FROM node:current-alpine as base |
2 | | -RUN apk add -U build-base python3 |
3 | | -ENV PNPM_HOME="/pnpm" |
4 | | -ENV PATH="$PNPM_HOME:$PATH" |
5 | | -RUN corepack enable |
6 | | -RUN npx pnpm i -g pnpm@latest |
| 1 | +# ---------- Base image ---------- |
| 2 | +FROM node:20-alpine as base |
| 3 | +RUN apk add -U build-base python3 py3-setuptools make g++ git |
7 | 4 | WORKDIR /usr/src/app |
| 5 | + |
| 6 | +# Install pnpm globally |
| 7 | +RUN npm install -g pnpm@latest |
| 8 | + |
8 | 9 | COPY . /usr/src/app |
9 | 10 |
|
| 11 | +# ---------- Production dependencies ---------- |
10 | 12 | FROM base AS prod-deps |
11 | | -RUN --mount=type=cache,id=pnpm,target=/pnpm/store pnpm install --prod --frozen-lockfile |
| 13 | +RUN --mount=type=cache,id=pnpm,target=/root/.pnpm-store pnpm install --prod --frozen-lockfile --ignore-scripts |
| 14 | +# Rebuild only the native modules we need |
| 15 | +RUN cd node_modules/node-pty && npm run install && cd ../.. |
| 16 | +RUN cd node_modules/.pnpm/ [email protected]/node_modules/gc-stats && npm run install |
12 | 17 |
|
| 18 | +# ---------- Build stage ---------- |
13 | 19 | FROM base AS build |
14 | | -RUN --mount=type=cache,id=pnpm,target=/pnpm/store pnpm install --frozen-lockfile |
| 20 | +RUN --mount=type=cache,id=pnpm,target=/root/.pnpm-store pnpm install --frozen-lockfile |
15 | 21 | RUN pnpm run build |
16 | 22 |
|
17 | | -FROM node:current-alpine |
| 23 | +# ---------- Final runtime image ---------- |
| 24 | +FROM base |
18 | 25 | LABEL maintainer= "[email protected]" |
19 | 26 | WORKDIR /usr/src/app |
20 | 27 | ENV NODE_ENV=production |
21 | | -EXPOSE 3000 |
| 28 | + |
22 | 29 | COPY --from=prod-deps /usr/src/app/node_modules /usr/src/app/node_modules |
23 | 30 | COPY --from=build /usr/src/app/build /usr/src/app/build |
24 | 31 | COPY package.json /usr/src/app |
| 32 | + |
25 | 33 | RUN apk add -U coreutils openssh-client sshpass && \ |
26 | | - mkdir ~/.ssh |
| 34 | + mkdir -p ~/.ssh |
27 | 35 |
|
28 | | -EXPOSE 8000 |
29 | | -CMD [ "pnpm", "start" ] |
| 36 | +EXPOSE 3000 |
| 37 | +CMD ["pnpm", "start"] |
0 commit comments