FROM oven/bun:alpine AS base WORKDIR /usr/src/app ENV NODE_ENV=production ENV APP_USER_DATA_PATH="/app-data/user-data" ENV APP_TMP_USER_DATA_PATH="/app-data/tmp" ## Stage 1: Install dependencies FROM base AS install # install development dependencies RUN mkdir -p /temp/dev COPY package.json bun.lockb /temp/dev/ RUN cd /temp/dev && bun install --frozen-lockfile # install production dependencies RUN mkdir -p /temp/prod COPY package.json bun.lockb /temp/prod/ RUN cd /temp/prod && bun install --frozen-lockfile --production ## Stage 2: Build app FROM base AS prerelease # copy dependencies into workdir COPY --from=install /temp/dev/node_modules node_modules # add project files COPY . . # build project RUN bun run build ## Stage 3: Put everything together FROM base AS release # compose the final image COPY --from=install /temp/prod/node_modules node_modules COPY --from=prerelease /usr/src/app/build . #COPY --from=prerelease /usr/src/app/package.json . RUN mkdir /app-data && chown bun:bun /app-data VOLUME ["/app-data"] USER bun EXPOSE 3000/tcp ENTRYPOINT [ "bun", "--bun", "run", "start" ]