|
15 | 15 | ARG NODE_VER=20-alpine
|
16 | 16 | ARG DIR=/usr/src/app/
|
17 | 17 |
|
18 |
| -FROM node:$NODE_VER AS install |
| 18 | +FROM node:$NODE_VER AS base |
19 | 19 | ARG DIR
|
20 | 20 |
|
| 21 | +# Install needed packages |
| 22 | +RUN apk add --no-cache \ |
| 23 | + dumb-init |
| 24 | + |
21 | 25 | WORKDIR ${DIR}
|
22 | 26 |
|
23 | 27 | COPY ./.yarn ${DIR}.yarn
|
24 | 28 | COPY ./package.json ./yarn.lock ./.yarnrc.yml ${DIR}
|
25 | 29 |
|
| 30 | +RUN chown -R node:node ${DIR} |
| 31 | +# Do not run service as root |
| 32 | +USER node |
| 33 | + |
26 | 34 | RUN yarn workspaces focus --all --production
|
27 | 35 |
|
28 |
| -FROM install AS build |
| 36 | +# Launch entrypoint with dumb-init |
| 37 | +# Remap SIGTERM to SIGINT https://github.com/Yelp/dumb-init#signal-rewriting |
| 38 | +ENTRYPOINT ["/usr/bin/dumb-init", "--rewrite", "15:2", "--", "yarn", "run"] |
| 39 | +CMD ["start"] |
| 40 | + |
| 41 | +FROM base AS build |
29 | 42 | ARG DIR
|
30 | 43 |
|
31 | 44 | # Install dev deps too
|
32 | 45 | RUN yarn install --immutable
|
33 | 46 |
|
34 | 47 | COPY . ${DIR}
|
35 | 48 |
|
36 |
| -# Build code and remove dev deps |
37 |
| -RUN yarn build --verbose && rm -rfv .yarn .pnp* |
| 49 | +# Build code |
| 50 | +RUN yarn build --verbose |
38 | 51 |
|
39 |
| -FROM node:$NODE_VER AS production |
| 52 | +FROM base AS production |
40 | 53 | ARG DIR
|
41 | 54 |
|
42 |
| -# Install needed packages |
43 |
| -RUN apk add --no-cache \ |
44 |
| - dumb-init |
45 |
| - |
46 |
| -# Do not run service as root |
47 |
| -USER node |
48 |
| - |
49 |
| -WORKDIR ${DIR} |
50 |
| - |
51 |
| -COPY --from=install ${DIR} ${DIR} |
52 |
| -COPY --from=build ${DIR} ${DIR} |
53 |
| - |
54 |
| -# Launch entrypoint with dumb-init |
55 |
| -# Remap SIGTERM to SIGINT https://github.com/Yelp/dumb-init#signal-rewriting |
56 |
| -ENTRYPOINT ["/usr/bin/dumb-init", "--rewrite", "15:2", "--", "yarn", "run"] |
57 |
| -CMD ["start"] |
| 55 | +# Copy in build code |
| 56 | +COPY --from=build ${DIR}/dist ${DIR}/dist |
0 commit comments