From a56dfebb820dbdc17902b13cbee1ad96c628fee8 Mon Sep 17 00:00:00 2001 From: Michael Herold Date: Tue, 25 Aug 2026 14:57:55 -0500 Subject: [PATCH] Slim down the Docker image This change uses pnpm's deploy-to-production filter to remove all of the files that are unnecessary for deployment. This saves a few hundred megabytes in size for the resulting Docker image. --- .dockerignore | 8 ++++++++ Dockerfile | 19 +++++++------------ 2 files changed, 15 insertions(+), 12 deletions(-) create mode 100644 .dockerignore diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..3f2e59a --- /dev/null +++ b/.dockerignore @@ -0,0 +1,8 @@ +.bundle +.git +.github +coverage +node_modules +packages/*/node_modules +packages/*/dist +packages/*/*.tsbuildinfo diff --git a/Dockerfile b/Dockerfile index 68e44e6..7431e4d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -7,20 +7,15 @@ COPY packages/server/package.json packages/server/ COPY packages/web/package.json packages/web/ RUN pnpm install --frozen-lockfile COPY packages packages -RUN pnpm -r build && pnpm prune --prod +RUN pnpm -r build +RUN pnpm --filter @understory/server deploy --prod --legacy /deploy/server -FROM node:22-alpine +FROM node:22-alpine AS runtime WORKDIR /app -COPY --from=build /app/node_modules node_modules -COPY --from=build /app/packages/core/dist packages/core/dist -COPY --from=build /app/packages/core/package.json packages/core/ -COPY --from=build /app/packages/core/node_modules packages/core/node_modules -COPY --from=build /app/packages/server/dist packages/server/dist -COPY --from=build /app/packages/server/package.json packages/server/ -COPY --from=build /app/packages/server/node_modules packages/server/node_modules -COPY --from=build /app/packages/web/dist packages/web/dist +COPY --from=build /deploy/server server +COPY --from=build /app/packages/web/dist web/dist -ENV BUNDLE_ROOT=/bundle PORT=3800 +ENV NODE_ENV=production BUNDLE_ROOT=/bundle PORT=3800 EXPOSE 3800 VOLUME /bundle -CMD ["node", "packages/server/dist/index.js"] +CMD ["node", "server/dist/index.js"]