FROM node:20-bookworm AS build
WORKDIR /app
RUN --mount=type=cache,target=/var/cache/apt \
apt-get update && \
apt-get --no-install-recommends install -y openssl && \
rm -rf /var/lib/apt/lists/*
COPY package.json package-lock.json tsconfig.json ./
COPY prisma/schema.prisma ./
RUN --mount=type=cache,target=/app/.npm \
npm set cache /app/.npm && \
npm ci
COPY . .
RUN npx prisma generate && npm run build
FROM node:20-bookworm-slim AS runtime
WORKDIR /app
COPY --from=build /app/node_modules ./node_modules
COPY --from=build /app/prisma/schema.prisma ./prisma/schema.prisma
COPY --from=build /app/package.json ./package.json
COPY --from=build /app/package-lock.json ./package-lock.json
COPY --from=build /app/dist ./dist
FROM runtime AS collector
CMD ["node","./dist/collector/server.js"]
FROM runtime AS workers
CMD ["node","./dist/workers/master.js"]
FROM runtime AS api
CMD ["node","./dist/api/server.js"]
FROM runtime AS webhook
CMD ["node", "./dist/webhook/server.js"]
FROM node:20-bookworm AS build
WORKDIR /app
RUN --mount=type=cache,target=/var/cache/apt \
apt-get update && \
apt-get --no-install-recommends install -y openssl && \
rm -rf /var/lib/apt/lists/*
COPY package.json package-lock.json tsconfig.json ./
COPY prisma/schema.prisma ./
RUN --mount=type=cache,target=/app/.npm \
npm set cache /app/.npm && \
npm ci
COPY . .
RUN npx prisma generate && npm run build
FROM node:20-bookworm-slim AS runtime
WORKDIR /app
COPY --from=build /app/node_modules ./node_modules
COPY --from=build /app/prisma/schema.prisma ./prisma/schema.prisma
COPY --from=build /app/package.json ./package.json
COPY --from=build /app/package-lock.json ./package-lock.json
COPY --from=build /app/dist ./dist
FROM runtime AS collector
CMD ["node","./dist/collector/server.js"]
FROM runtime AS workers
CMD ["node","./dist/workers/master.js"]
FROM runtime AS api
CMD ["node","./dist/api/server.js"]
FROM runtime AS webhook
CMD ["node", "./dist/webhook/server.js"]