diff --git a/Dockerfile b/Dockerfile index 7901699..67ea259 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,32 +1,59 @@ FROM node:20-alpine AS base ENV TZ=Asia/Tehran -RUN apk add --no-cache tzdata +ENV NODE_ENV=production -FROM base AS deps -WORKDIR /app +RUN apk add --no-cache tzdata RUN corepack enable + +WORKDIR /app + + +# ----------------------- +# Dependencies (DEV + PROD for build) +# ----------------------- +FROM base AS deps + COPY package.json yarn.lock ./ + +# IMPORTANT: install ALL deps (includes @nestjs/cli) RUN yarn install --frozen-lockfile + +# ----------------------- +# Builder stage +# ----------------------- FROM base AS builder + WORKDIR /app -RUN corepack enable + COPY package.json yarn.lock nest-cli.json tsconfig.json tsconfig.build.json ./ COPY --from=deps /app/node_modules ./node_modules COPY src ./src + +# Ensure Nest CLI exists via local node_modules RUN yarn build \ && mkdir -p dist/config \ && cp src/config/swagger.json dist/config/ -FROM base AS prod-deps -WORKDIR /app -RUN corepack enable -COPY package.json yarn.lock ./ -RUN yarn install --production --frozen-lockfile +# ----------------------- +# Production dependencies ONLY +# ----------------------- +FROM base AS prod-deps + +COPY package.json yarn.lock ./ + +RUN yarn install --frozen-lockfile --production=true + + +# ----------------------- +# Runner +# ----------------------- FROM base AS runner + RUN addgroup -S appgroup && adduser -S appuser -G appgroup + WORKDIR /app ENV NODE_ENV=production @@ -39,4 +66,4 @@ USER appuser EXPOSE 3000 -CMD ["node", "dist/main"] +CMD ["node", "dist/main"] \ No newline at end of file