FROM node:20.11-alpine3.18 as build # Move files into the image and install WORKDIR /app COPY ./bskyogcard/package.json ./ COPY ./bskyogcard/yarn.lock ./ RUN yarn install --frozen-lockfile COPY ./bskyogcard ./ # build then prune dev deps RUN yarn build RUN yarn install --production --ignore-scripts --prefer-offline # Uses assets from build stage to reduce build size FROM node:20.11-alpine3.18 RUN apk add --update dumb-init # Avoid zombie processes, handle signal forwarding ENTRYPOINT ["dumb-init", "--"] WORKDIR /app COPY --from=build /app /app RUN mkdir /app/data && chown node /app/data VOLUME /app/data EXPOSE 3000 ENV CARD_PORT=3000 ENV NODE_ENV=production # potential perf issues w/ io_uring on this version of node ENV UV_USE_IO_URING=0 # https://github.com/nodejs/docker-node/blob/master/docs/BestPractices.md#non-root-user USER node CMD ["node", "--heapsnapshot-signal=SIGUSR2", "--enable-source-maps", "dist/bin.js"] LABEL org.opencontainers.image.source=https://github.com/bluesky-social/social-app LABEL org.opencontainers.image.description="Bsky Card Service" LABEL org.opencontainers.image.licenses=UNLICENSED