From 79c404749cce658204d6074b8fca18d42c029128 Mon Sep 17 00:00:00 2001 From: vchikalkin Date: Wed, 2 Jul 2025 20:50:30 +0300 Subject: [PATCH] apps/bot: fix Dockerfile --- apps/bot/Dockerfile | 65 ++++++++++++++++++++++++++++----------------- 1 file changed, 40 insertions(+), 25 deletions(-) diff --git a/apps/bot/Dockerfile b/apps/bot/Dockerfile index 9f1dbf0..b581437 100644 --- a/apps/bot/Dockerfile +++ b/apps/bot/Dockerfile @@ -1,36 +1,51 @@ -# This Dockerfile is copy-pasted into our main docs at /docs/handbook/deploying-with-docker. -# Make sure you update both files! +ARG NODE_VERSION=22 +ARG PROJECT=bot -FROM node:alpine AS builder -RUN corepack enable && corepack prepare pnpm@8.9.0 --activate -ENV PNPM_HOME=/usr/local/bin -RUN apk add --no-cache libc6-compat +# Alpine image +FROM node:${NODE_VERSION}-alpine AS alpine RUN apk update +RUN apk add --no-cache libc6-compat + +FROM alpine as base +ENV PNPM_HOME="/pnpm" +ENV PATH="$PNPM_HOME:$PATH" +RUN apk add --no-cache libc6-compat && \ + corepack enable && \ + pnpm install turbo dotenv-cli --global + +FROM base AS pruner +ARG PROJECT WORKDIR /app -RUN pnpm add -g turbo@1.12.4 dotenv-cli COPY . . -RUN turbo prune --scope=bot --docker +RUN turbo prune --scope=${PROJECT} --docker -FROM node:alpine AS installer -RUN corepack enable && corepack prepare pnpm@latest --activate -ENV PNPM_HOME=/usr/local/bin -RUN apk add --no-cache libc6-compat -RUN apk update +FROM base AS builder WORKDIR /app -COPY .gitignore .gitignore -COPY --from=builder /app/out/json/ . -COPY --from=builder /app/out/pnpm-lock.yaml ./pnpm-lock.yaml -COPY --from=builder /app/out/pnpm-workspace.yaml ./pnpm-workspace.yaml -RUN pnpm install -COPY --from=builder /app/out/full/ . + +COPY --from=pruner /app/out/json/ . +COPY --from=pruner /app/out/pnpm-lock.yaml ./pnpm-lock.yaml +COPY --from=pruner /app/out/pnpm-workspace.yaml ./pnpm-workspace.yaml + +RUN --mount=type=cache,id=pnpm,target=~/.pnpm-store pnpm install --prod --frozen-lockfile + +COPY --from=pruner /app/out/full/ . + COPY turbo.json turbo.json -RUN pnpm dotenv -e .env turbo run build --filter=bot... +COPY .env .env -FROM node:alpine AS runner -WORKDIR /app -RUN addgroup --system --gid 1001 botuser +RUN dotenv -e .env turbo run build --filter=${PROJECT}... +RUN --mount=type=cache,id=pnpm,target=~/.pnpm-store pnpm prune --prod --no-optional +RUN rm -rf ./**/*/src + +FROM alpine AS runner +ARG PROJECT + +RUN addgroup --system --gid 1001 nodejs RUN adduser --system --uid 1001 botuser USER botuser -COPY --from=installer /app . -CMD node apps/bot/dist/src/index.js \ No newline at end of file +WORKDIR /app +COPY --from=builder --chown=nodejs:nodejs /app . +WORKDIR /app/apps/${PROJECT} + +CMD ["node", "dist/index.cjs"]