From 53967864b4525360cf53f7e2b704a320d5f0f51b Mon Sep 17 00:00:00 2001 From: morteza-mortezai Date: Sun, 31 May 2026 21:48:38 +0330 Subject: [PATCH] update docker --- Dockerfile | 48 +++++++++++++++++++++++++++++++----------------- 1 file changed, 31 insertions(+), 17 deletions(-) diff --git a/Dockerfile b/Dockerfile index e1f6f57..cccaa33 100755 --- a/Dockerfile +++ b/Dockerfile @@ -1,35 +1,49 @@ -# Stage 1: Build Stage +# Stage 1: Base — shared tooling and system config FROM node:22-alpine AS base -RUN npm install -g corepack@latest -RUN corepack enable && corepack prepare pnpm@9 --activate - -# Install tzdata to support timezone settings -RUN apk add --no-cache tzdata - -# Set the timezone to Asia/Tehran -RUN cp /usr/share/zoneinfo/Asia/Tehran /etc/localtime && echo "Asia/Tehran" > /etc/timezone +# Use Liara Alpine mirror +RUN sed -i 's|https://dl-cdn.alpinelinux.org|https://mirror.de.velop.ir|g' /etc/apk/repositories \ + && apk add --no-cache tzdata \ + && cp /usr/share/zoneinfo/Asia/Tehran /etc/localtime \ + && echo "Asia/Tehran" > /etc/timezone +# Install and activate pnpm via corepack +RUN npm install -g corepack@latest --registry=https://package-mirror.liara.ir \ + && corepack enable \ + && corepack prepare pnpm@9 --activate +# Stage 2: Install all dependencies (including dev) FROM base AS deps WORKDIR /temp-deps -COPY package*.json pnpm-lock.yaml ./ -RUN pnpm install --frozen-lockfile --loglevel info - +COPY package.json pnpm-lock.yaml ./ +RUN pnpm install --frozen-lockfile --loglevel info \ + --registry=https://package-mirror.liara.ir +# Stage 3: Build FROM base AS builder WORKDIR /build COPY . ./ COPY --from=deps /temp-deps/node_modules ./node_modules -RUN if [ -f package.json ] && grep -q '"build":' package.json; then pnpm run build; fi -RUN pnpm install --prod --frozen-lockfile --loglevel info +RUN if grep -q '"build":' package.json; then pnpm run build; fi +# Stage 4: Production deps only +FROM base AS prod-deps +WORKDIR /temp-deps +COPY package.json pnpm-lock.yaml ./ +RUN pnpm install --prod --frozen-lockfile --loglevel info \ + --registry=https://package-mirror.liara.ir + +# Stage 5: Runner FROM base AS runner + RUN addgroup -S appgroup && adduser -S appuser -G appgroup + WORKDIR /app -COPY . ./ -COPY --from=builder --chown=appuser:appgroup /build/ ./ +# Copy only production node_modules and build output +COPY --from=prod-deps --chown=appuser:appgroup /temp-deps/node_modules ./node_modules +COPY --from=builder --chown=appuser:appgroup /build/dist ./dist +COPY --chown=appuser:appgroup package.json ./ RUN chown -R appuser:appgroup /app @@ -38,4 +52,4 @@ USER appuser ENV NODE_ENV=production EXPOSE 3500 -CMD ["npm", "start"] +CMD ["pnpm", "start"]