1- FROM node:18 AS pruner
1+ FROM node:18.16.1-bullseye-slim AS pruner
22
33WORKDIR /triggerdotdev
44
5- COPY . .
5+ COPY --chown=node:node . .
66RUN npx -q turbo prune --scope=webapp --docker
77RUN find . -name "node_modules" -type d -prune -exec rm -rf '{}' +
88
99# Base strategy to have layer caching
10- FROM node:18 AS base
11- RUN apt-get update && apt-get install -y openssl
10+ FROM node:18.16.1-bullseye-slim AS base
11+ RUN apt-get update && apt-get install -y openssl dumb-init
1212WORKDIR /triggerdotdev
13- COPY .gitignore .gitignore
14- COPY --from=pruner /triggerdotdev/out/json/ .
15- COPY --from=pruner /triggerdotdev/out/pnpm-lock.yaml ./pnpm-lock.yaml
16- COPY --from=pruner /triggerdotdev/out/pnpm-workspace.yaml ./pnpm-workspace.yaml
13+ COPY --chown=node:node .gitignore .gitignore
14+ COPY --from=pruner --chown=node:node /triggerdotdev/out/json/ .
15+ COPY --from=pruner --chown=node:node /triggerdotdev/out/pnpm-lock.yaml ./pnpm-lock.yaml
16+ COPY --from=pruner --chown=node:node /triggerdotdev/out/pnpm-workspace.yaml ./pnpm-workspace.yaml
1717
1818# # Dev deps
1919FROM base AS dev-deps
@@ -30,41 +30,43 @@ WORKDIR /triggerdotdev
3030RUN corepack enable
3131ENV NODE_ENV production
3232RUN pnpm install --prod --no-frozen-lockfile
33- COPY --from=pruner /triggerdotdev/packages/database/prisma/schema.prisma /triggerdotdev/packages/database/prisma/schema.prisma
33+ COPY --from=pruner --chown=node:node /triggerdotdev/packages/database/prisma/schema.prisma /triggerdotdev/packages/database/prisma/schema.prisma
3434RUN pnpx prisma@^4.16.0 generate --schema /triggerdotdev/packages/database/prisma/schema.prisma
3535
3636# # Builder (builds the webapp)
3737FROM base AS builder
3838WORKDIR /triggerdotdev
3939# Corepack is used to install pnpm
4040RUN corepack enable
41- COPY --from=pruner /triggerdotdev/out/full/ .
42- COPY --from=dev-deps /triggerdotdev/ .
43- COPY turbo.json turbo.json
44- COPY docker/scripts ./scripts
41+ COPY --from=pruner --chown=node:node /triggerdotdev/out/full/ .
42+ COPY --from=dev-deps --chown=node:node /triggerdotdev/ .
43+ COPY --chown=node:node turbo.json turbo.json
44+ COPY --chown=node:node docker/scripts ./scripts
4545RUN chmod +x ./scripts/wait-for-it.sh
4646RUN chmod +x ./scripts/entrypoint.sh
4747RUN pnpm run generate
4848RUN pnpm run build --filter=webapp...
4949
5050# Runner
51- FROM node:18 AS runner
51+ FROM node:18.16.1-bullseye-slim AS runner
5252RUN apt-get update && apt-get install -y openssl
5353WORKDIR /triggerdotdev
5454RUN corepack enable
5555ENV NODE_ENV production
5656
57- COPY --from=pruner /triggerdotdev/out/full/ .
58- COPY --from=production-deps /triggerdotdev .
59- COPY --from=builder /triggerdotdev/apps/webapp/build/server.js ./apps/webapp/build/server.js
60- COPY --from=builder /triggerdotdev/apps/webapp/build ./apps/webapp/build
61- COPY --from=builder /triggerdotdev/apps/webapp/public ./apps/webapp/public
62- COPY --from=builder /triggerdotdev/scripts ./scripts
57+ COPY --from=base /usr/bin/dumb-init /usr/bin/dumb-init
58+ COPY --from=pruner --chown=node:node /triggerdotdev/out/full/ .
59+ COPY --from=production-deps --chown=node:node /triggerdotdev .
60+ COPY --from=builder --chown=node:node /triggerdotdev/apps/webapp/build/server.js ./apps/webapp/build/server.js
61+ COPY --from=builder --chown=node:node /triggerdotdev/apps/webapp/build ./apps/webapp/build
62+ COPY --from=builder --chown=node:node /triggerdotdev/apps/webapp/public ./apps/webapp/public
63+ COPY --from=builder --chown=node:node /triggerdotdev/scripts ./scripts
6364
6465EXPOSE 3000
6566
6667# This is needed to run migrations in the entrypoint.sh script (TODO: figure out a better way to do this)
6768RUN npm install -g prisma@4.16.0
6869RUN npm install -g ts-node@10.9.1
6970
70- CMD ["./scripts/entrypoint.sh" ]
71+ USER node
72+ CMD ["./scripts/entrypoint.sh" ]
0 commit comments