Dockerfile.bskylink
Rama main · réplica de lectura del repositorio original.
FROM node:24.22-alpine3.23 AS build
# Move files into the image and install
WORKDIR /app
RUN corepack enable
COPY ./bskylink/package.json ./
COPY ./bskylink/pnpm-lock.yaml ./bskylink/pnpm-workspace.yaml ./
RUN pnpm install --frozen-lockfile
COPY ./bskylink/tsconfig.json ./
COPY ./bskylink/src ./src
COPY ./bskylink/locales ./locales
# build then prune dev deps
RUN pnpm build
RUN pnpm install --prod --frozen-lockfile --ignore-scripts --prefer-offline
# Uses assets from build stage to reduce build size
FROM node:24.22-alpine3.23
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 9090
ENV LINK_PORT=3000
ENV LINK_METRICS_PORT=9090
ENV NODE_ENV=production
ENV NODE_OPTIONS="--import=@atproto-labs/fetch-node/emudhra-preload"
# 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 Link Service"
LABEL org.opencontainers.image.licenses=UNLICENSED