55ARG NODE_VERSION=22.17.0
66FROM node:${NODE_VERSION}-slim AS base
77
8+ LABEL fly_launch_runtime="Node.js"
9+
810# Node.js app lives here
911WORKDIR /app
1012
@@ -16,35 +18,34 @@ ARG PNPM_VERSION=10.13.0
1618RUN npm install -g pnpm@$PNPM_VERSION
1719
1820
21+ # Throw-away build stage to reduce size of final image
22+ FROM base AS build
23+
1924# Install packages needed to build node modules
2025RUN apt-get update -qq && \
2126 apt-get install --no-install-recommends -y build-essential node-gyp pkg-config python-is-python3 git
2227
23- # Dependencies stage
24- FROM base AS dependencies
28+ # Install node modules
2529COPY .npmrc package.json pnpm-lock.yaml ./
26- RUN pnpm install --frozen-lockfile
30+ RUN pnpm install --frozen-lockfile --prod=false
2731
28- # Build stage
29- FROM dependencies AS build
32+ # Copy application code
3033COPY . .
34+
35+ # Build application
3136RUN pnpm run generate:docs
3237RUN pnpm run build
3338
34-
35- # Final production stage
39+ # Remove development dependencies
3640RUN pnpm prune --prod
37- FROM base
38- WORKDIR /app
39- ENV NODE_ENV=production
4041
4142
42- # Copy production dependencies
43- COPY --from=build /app/node_modules /app/node_modules
44- COPY --from=build /app/build /app/build
45- COPY --from=build /app/generated-docs /app/generated-docs
43+ # Final stage for app image
44+ FROM base
4645
46+ # Copy built application
47+ COPY --from=build /app /app
4748
4849# Start the server by default, this can be overwritten at runtime
49- EXPOSE 8080
50+ EXPOSE 3000
5051CMD [ "pnpm" , "run" , "start" ]
0 commit comments